Skip to content
Open
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 0 additions & 22 deletions e2e/tests/ui/features/@sbom-explorer/sbom-explorer.feature
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ Feature: SBOM Explorer - View SBOM details
Given User is authenticated

Scenario Outline: View SBOM Overview
Given An ingested SBOM "<sbomName>" is available
When User visits SBOM details Page of "<sbomName>"
Then The page title is "<sbomName>"
And Tab "Info" is visible
Expand All @@ -16,7 +15,6 @@ Feature: SBOM Explorer - View SBOM details
| quarkus-bom |

Scenario Outline: View SBOM Info (Metadata)
Given An ingested SBOM "<sbomName>" is available
When User visits SBOM details Page of "<sbomName>"
Then Tab "Info" is selected
Then "SBOM's name" is visible
Expand All @@ -30,7 +28,6 @@ Feature: SBOM Explorer - View SBOM details
| quarkus-bom |

Scenario Outline: Downloading SBOM file
Given An ingested SBOM "<sbomName>" is available
When User visits SBOM details Page of "<sbomName>"
Then "Download SBOM" action is invoked and downloaded filename is "<expectedSbomFilename>"
Then "Download License Report" action is invoked and downloaded filename is "<expectedLicenseFilename>"
Expand All @@ -40,7 +37,6 @@ Feature: SBOM Explorer - View SBOM details
| quarkus-bom | quarkus-bom.json | quarkus-bom_licenses.tar.gz |

Scenario Outline: View list of SBOM Packages
Given An ingested SBOM "<sbomName>" is available
When User visits SBOM details Page of "<sbomName>"
When User selects the Tab "Packages"
# confirms its visible for all tabs
Expand All @@ -63,8 +59,6 @@ Feature: SBOM Explorer - View SBOM details
| quarkus-bom | jdom |

Scenario Outline: View SBOM Vulnerabilities
Given An ingested SBOM "<sbomName>" is available
Given An ingested SBOM "<sbomName>" containing Vulnerabilities
When User visits SBOM details Page of "<sbomName>"
When User selects the Tab "Vulnerabilities"
When User Clicks on Vulnerabilities Tab Action
Expand All @@ -82,8 +76,6 @@ Feature: SBOM Explorer - View SBOM details

@slow
Scenario Outline: Pagination of SBOM Vulnerabilities table
Given An ingested SBOM "<sbomName>" is available
Given An ingested SBOM "<sbomName>" containing Vulnerabilities
When User visits SBOM details Page of "<sbomName>"
When User selects the Tab "Vulnerabilities"
Then Pagination of Vulnerabilities list works
Expand All @@ -93,7 +85,6 @@ Feature: SBOM Explorer - View SBOM details

@slow
Scenario Outline: View paginated list of SBOM Packages
Given An ingested SBOM "<sbomName>" is available
When User visits SBOM details Page of "<sbomName>"
When User selects the Tab "Packages"
Then Pagination of Packages list works
Expand All @@ -102,8 +93,6 @@ Feature: SBOM Explorer - View SBOM details
| ubi9-minimal-container |

Scenario Outline: Check Column Headers of SBOM Explorer Vulnerabilities table
Given An ingested SBOM "<sbomName>" is available
Given An ingested SBOM "<sbomName>" containing Vulnerabilities
When User visits SBOM details Page of "<sbomName>"
When User selects the Tab "Vulnerabilities"
Then List of Vulnerabilities has column "Id"
Expand All @@ -118,8 +107,6 @@ Feature: SBOM Explorer - View SBOM details

@slow
Scenario Outline: Sorting SBOM Vulnerabilities
Given An ingested SBOM "<sbomName>" is available
Given An ingested SBOM "<sbomName>" containing Vulnerabilities
When User visits SBOM details Page of "<sbomName>"
When User selects the Tab "Vulnerabilities"
Then Table column "Description" is not sortable
Expand All @@ -130,16 +117,7 @@ Feature: SBOM Explorer - View SBOM details
| sbomName |
| quarkus-bom |

Scenario Outline: Add Labels to SBOM from SBOM List Page
Given An ingested SBOM "<sbomName>" is available
When User Adds Labels "<Labels>" to "<sbomName>" SBOM from List Page
Then The Label list "<Labels>" added to the SBOM "<sbomName>" on List Page
Examples:
| sbomName | Labels |
| quarkus-bom | RANDOM_LABELS |

Scenario Outline: Add Labels to SBOM from SBOM Explorer Page
Given An ingested SBOM "<sbomName>" is available
When User visits SBOM details Page of "<sbomName>"
When User Adds Labels "<Labels>" to "<sbomName>" SBOM from Explorer Page
Then The Label list "<Labels>" added to the SBOM "<sbomName>" on Explorer Page
Expand Down
65 changes: 2 additions & 63 deletions e2e/tests/ui/features/@sbom-explorer/sbom-explorer.step.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,18 @@ import { createBdd } from "playwright-bdd";
import { expect } from "playwright/test";
import { DetailsPage } from "../../helpers/DetailsPage";
import { ToolbarTable } from "../../helpers/ToolbarTable";
import { SbomListPage } from "../../pages/sbom-list/SbomListPage";
import { SbomDetailsPage } from "../../pages/sbom-details/SbomDetailsPage";
import { test } from "../../fixtures";

export const { Given, When, Then } = createBdd(test);

const PACKAGE_TABLE_NAME = "Package table";
const VULN_TABLE_NAME = "Vulnerability table";
const SBOM_TABLE_NAME = "sbom-table";

Given("An ingested SBOM {string} is available", async ({ page }, sbomName) => {
const sbomListPage = await SbomListPage.build(page);

const toolbar = await sbomListPage.getToolbar();
const table = await sbomListPage.getTable();

await toolbar.applyTextFilter("Filter text", sbomName);
await table.waitUntilDataIsLoaded();
await table.verifyColumnContainsText("Name", sbomName);
});

When(
"User visits SBOM details Page of {string}",
async ({ page }, sbomName) => {
await page.getByRole("link", { name: sbomName, exact: true }).click();
await SbomDetailsPage.build(page, sbomName);
},
);

Expand Down Expand Up @@ -87,18 +75,6 @@ Then(
},
);

Given(
"An ingested SBOM {string} containing Vulnerabilities",
async ({ page }, sbomName) => {
const element = page.locator(
`xpath=(//tr[contains(.,'${sbomName}')]/td[@data-label='Vulnerabilities']/div)[1]`,
);
await expect(element, "SBOM have no vulnerabilities").toHaveText(
/^(?!0$).+/,
);
},
);

When("User Clicks on Vulnerabilities Tab Action", async ({ page }) => {
await page.getByLabel("Tab action").click();
});
Expand Down Expand Up @@ -199,43 +175,6 @@ Then(
},
);

When(
"User Adds Labels {string} to {string} SBOM from List Page",
async ({ page }, labelList, sbomName) => {
const toolbarTable = new ToolbarTable(page, SBOM_TABLE_NAME);
await toolbarTable.editLabelsListPage(sbomName);
const detailsPage = new DetailsPage(page);

// Generate random labels if placeholder is used
const labelsToAdd =
labelList === "RANDOM_LABELS" ? detailsPage.generateLabels() : labelList;
await detailsPage.addLabels(labelsToAdd);

// Store generated labels for verification
// biome-ignore lint/suspicious/noExplicitAny: allowed
(page as any).testContext = {
// biome-ignore lint/suspicious/noExplicitAny: allowed
...(page as any).testContext,
generatedLabels: labelsToAdd,
};
},
);

Then(
"The Label list {string} added to the SBOM {string} on List Page",
async ({ page }, labelList, sbomName) => {
const detailsPage = new DetailsPage(page);

// Use stored generated labels if placeholder was used
const labelsToVerify =
labelList === "RANDOM_LABELS"
? // biome-ignore lint/suspicious/noExplicitAny: allowed
(page as any).testContext?.generatedLabels || labelList
: labelList;
await detailsPage.verifyLabels(labelsToVerify, sbomName);
},
);

When(
"User Adds Labels {string} to {string} SBOM from Explorer Page",
async ({ page }, labelList, _sbomName) => {
Expand Down
19 changes: 19 additions & 0 deletions e2e/tests/ui/features/@sbom-search/sbom-search.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
Feature: SBOM Search Page
Background: Authentication
Given User is authenticated

Scenario Outline: Verify Vulnerabilities
Given An ingested SBOM "<sbomName>" is available
Given An ingested SBOM "<sbomName>" containing Vulnerabilities

Examples:
| sbomName |
| quarkus-bom |

Scenario Outline: Add Labels to SBOM from SBOM List Page
Given An ingested SBOM "<sbomName>" is available
When User Adds Labels "<Labels>" to "<sbomName>" SBOM from List Page
Then The Label list "<Labels>" added to the SBOM "<sbomName>" on List Page
Examples:
| sbomName | Labels |
| quarkus-bom | RANDOM_LABELS |
71 changes: 71 additions & 0 deletions e2e/tests/ui/features/@sbom-search/sbom-search.step.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
import { createBdd } from "playwright-bdd";
import { expect } from "playwright/test";

import { test } from "../../fixtures";
import { DetailsPage } from "../../helpers/DetailsPage";
import { ToolbarTable } from "../../helpers/ToolbarTable";
import { SbomListPage } from "../../pages/sbom-list/SbomListPage";

export const { Given, When, Then } = createBdd(test);

const SBOM_TABLE_NAME = "sbom-table";

Given("An ingested SBOM {string} is available", async ({ page }, sbomName) => {
const sbomListPage = await SbomListPage.build(page);

const toolbar = await sbomListPage.getToolbar();
const table = await sbomListPage.getTable();

await toolbar.applyTextFilter("Filter text", sbomName);
await table.waitUntilDataIsLoaded();
await table.verifyColumnContainsText("Name", sbomName);
});

Given(
"An ingested SBOM {string} containing Vulnerabilities",
async ({ page }, sbomName) => {
const element = page.locator(
`xpath=(//tr[contains(.,'${sbomName}')]/td[@data-label='Vulnerabilities']/div)[1]`,
);
await expect(element, "SBOM have no vulnerabilities").toHaveText(
/^(?!0$).+/,
);
},
);

When(
"User Adds Labels {string} to {string} SBOM from List Page",
async ({ page }, labelList, sbomName) => {
const toolbarTable = new ToolbarTable(page, SBOM_TABLE_NAME);
await toolbarTable.editLabelsListPage(sbomName);
const detailsPage = new DetailsPage(page);

// Generate random labels if placeholder is used
const labelsToAdd =
labelList === "RANDOM_LABELS" ? detailsPage.generateLabels() : labelList;
await detailsPage.addLabels(labelsToAdd);

// Store generated labels for verification
// biome-ignore lint/suspicious/noExplicitAny: allowed
(page as any).testContext = {
// biome-ignore lint/suspicious/noExplicitAny: allowed
...(page as any).testContext,
generatedLabels: labelsToAdd,
};
},
);

Then(
"The Label list {string} added to the SBOM {string} on List Page",
async ({ page }, labelList, sbomName) => {
const detailsPage = new DetailsPage(page);

// Use stored generated labels if placeholder was used
const labelsToVerify =
labelList === "RANDOM_LABELS"
? // biome-ignore lint/suspicious/noExplicitAny: allowed
(page as any).testContext?.generatedLabels || labelList
: labelList;
await detailsPage.verifyLabels(labelsToVerify, sbomName);
},
);