Skip to content

Commit 477303d

Browse files
authored
chore(test): update e2e test to latest tests-playwright changes (#291)
Signed-off-by: Ondrej Dockal <[email protected]>
1 parent 06a3aea commit 477303d

File tree

6 files changed

+71
-68
lines changed

6 files changed

+71
-68
lines changed

.github/workflows/e2e-main.yaml

+6-3
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,11 @@ jobs:
110110
- name: Execute pnpm in Red Hat Account Extension
111111
working-directory: ${{ env.REPOSITORY }}
112112
run: |
113-
pnpm install -D @podman-desktop/tests-playwright@next
114-
pnpm build
113+
# workaround for https://github.com/containers/podman-desktop-extension-bootc/issues/712
114+
version=$(npm view @podman-desktop/tests-playwright@next version)
115+
echo "Version of @podman-desktop/tests-playwright to be used: $version"
116+
jq --arg version "$version" '.devDependencies."@podman-desktop/tests-playwright" = $version' package.json > package.json_tmp && mv package.json_tmp package.json
117+
pnpm install --no-frozen-lockfile
115118
116119
- name: Run All E2E tests in Red Hat Account Extension
117120
working-directory: ${{ env.REPOSITORY }}
@@ -123,4 +126,4 @@ jobs:
123126
if: always()
124127
with:
125128
name: e2e-tests
126-
path: ./**/tests/output/
129+
path: ./tests/**/output/

.github/workflows/pr-check.yaml

+8-4
Original file line numberDiff line numberDiff line change
@@ -120,16 +120,20 @@ jobs:
120120
- name: Build Podman Desktop for E2E tests
121121
working-directory: ./podman-desktop
122122
run: |
123-
pnpm install
123+
pnpm install --frozen-lockfile
124124
pnpm test:e2e:build
125125
126126
- name: Ensure getting current HEAD version of the test framework
127127
working-directory: ./podman-desktop-redhat-account-ext
128-
run: pnpm install -D @podman-desktop/tests-playwright@next
128+
run: |
129+
# workaround for https://github.com/containers/podman-desktop-extension-bootc/issues/712
130+
version=$(npm view @podman-desktop/tests-playwright@next version)
131+
echo "Version of @podman-desktop/tests-playwright to be used: $version"
132+
jq --arg version "$version" '.devDependencies."@podman-desktop/tests-playwright" = $version' package.json > package.json_tmp && mv package.json_tmp package.json
129133
130134
- name: Execute pnpm in SSO Extension
131135
working-directory: ./podman-desktop-redhat-account-ext
132-
run: pnpm install
136+
run: pnpm install --no-frozen-lockfile
133137

134138
- name: Build SSO extension from container file
135139
working-directory: ./podman-desktop-redhat-account-ext
@@ -151,4 +155,4 @@ jobs:
151155
if: always()
152156
with:
153157
name: e2e-tests
154-
path: ./**/tests/output/
158+
path: ./tests/**/output/

package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
"test": "vitest run --coverage",
4545
"test:all": "pnpm test && pnpm test:e2e",
4646
"test:e2e:setup": "xvfb-maybe --auto-servernum --server-args='-screen 0 1280x960x24' --",
47-
"test:e2e": "cross-env E2E_TESTS=true pnpm run test:e2e:setup npx playwright test tests/src"
47+
"test:e2e": "cross-env E2E_TESTS=true npm run test:e2e:setup npx playwright test tests/src"
4848
},
4949
"dependencies": {
5050
"@podman-desktop/api": "^1.12.0",
@@ -57,7 +57,7 @@
5757
},
5858
"devDependencies": {
5959
"7zip-min": "^1.4.5",
60-
"@playwright/test": "^1.46.1",
60+
"@playwright/test": "^1.47.0",
6161
"@podman-desktop/tests-playwright": "next",
6262
"@types/js-yaml": "^4.0.5",
6363
"@types/node": "^20",

playwright.config.ts

+5-4
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,15 @@
1919
import { defineConfig, devices } from '@playwright/test';
2020

2121
export default defineConfig({
22-
outputDir: 'output/',
22+
outputDir: 'tests/output/',
2323
workers: 1,
24+
timeout: 60000,
2425

2526
reporter: [
2627
['list'],
27-
['junit', { outputFile: 'output/junit-results.xml' }],
28-
['json', { outputFile: 'output/json-results.json' }],
29-
['html', { open: 'never', outputFolder: 'output/html-results/' }],
28+
['junit', { outputFile: 'tests/output/junit-results.xml' }],
29+
['json', { outputFile: 'tess/output/json-results.json' }],
30+
['html', { open: 'never', outputFolder: 'tests/output/html-results/' }],
3031
],
3132

3233
projects: [

pnpm-lock.yaml

+16-16
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/src/sso-extension.spec.ts

+34-39
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,12 @@
1515
*
1616
* SPDX-License-Identifier: Apache-2.0
1717
***********************************************************************/
18-
import type { Page} from '@playwright/test';
19-
import { expect as playExpect, test } from '@playwright/test';
20-
import { AuthenticationPage, ExtensionCardPage, NavigationBar, PodmanDesktopRunner, WelcomePage } from '@podman-desktop/tests-playwright';
18+
19+
import type { NavigationBar } from '@podman-desktop/tests-playwright';
20+
import { AuthenticationPage, expect as playExpect, ExtensionCardPage, RunnerOptions, test } from '@podman-desktop/tests-playwright';
2121

2222
import { SSOExtensionPage } from './model/pages/sso-extension-page';
2323

24-
let pdRunner: PodmanDesktopRunner;
25-
let page: Page;
26-
let navBar: NavigationBar;
2724
let extensionInstalled = false;
2825
let extensionCard: ExtensionCardPage;
2926
const imageName = 'ghcr.io/redhat-developer/podman-desktop-redhat-account-ext:latest';
@@ -34,65 +31,63 @@ const activeExtensionStatus = 'ACTIVE';
3431
const disabledExtensionStatus = 'DISABLED';
3532
const skipInstallation = process.env.SKIP_INSTALLATION ? process.env.SKIP_INSTALLATION : false;
3633

37-
test.beforeAll(async () => {
38-
pdRunner = new PodmanDesktopRunner({ customFolder: 'sso-tests-pd', autoUpdate: false, autoCheckUpdate: false });
39-
page = await pdRunner.start();
40-
pdRunner.setVideoAndTraceName('sso-e2e');
41-
42-
const welcomePage = new WelcomePage(page);
34+
test.use({
35+
runnerOptions: new RunnerOptions({ customFolder: 'sso-tests-pd', autoUpdate: false, autoCheckUpdates: false }),
36+
});
37+
test.beforeAll(async ({ runner, page, welcomePage }) => {
38+
runner.setVideoAndTraceName('sso-e2e');
4339
await welcomePage.handleWelcomePage(true);
44-
navBar = new NavigationBar(page);
4540
extensionCard = new ExtensionCardPage(page, extensionLabelName, extensionLabel);
4641
});
4742

48-
test.afterAll(async () => {
49-
await pdRunner.close();
43+
test.afterAll(async ({ runner }) => {
44+
await runner.close();
5045
});
5146

52-
test.describe('Red Hat Authentication extension verification', () => {
53-
test.describe('Red Hat Authentication extension installation', () => {
54-
test('Go to extensions and check if extension is already installed', async () => {
55-
const extensions = await navBar.openExtensions();
47+
test.describe.serial('Red Hat Authentication extension verification', () => {
48+
test.describe.serial('Red Hat Authentication extension installation', () => {
49+
test('Go to extensions and check if extension is already installed', async ({ navigationBar }) => {
50+
const extensions = await navigationBar.openExtensions();
5651
if (await extensions.extensionIsInstalled(extensionLabel)) {
5752
extensionInstalled = true;
5853
}
5954
});
6055

6156
// we want to skip removing of the extension when we are running tests from PR check
62-
test('Uninstalle previous version of sso extension', async () => {
57+
test('Uninstalle previous version of sso extension', async ({ navigationBar }) => {
6358
test.skip(!extensionInstalled || !!skipInstallation);
6459
test.setTimeout(60000);
65-
await removeExtension();
60+
await removeExtension(navigationBar);
6661
});
6762

68-
test('Extension can be installed using OCI image', async () => {
63+
test('Extension can be installed using OCI image', async ({ navigationBar }) => {
6964
test.skip(extensionInstalled && !skipInstallation);
7065
test.setTimeout(200000);
71-
const extensions = await navBar.openExtensions();
66+
const extensions = await navigationBar.openExtensions();
7267
await extensions.installExtensionFromOCIImage(imageName);
7368
await playExpect(extensionCard.card).toBeVisible();
7469
});
7570

76-
test('Extension card is present and active', async () => {
77-
const extensions = await navBar.openExtensions();
71+
test('Extension card is present and active', async ({ navigationBar }) => {
72+
const extensions = await navigationBar.openExtensions();
7873
await playExpect.poll(async () =>
7974
await extensions.extensionIsInstalled(extensionLabel), { timeout: 30000 },
8075
).toBeTruthy();
8176
const extensionCard = await extensions.getInstalledExtension(extensionLabelName, extensionLabel);
8277
await playExpect(extensionCard.status).toHaveText(activeExtensionStatus);
8378
});
8479

85-
test('Extension Details show correct status', async () => {
86-
const extensions = await navBar.openExtensions();
80+
test('Extension Details show correct status', async ({ page,navigationBar }) => {
81+
const extensions = await navigationBar.openExtensions();
8782
const extensionCard = await extensions.getInstalledExtension(extensionLabelName, extensionLabel);
8883
await extensionCard.openExtensionDetails('Red Hat Authentication');
8984
const details = new SSOExtensionPage(page);
9085
await playExpect(details.heading).toBeVisible();
9186
await playExpect(details.status).toHaveText(activeExtensionStatus);
9287
});
9388

94-
test('SSO provider is available in Authentication Page', async () => {
95-
const settingsBar = await navBar.openSettings();
89+
test('SSO provider is available in Authentication Page', async ({ navigationBar }) => {
90+
const settingsBar = await navigationBar.openSettings();
9691
const authPage = await settingsBar.openTabPage(AuthenticationPage);
9792
await playExpect(authPage.heading).toHaveText('Authentication');
9893
const provider = authPage.getProvider(authProviderName);
@@ -102,43 +97,43 @@ test.describe('Red Hat Authentication extension verification', () => {
10297
});
10398
});
10499

105-
test.describe('Red Hat Authentication extension handling', () => {
106-
test('Extension can be disabled', async () => {
107-
const extensions = await navBar.openExtensions();
100+
test.describe.serial('Red Hat Authentication extension handling', () => {
101+
test('Extension can be disabled', async ({ navigationBar }) => {
102+
const extensions = await navigationBar.openExtensions();
108103
playExpect(await extensions.extensionIsInstalled(extensionLabel)).toBeTruthy();
109104
const extensionCard = await extensions.getInstalledExtension(extensionLabelName, extensionLabel);
110105
await playExpect(extensionCard.status).toHaveText(activeExtensionStatus);
111106
await extensionCard.disableExtension();
112107
await playExpect(extensionCard.status).toHaveText(disabledExtensionStatus);
113108

114-
const settingsBar = await navBar.openSettings();
109+
const settingsBar = await navigationBar.openSettings();
115110
const authPage = await settingsBar.openTabPage(AuthenticationPage);
116111
await playExpect(authPage.heading).toHaveText('Authentication');
117112
const provider = authPage.getProvider(authProviderName);
118113
await playExpect(provider).toHaveCount(0);
119114
});
120115

121-
test('Extension can be re-enabled correctly', async () => {
122-
const extensions = await navBar.openExtensions();
116+
test('Extension can be re-enabled correctly', async ({ navigationBar }) => {
117+
const extensions = await navigationBar.openExtensions();
123118
playExpect(await extensions.extensionIsInstalled(extensionLabel)).toBeTruthy();
124119
const extensionCard = await extensions.getInstalledExtension(extensionLabelName, extensionLabel);
125120
await playExpect(extensionCard.status).toHaveText(disabledExtensionStatus);
126121
await extensionCard.enableExtension();
127122
await playExpect(extensionCard.status).toHaveText(activeExtensionStatus);
128123

129-
const settingsBar = await navBar.openSettings();
124+
const settingsBar = await navigationBar.openSettings();
130125
const authPage = await settingsBar.openTabPage(AuthenticationPage);
131126
await playExpect(authPage.heading).toHaveText('Authentication');
132127
await playExpect(authPage.getProvider(authProviderName)).toHaveCount(1);
133128
});
134129
});
135130

136-
test('SSO extension can be removed', async () => {
137-
await removeExtension();
131+
test('SSO extension can be removed', async ({ navigationBar }) => {
132+
await removeExtension(navigationBar);
138133
});
139134
});
140135

141-
async function removeExtension(): Promise<void> {
136+
async function removeExtension(navBar: NavigationBar): Promise<void> {
142137
const extensions = await navBar.openExtensions();
143138
const extensionCard = await extensions.getInstalledExtension(extensionLabelName, extensionLabel);
144139
await extensionCard.disableExtension();

0 commit comments

Comments
 (0)