forked from podman-desktop/podman-desktop
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcompose-onboarding-smoke.spec.ts
141 lines (114 loc) · 5.67 KB
/
compose-onboarding-smoke.spec.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
/**********************************************************************
* Copyright (C) 2024 Red Hat, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* SPDX-License-Identifier: Apache-2.0
***********************************************************************/
import * as os from 'node:os';
import type { Page } from '@playwright/test';
import { expect as playExpect } from '@playwright/test';
import { afterAll, beforeAll, beforeEach, describe, test } from 'vitest';
import { CLIToolsPage } from '../model/pages/cli-tools-page';
import { ComposeOnboardingPage } from '../model/pages/compose-onboarding-page';
import { ResourcesPage } from '../model/pages/resources-page';
import { SettingsBar } from '../model/pages/settings-bar';
import { WelcomePage } from '../model/pages/welcome-page';
import { NavigationBar } from '../model/workbench/navigation';
import { PodmanDesktopRunner } from '../runner/podman-desktop-runner';
import type { RunnerTestContext } from '../testContext/runner-test-context';
let pdRunner: PodmanDesktopRunner;
let page: Page;
let navBar: NavigationBar;
let composeVersion: string;
const isLinux = os.platform() === 'linux';
beforeAll(async () => {
pdRunner = new PodmanDesktopRunner();
page = await pdRunner.start();
pdRunner.setVideoAndTraceName('compose-onboarding-e2e');
const welcomePage = new WelcomePage(page);
await welcomePage.handleWelcomePage(true);
navBar = new NavigationBar(page);
});
afterAll(async () => {
await pdRunner.close();
});
beforeEach<RunnerTestContext>(async ctx => {
ctx.pdRunner = pdRunner;
});
describe.skipIf(isLinux)('Compose onboarding workflow verification', async () => {
test('Can enter Compose onboarding', async () => {
await navBar.openSettings();
const settingsBar = new SettingsBar(page);
const resourcesPage = await settingsBar.openTabPage(ResourcesPage);
const composeBox = resourcesPage.featuredProviderResources.getByRole('region', { name: 'Compose' });
await playExpect(composeBox).toBeVisible();
await composeBox.scrollIntoViewIfNeeded();
const setupButton = composeBox.getByRole('button', { name: 'Setup Compose' });
await playExpect(setupButton).toBeVisible({ timeout: 50000 });
await setupButton.click();
const onboardingPage = new ComposeOnboardingPage(page);
await playExpect(onboardingPage.heading).toBeVisible();
await playExpect(onboardingPage.onboardingStatusMessage).toHaveText('Compose Download');
const downloadAvailableText = page.getByText(
/Compose will be downloaded in the next step \(Version v[0-9.]+\). Want to download/,
{ exact: true },
);
await playExpect(downloadAvailableText).toBeVisible();
const versionInfoFullText = await downloadAvailableText.textContent();
const matches = versionInfoFullText?.match(/v\d+(\.\d+)+/);
if (matches) {
composeVersion = matches[0];
}
});
test('Can install Compose locally', async () => {
const onboardingPage = new ComposeOnboardingPage(page);
await onboardingPage.nextStepButton.click();
await playExpect(onboardingPage.onboardingStatusMessage).toHaveText('Compose Successfully Downloaded', {
timeout: 50000,
});
await onboardingPage.cancelSetupButtion.click();
const skipDialog = page.getByRole('dialog', { name: 'Skip Setup Popup', exact: true });
const skipOkButton = skipDialog.getByRole('button', { name: 'Ok' });
await skipOkButton.click();
});
test('Can install Compose system-wide', async () => {
const resourcesPage = new ResourcesPage(page);
const composeBox = resourcesPage.featuredProviderResources.getByRole('region', { name: 'Compose' });
const setupButton = composeBox.getByRole('button', { name: 'Setup Compose' });
await setupButton.click();
const onboardingPage = new ComposeOnboardingPage(page);
await playExpect(onboardingPage.onboardingStatusMessage).toHaveText('Compose Successfully Downloaded');
const downloadAvailableText = page.getByText(
'The next step will install Compose system-wide. You will be prompted for system',
);
await playExpect(downloadAvailableText).toBeVisible();
await onboardingPage.nextStepButton.click();
await playExpect(onboardingPage.onboardingStatusMessage).toHaveText('Compose Installed', { timeout: 50000 });
let downloadFinishedText = page.locator('p');
downloadFinishedText = downloadFinishedText.filter({ hasText: 'Compose is installed system-wide!' });
await playExpect(downloadFinishedText).toBeVisible();
await onboardingPage.nextStepButton.click();
});
test('Verify Compose was installed', async () => {
const resourcesPage = new ResourcesPage(page);
const composeBox = resourcesPage.featuredProviderResources.getByRole('region', { name: 'Compose' });
const setupButton = composeBox.getByRole('button', { name: 'Setup Compose' });
await playExpect(setupButton).toBeHidden();
const settingsBar = new SettingsBar(page);
const cliToolsPage = await settingsBar.openTabPage(CLIToolsPage);
const composeRow = cliToolsPage.toolsTable.getByLabel('Compose');
const composeVersionInfo = composeRow.getByLabel('cli-version');
await playExpect(composeVersionInfo).toHaveText('docker-compose ' + composeVersion);
});
});