Skip to content

Catalog Operations

Examples of catalog interactions.

Browse Catalog

typescript
import { test, expect } from "rhdh-e2e-test-utils/test";
import { CatalogPage } from "rhdh-e2e-test-utils/pages";

test.describe("Catalog Operations", () => {
  test.beforeAll(async ({ rhdh }) => {
    await rhdh.configure({ auth: "keycloak" });
    await rhdh.deploy();
  });

  test.beforeEach(async ({ loginHelper }) => {
    await loginHelper.loginAsKeycloakUser();
  });

  test("browse catalog", async ({ page, uiHelper }) => {
    const catalogPage = new CatalogPage(page);

    // Navigate to catalog
    await catalogPage.go();

    // Verify page loaded
    await uiHelper.verifyHeading("Catalog");

    // Filter by kind
    await catalogPage.selectKind("Component");

    // Search
    await catalogPage.search("example");

    // Verify results
    await uiHelper.verifyRowsInTable(["example-component"]);
  });

  test("view component details", async ({ page, uiHelper }) => {
    const catalogPage = new CatalogPage(page);

    await catalogPage.go();
    await catalogPage.goToByName("example-component");

    // Verify component page
    await uiHelper.verifyHeading("example-component");
    await uiHelper.clickTab("Overview");
    await uiHelper.verifyTextinCard("About", "description");
  });
});

Register Component

typescript
import { test, expect } from "rhdh-e2e-test-utils/test";
import { CatalogImportPage } from "rhdh-e2e-test-utils/pages";

test("register component", async ({ page, loginHelper, uiHelper }) => {
  await loginHelper.loginAsKeycloakUser();

  const importPage = new CatalogImportPage(page);

  await importPage.go();

  // Analyze component
  await importPage.analyzeComponent(
    "https://github.com/my-org/my-repo/blob/main/catalog-info.yaml"
  );

  // Verify YAML
  await importPage.inspectEntityAndVerifyYaml("kind: Component");

  // Register
  await importPage.submitRegistration();

  // Verify success
  await uiHelper.verifyHeading("my-component");
});

Table Verification

typescript
import { test } from "rhdh-e2e-test-utils/test";
import { CatalogPage } from "rhdh-e2e-test-utils/pages";

test("verify catalog table", async ({ page, loginHelper, uiHelper }) => {
  await loginHelper.loginAsKeycloakUser();

  const catalogPage = new CatalogPage(page);
  await catalogPage.go();

  // Verify multiple rows exist
  await uiHelper.verifyRowsInTable([
    "component-1",
    "component-2",
    "component-3",
  ]);

  // Verify cells in specific row
  await uiHelper.verifyRowInTableByUniqueText(
    "component-1",
    ["Component", "Production", "team-a"]
  );

  // Verify row doesn't exist
  await uiHelper.verifyRowNotInTable("deleted-component");
});
typescript
import { test, expect } from "rhdh-e2e-test-utils/test";

test("catalog navigation", async ({ page, loginHelper, uiHelper }) => {
  await loginHelper.loginAsKeycloakUser();

  // Navigate via sidebar
  await uiHelper.openSidebar("Catalog");
  await expect(page).toHaveURL(/catalog/);

  // Click on entity
  await page.click("text=example-component");

  // Navigate tabs
  await uiHelper.clickTab("Dependencies");
  await uiHelper.clickTab("API");
  await uiHelper.clickTab("Overview");

  // Use catalog sidebar
  await uiHelper.openCatalogSidebar("Dependencies");
});

Released under the Apache-2.0 License.