mirror of
https://github.com/podman-desktop/podman-desktop
synced 2026-04-21 17:47:22 +00:00
chore(tests): Improve e2e test case into more logical units, fixes #1474 - verifies welcome page was opened on application start up - telemetry default value is correct and can be changed - welcome page can be closed and redirects into dashboard Signed-off-by: Ondrej Dockal <odockal@redhat.com>
This commit is contained in:
parent
941f9f5b45
commit
1282f5db77
1 changed files with 57 additions and 43 deletions
|
|
@ -1,13 +1,12 @@
|
|||
import type { BrowserWindow } from 'electron';
|
||||
import type { ElectronApplication, JSHandle, Page } from 'playwright';
|
||||
import { _electron as electron } from 'playwright';
|
||||
import { afterAll, beforeAll, expect, test } from 'vitest';
|
||||
import { afterAll, beforeAll, expect, test, describe } from 'vitest';
|
||||
import { expect as playExpect } from '@playwright/test';
|
||||
import { existsSync } from 'node:fs';
|
||||
import { rm } from 'node:fs/promises';
|
||||
|
||||
let electronApp: ElectronApplication;
|
||||
|
||||
let page: Page;
|
||||
|
||||
beforeAll(async () => {
|
||||
|
|
@ -35,53 +34,68 @@ afterAll(async () => {
|
|||
await electronApp.close();
|
||||
});
|
||||
|
||||
test('Check welcome page is displayed and that we are redirected to the main page where dashboard page is there', async () => {
|
||||
// Direct Electron console to Node terminal.
|
||||
page.on('console', console.log);
|
||||
describe('Basic e2e verification of podman desktop start', async () => {
|
||||
test('Check the Welcome page is displayed', async () => {
|
||||
// Direct Electron console to Node terminal.
|
||||
page.on('console', console.log);
|
||||
|
||||
const window: JSHandle<BrowserWindow> = await electronApp.browserWindow(page);
|
||||
const window: JSHandle<BrowserWindow> = await electronApp.browserWindow(page);
|
||||
|
||||
const windowState = await window.evaluate(
|
||||
(mainWindow): Promise<{ isVisible: boolean; isDevToolsOpened: boolean; isCrashed: boolean }> => {
|
||||
const getState = () => ({
|
||||
isVisible: mainWindow.isVisible(),
|
||||
isDevToolsOpened: mainWindow.webContents.isDevToolsOpened(),
|
||||
isCrashed: mainWindow.webContents.isCrashed(),
|
||||
});
|
||||
const windowState = await window.evaluate(
|
||||
(mainWindow): Promise<{ isVisible: boolean; isDevToolsOpened: boolean; isCrashed: boolean }> => {
|
||||
const getState = () => ({
|
||||
isVisible: mainWindow.isVisible(),
|
||||
isDevToolsOpened: mainWindow.webContents.isDevToolsOpened(),
|
||||
isCrashed: mainWindow.webContents.isCrashed(),
|
||||
});
|
||||
|
||||
return new Promise(resolve => {
|
||||
/**
|
||||
* The main window is created hidden, and is shown only when it is ready.
|
||||
* See {@link ../packages/main/src/mainWindow.ts} function
|
||||
*/
|
||||
if (mainWindow.isVisible()) {
|
||||
resolve(getState());
|
||||
} else mainWindow.once('ready-to-show', () => resolve(getState()));
|
||||
});
|
||||
},
|
||||
);
|
||||
return new Promise(resolve => {
|
||||
/**
|
||||
* The main window is created hidden, and is shown only when it is ready.
|
||||
* See {@link ../packages/main/src/mainWindow.ts} function
|
||||
*/
|
||||
if (mainWindow.isVisible()) {
|
||||
resolve(getState());
|
||||
} else mainWindow.once('ready-to-show', () => resolve(getState()));
|
||||
});
|
||||
},
|
||||
);
|
||||
expect(windowState.isCrashed, 'The app has crashed').toBeFalsy();
|
||||
expect(windowState.isVisible, 'The main window was not visible').toBeTruthy();
|
||||
|
||||
await page.screenshot({ path: 'tests/output/screenshots/screenshot-welcome-page-init.png', fullPage: true });
|
||||
await page.screenshot({ path: 'tests/output/screenshots/screenshot-welcome-page-init.png', fullPage: true });
|
||||
|
||||
// wait for the initial screen to be loaded
|
||||
const goToPodmanDesktopButton = page.locator('button:text("Go to Podman Desktop")');
|
||||
// wait for visibility
|
||||
await goToPodmanDesktopButton.waitFor({ state: 'visible' });
|
||||
|
||||
await page.screenshot({ path: 'tests/output/screenshots/screenshot-welcome-page-display.png', fullPage: true });
|
||||
|
||||
// click on the button
|
||||
await goToPodmanDesktopButton.click();
|
||||
|
||||
await page.screenshot({
|
||||
path: 'tests/output/screenshots/screenshot-welcome-page-redirect-to-dashboard.png',
|
||||
fullPage: true,
|
||||
const welcomeMessage = page.locator('text=/Welcome to Podman Desktop.*/');
|
||||
await playExpect(welcomeMessage).toBeVisible();
|
||||
});
|
||||
|
||||
// check we have the dashboard page
|
||||
const dashboardTitle = page.getByRole('heading', { name: 'Dashboard' });
|
||||
await playExpect(dashboardTitle).toBeVisible();
|
||||
test('Telemetry checkbox is present, set to true, consent can be changed', async () => {
|
||||
// wait for the initial screen to be loaded
|
||||
const telemetryConsent = page.getByText('Telemetry');
|
||||
expect(telemetryConsent).not.undefined;
|
||||
expect(await telemetryConsent.isChecked()).to.be.true;
|
||||
|
||||
expect(windowState.isCrashed, 'The app has crashed').toBeFalsy();
|
||||
expect(windowState.isVisible, 'The main window was not visible').toBeTruthy();
|
||||
await telemetryConsent.click();
|
||||
expect(await telemetryConsent.isChecked()).to.be.false;
|
||||
});
|
||||
|
||||
test('Redirection from Welcome page to Dashboard works', async () => {
|
||||
const goToPodmanDesktopButton = page.locator('button:text("Go to Podman Desktop")');
|
||||
// wait for visibility
|
||||
await goToPodmanDesktopButton.waitFor({ state: 'visible' });
|
||||
|
||||
await page.screenshot({ path: 'tests/output/screenshots/screenshot-welcome-page-display.png', fullPage: true });
|
||||
|
||||
// click on the button
|
||||
await goToPodmanDesktopButton.click();
|
||||
|
||||
await page.screenshot({
|
||||
path: 'tests/output/screenshots/screenshot-welcome-page-redirect-to-dashboard.png',
|
||||
fullPage: true,
|
||||
});
|
||||
|
||||
// check we have the dashboard page
|
||||
const dashboardTitle = page.getByRole('heading', { name: 'Dashboard' });
|
||||
await playExpect(dashboardTitle).toBeVisible();
|
||||
});
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in a new issue