Skip to content

Commit 78d2ff9

Browse files
committed
[RHTAP-5669] Implements checks for Nexus plugin
1 parent 5f31111 commit 78d2ff9

File tree

7 files changed

+56
-16
lines changed

7 files changed

+56
-16
lines changed

src/ui/page-objects/registryPo.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,13 @@ export const RegistryPO = {
1414
expiresColumnHeader: 'Expires',
1515
manifestColumnHeader: 'Manifest',
1616

17+
// Nexus repository headers
18+
versionColumnHeader: 'Version',
19+
artifactColumnHeader: 'Artifact',
20+
repositoryTypeColumnHeader: 'Repository Type',
21+
checksumColumnHeader: 'Checksum',
22+
modifiedColumnHeader: 'Modified',
23+
1724
// Vulnerabilities table headers
1825
advisoryColumnHeader: 'Advisory',
1926
severityColumnHeader: 'Severity',
@@ -27,5 +34,6 @@ export const RegistryPO = {
2734

2835
// Repository elements
2936
quayRepositoryPrefix: 'Quay repository:',
37+
nexusRepositoryPrefix: 'Nexus Repository Manager:',
3038
backToRepositoryLinkLabel: 'Back to repository'
3139
};

src/ui/plugins/registry/baseRegistryPlugin.ts

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -51,15 +51,6 @@ export abstract class BaseRegistryPlugin implements RegistryPlugin {
5151
expect(indexedRowsAfterClear.length).toBe(initialRowCount);
5252
}
5353

54-
async checkTableColumnHeaders(page: Page): Promise<void> {
55-
await expect(page.getByRole('columnheader', { name: RegistryPO.tagColumnHeader })).toBeVisible();
56-
await expect(page.getByRole('columnheader', { name: RegistryPO.lastModifiedColumnHeader })).toBeVisible();
57-
await expect(page.getByRole('columnheader', { name: RegistryPO.securityScanColumnHeader })).toBeVisible();
58-
await expect(page.getByRole('columnheader', { name: RegistryPO.sizeColumnHeader })).toBeVisible();
59-
await expect(page.getByRole('columnheader', { name: RegistryPO.expiresColumnHeader })).toBeVisible();
60-
await expect(page.getByRole('columnheader', { name: RegistryPO.manifestColumnHeader })).toBeVisible();
61-
}
62-
6354
async checkImageTableContent(page: Page): Promise<void> {
6455
const rows = await this.getTableRows(page);
6556
expect(rows.length).toBeGreaterThan(0);
@@ -71,5 +62,5 @@ export abstract class BaseRegistryPlugin implements RegistryPlugin {
7162
// eslint-disable-next-line no-unused-vars
7263
abstract checkRepositoryLink(page: Page): Promise<void>;
7364
// eslint-disable-next-line no-unused-vars
74-
abstract checkVulnerabilities(page: Page): Promise<void>;
65+
abstract checkTableColumnHeaders(page: Page): Promise<void>;
7566
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { expect, Page } from '@playwright/test';
2+
import { ImageRegistry } from '../../../rhtap/core/integration/registry/imageRegistry';
3+
import { BaseRegistryPlugin } from "./baseRegistryPlugin";
4+
import { RegistryPO } from "../../page-objects/registryPo";
5+
6+
export class NexusUiPlugin extends BaseRegistryPlugin {
7+
private nexusProvider: ImageRegistry;
8+
9+
constructor(registry: ImageRegistry) {
10+
super(registry);
11+
this.nexusProvider = registry;
12+
}
13+
14+
async checkRepositoryHeading(page: Page): Promise<void> {
15+
await expect(page.getByRole('heading', { name: `${RegistryPO.nexusRepositoryPrefix} ${this.nexusProvider.getOrganization()}/${this.nexusProvider.getImageName()}` })).toBeVisible();
16+
}
17+
18+
// eslint-disable-next-line no-unused-vars
19+
async checkRepositoryLink(_page: Page): Promise<void> {
20+
// Skipped: Nexus repository link is not supported yet
21+
}
22+
23+
async checkTableColumnHeaders(page: Page): Promise<void> {
24+
await expect(page.getByRole('columnheader', { name: RegistryPO.versionColumnHeader })).toBeVisible();
25+
await expect(page.getByRole('columnheader', { name: RegistryPO.artifactColumnHeader })).toBeVisible();
26+
await expect(page.getByRole('columnheader', { name: RegistryPO.repositoryTypeColumnHeader })).toBeVisible();
27+
await expect(page.getByRole('columnheader', { name: RegistryPO.checksumColumnHeader })).toBeVisible();
28+
await expect(page.getByRole('columnheader', { name: RegistryPO.modifiedColumnHeader })).toBeVisible();
29+
await expect(page.getByRole('columnheader', { name: RegistryPO.sizeColumnHeader })).toBeVisible();
30+
}
31+
}

src/ui/plugins/registry/quayUiPlugin.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,15 @@ export class QuayUiPlugin extends BaseRegistryPlugin {
2121
await expect(page.getByRole('link', { name: repositoryLink })).toBeVisible();
2222
}
2323

24+
async checkTableColumnHeaders(page: Page): Promise<void> {
25+
await expect(page.getByRole('columnheader', { name: RegistryPO.tagColumnHeader })).toBeVisible();
26+
await expect(page.getByRole('columnheader', { name: RegistryPO.lastModifiedColumnHeader })).toBeVisible();
27+
await expect(page.getByRole('columnheader', { name: RegistryPO.securityScanColumnHeader })).toBeVisible();
28+
await expect(page.getByRole('columnheader', { name: RegistryPO.sizeColumnHeader })).toBeVisible();
29+
await expect(page.getByRole('columnheader', { name: RegistryPO.expiresColumnHeader })).toBeVisible();
30+
await expect(page.getByRole('columnheader', { name: RegistryPO.manifestColumnHeader })).toBeVisible();
31+
}
32+
2433
async checkVulnerabilities(page: Page): Promise<void> {
2534
const searchInput = page.getByRole('textbox', { name: RegistryPO.searchPlaceholder });
2635
await searchInput.fill('build-container');

src/ui/plugins/registry/registryPlugin.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,4 @@ export interface RegistryPlugin {
3131
* @param page - The page object
3232
*/
3333
checkTableColumnHeaders(page: Page): Promise<void>;
34-
35-
/**
36-
* Checks vulnerabilities table content
37-
* @param page - The page object
38-
*/
39-
checkVulnerabilities(page: Page): Promise<void>;
4034
}

src/ui/plugins/registry/registryUiFactory.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import { ImageRegistry, ImageRegistryType } from '../../../rhtap/core/integration/registry/imageRegistry';
99
import { RegistryPlugin } from './registryPlugin';
1010
import { QuayUiPlugin } from './quayUiPlugin';
11+
import { NexusUiPlugin } from './nexusUiPlugin';
1112

1213
export class RegistryUiFactory {
1314
/**
@@ -25,6 +26,8 @@ export class RegistryUiFactory {
2526
switch (registryType) {
2627
case ImageRegistryType.QUAY:
2728
return new QuayUiPlugin(registry);
29+
case ImageRegistryType.NEXUS:
30+
return new NexusUiPlugin(registry);
2831
default:
2932
console.warn(`Unsupported Registry type: ${registryType}`);
3033
return undefined;

tests/ui/component.test.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,10 @@ test.describe('Component UI Test Suite', () => {
145145
timeout: 20000,
146146
});
147147

148+
await test.step('Hide Quick start side panel', async () => {
149+
await hideQuickStartIfVisible(page);
150+
}, { timeout: 20000 });
151+
148152
await test.step('Check repository heading', async () => {
149153
await registryPlugin.checkRepositoryHeading(page);
150154
}, { timeout: 20000 });

0 commit comments

Comments
 (0)