Skip to content
Open
Show file tree
Hide file tree
Changes from all 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
532 changes: 532 additions & 0 deletions frontend/e2e/pages/dev-console/add-page.ts

Large diffs are not rendered by default.

112 changes: 112 additions & 0 deletions frontend/e2e/tests/dev-console/add-page.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
import type KubernetesClient from '../../clients/kubernetes-client';
import { test, expect } from '../../fixtures';
import { AddPage } from '../../pages/dev-console/add-page';

/**
* Migrated from:
* frontend/packages/dev-console/integration-tests/features/addFlow/add-page.feature
*
* Skipped scenarios:
* - A-11-TC08 (@manual) - Close Show Getting Started Resources link
* - A-11-TC11 (@manual) - Getting Started Resources card when all Quick Starts completed
*/

async function ensureGettingStartedVisible(k8sClient: KubernetesClient): Promise<void> {
await k8sClient.patchConfigMap(
'user-settings-kubeadmin',
'openshift-console-user-settings',
{ 'devconsole.addPage.gettingStarted': 'show' },
);
}

test.describe('Add page on Developer Console', { tag: ['@dev-console', '@regression'] }, () => {
const ns = `aut-add-page-${Date.now()}`;
let addPage: AddPage;

test.beforeEach(async ({ page, k8sClient, cleanup }) => {
addPage = new AddPage(page);
await k8sClient.createNamespace(ns);
cleanup.trackNamespace(ns);
await addPage.ensureDevPerspectiveAndNavigate(ns, k8sClient);
});

test('displays Getting started resources [A-11-TC01]', async ({ k8sClient }) => {
await ensureGettingStartedVisible(k8sClient);
await addPage.navigateToAdd(ns);
const gettingStarted = addPage.getGettingStartedResources();
await expect(gettingStarted).toBeVisible({ timeout: 30_000 });
const gsSection = addPage.getGettingStartedResources();
await expect(gsSection.getByTestId('card samples')).toBeVisible();
await expect(gsSection.getByTestId('card quick-start')).toBeVisible();
await expect(gsSection.getByTestId('card developer-features')).toBeVisible();
});

test('displays Add page cards and options [A-11-TC02]', async () => {
await expect(addPage.getAddCardHeading('Software Catalog')).toBeVisible({ timeout: 30_000 });
await expect(addPage.getAddCardHeading('Git Repository')).toBeVisible();
await expect(addPage.getAddCardHeading('Container images')).toBeVisible();
await expect(addPage.getAddCardHeading('Samples')).toBeVisible();
await expect(addPage.getAddCardHeading('From Local Machine')).toBeVisible();
});

test('displays Software Catalog sub-options [A-11-TC03]', async () => {
await expect(addPage.getCardItem('dev-catalog')).toBeVisible({ timeout: 30_000 });
await expect(addPage.getCardItem('dev-catalog-databases')).toBeVisible();
await expect(addPage.getCardItem('operator-backed')).toBeVisible();
});

test('displays Git Repository sub-options [A-11-TC04]', async () => {
await expect(addPage.getCardItem('import-from-git')).toBeVisible({ timeout: 30_000 });
});

test('displays From Local Machine sub-options [A-11-TC05]', async () => {
await expect(addPage.getCardItem('import-yaml')).toBeVisible({ timeout: 30_000 });
});

test('Details switch on/off [A-11-TC09, A-11-TC10]', async () => {
const switchInput = addPage.getDetailsSwitch().locator('input');

await test.step('Toggle details off', async () => {
await addPage.clickDetailsSwitch();
await expect(switchInput).not.toBeChecked();
});

await test.step('Toggle details on again', async () => {
await addPage.clickDetailsSwitch();
await expect(switchInput).toBeChecked();
});
});
});

test.describe(
'Add page Getting Started Resources visibility',
{ tag: ['@dev-console', '@smoke'] },
() => {
const ns = `aut-add-getting-started-${Date.now()}`;
let addPage: AddPage;

test.beforeEach(async ({ page, k8sClient, cleanup }) => {
addPage = new AddPage(page);
await k8sClient.createNamespace(ns);
cleanup.trackNamespace(ns);
await ensureGettingStartedVisible(k8sClient);
await addPage.ensureDevPerspectiveAndNavigate(ns, k8sClient);
});

test('hide and show Getting started resources [A-11-TC06, A-11-TC07]', async () => {
await test.step('Hide Getting Started Resources', async () => {
const gettingStarted = addPage.getGettingStartedResources();
await expect(gettingStarted).toBeVisible({ timeout: 30_000 });
await addPage.hideGettingStarted();
await expect(gettingStarted).toBeHidden();
});

await test.step('Show Getting Started Resources again', async () => {
await addPage.page.reload({ waitUntil: 'domcontentloaded' });
await addPage.clickShowGettingStartedResources();
const gettingStarted = addPage.getGettingStartedResources();
await expect(gettingStarted).toBeVisible({ timeout: 30_000 });
});
});
},
);
180 changes: 180 additions & 0 deletions frontend/e2e/tests/dev-console/catalog.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,180 @@
import { test, expect } from '../../fixtures';
import { warmupSPA } from '../../pages/base-page';
import {
AddPage,
SoftwareCatalogPage,
TopologyPage,
} from '../../pages/dev-console/add-page';

/**
* Migrated from:
* frontend/packages/dev-console/integration-tests/features/addFlow/create-from-catalog.feature
* frontend/packages/dev-console/integration-tests/features/addFlow/create-from-database.feature
* frontend/packages/dev-console/integration-tests/features/addFlow/catalog-all-namespaces.feature
* frontend/packages/dev-console/integration-tests/features/addFlow/software-catalog-details.feature
*
* Skipped scenarios:
* - A-09-TC07 (@manual) - Helm Charts Repositories
* - A-09-TC08 (@manual) - Software Catalog Customization - Add empty Categories
* - A-09-TC09 (@manual) - Software Catalog - Categories under Schema tab
* - A-09-TC10 (@manual) - Software Catalog Customization - Edit Categories
* - A-09-TC011 (@manual) - Devfiles on Software Catalog
*/

test.describe(
'Create Application from Catalog',
{ tag: ['@dev-console', '@smoke'] },
() => {
const ns = `aut-addflow-catalog-${Date.now()}`;
let addPage: AddPage;
let catalogPage: SoftwareCatalogPage;
let topologyPage: TopologyPage;

test.beforeEach(async ({ page, k8sClient, cleanup }) => {
addPage = new AddPage(page);
catalogPage = new SoftwareCatalogPage(page);
topologyPage = new TopologyPage(page);
await k8sClient.createNamespace(ns);
cleanup.trackNamespace(ns);
await warmupSPA(page);
});

test('deploy application using Catalog Template - MariaDB [A-01-TC02]', async () => {
test.slow();

await test.step('Navigate to Templates in Software Catalog', async () => {
await catalogPage.navigateToTemplates(ns);
});

await test.step('Select Databases category and MariaDB template', async () => {
await catalogPage.selectTemplateCategory('Databases');
await catalogPage.searchAndSelectCard('MariaDB');
});

await test.step('Instantiate template', async () => {
await catalogPage.clickInstantiateTemplate();
await catalogPage.getFormSubmitButton().click();
});

await test.step('Verify workload in topology', async () => {
await topologyPage.waitForWorkload('mariadb');
await expect(topologyPage.getWorkload('mariadb')).toBeVisible();
});
});
},
);

test.describe(
'Create Database from Add page',
{ tag: ['@dev-console', '@smoke'] },
() => {
const ns = `aut-addflow-database-${Date.now()}`;
let addPage: AddPage;
let catalogPage: SoftwareCatalogPage;
let topologyPage: TopologyPage;

test.beforeEach(async ({ page, k8sClient, cleanup }) => {
addPage = new AddPage(page);
catalogPage = new SoftwareCatalogPage(page);
topologyPage = new TopologyPage(page);
await k8sClient.createNamespace(ns);
cleanup.trackNamespace(ns);
await addPage.ensureDevPerspectiveAndNavigate(ns, k8sClient);
});

test('create Database from Add page - MariaDB [A-03-TC01]', async () => {
test.slow();

await test.step('Click Database card', async () => {
await addPage.clickDatabaseCard();
});

await test.step('Select MariaDB and instantiate', async () => {
await catalogPage.searchAndSelectCard('MariaDB');
await catalogPage.clickInstantiateTemplate();
await catalogPage.getFormSubmitButton().click();
});

await test.step('Verify workload in topology', async () => {
await topologyPage.waitForWorkload('mariadb');
await expect(topologyPage.getWorkload('mariadb')).toBeVisible();
});
});
},
);

test.describe(
'Software Catalog with All Namespaces',
{ tag: ['@dev-console', '@regression'] },
() => {
let catalogPage: SoftwareCatalogPage;

test.beforeEach(async ({ page }) => {
catalogPage = new SoftwareCatalogPage(page);
await warmupSPA(page);
});

test('forces project selection when all namespaces URL is accessed [A-12-TC01]', async () => {
await test.step('Navigate to catalog all namespaces', async () => {
await catalogPage.navigateToAllNamespacesCatalog();
});

await test.step('Verify project selection message', async () => {
await expect(catalogPage.getPageHeading()).toBeVisible();
await expect(catalogPage.getProjectSelectionMessage()).toBeVisible();
});
});

test('shows catalog items when specific project is selected [A-12-TC02]', async ({
k8sClient,
cleanup,
}) => {
const ns = `aut-catalog-namespaces-${Date.now()}`;
await k8sClient.createNamespace(ns);
cleanup.trackNamespace(ns);

await test.step('Navigate to catalog with namespace', async () => {
await catalogPage.navigateToCatalog(ns);
});

await test.step('Verify catalog items are visible', async () => {
await expect(catalogPage.getPageHeading()).toBeVisible();
const tiles = catalogPage.getCatalogTiles();
await expect(tiles.first()).toBeVisible({ timeout: 30_000 });
});
});
},
);

test.describe(
'Software Catalog Page details',
{ tag: ['@dev-console', '@regression'] },
() => {
const ns = `aut-catalog-pagedetails-${Date.now()}`;
let catalogPage: SoftwareCatalogPage;

test.beforeEach(async ({ page, k8sClient, cleanup }) => {
catalogPage = new SoftwareCatalogPage(page);
await k8sClient.createNamespace(ns);
cleanup.trackNamespace(ns);
await warmupSPA(page);
await catalogPage.navigateToCatalog(ns);
});

test('Software Catalog page default view [A-09-TC01]', async () => {
await expect(catalogPage.getFilterInput()).toBeVisible();
});

test('Helm Charts on Software Catalog [A-09-TC06]', async () => {
await test.step('Click on Helm Charts type', async () => {
await catalogPage.selectTypeOption('Helm Charts');
});

await test.step('Verify Helm Charts are displayed', async () => {
const tiles = catalogPage.getCatalogTiles();
await expect(tiles.first()).toBeVisible({ timeout: 30_000 });
await expect(catalogPage.getFilterInput()).toBeVisible();
});
});
},
);
Loading