summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorOliver <oliver@mohlin.dev>2025-06-24 14:40:16 +0200
committerOskar <oskar@mullvad.net>2025-06-30 11:45:42 +0200
commit74bd5a8de8ba1eb8145d1c40c8a94993a83878bd (patch)
tree0d35886fd787578c9430dbe87580062ba00b9c67
parentb9a6b9a81be6a0199213c5964b1dc01462565441 (diff)
downloadmullvadvpn-74bd5a8de8ba1eb8145d1c40c8a94993a83878bd.tar.xz
mullvadvpn-74bd5a8de8ba1eb8145d1c40c8a94993a83878bd.zip
Add e2e tests for launch view platform specific footers
-rw-r--r--desktop/packages/mullvad-vpn/test/e2e/mocked/launch/ipc.ts17
-rw-r--r--desktop/packages/mullvad-vpn/test/e2e/mocked/launch/launch.spec.ts62
2 files changed, 79 insertions, 0 deletions
diff --git a/desktop/packages/mullvad-vpn/test/e2e/mocked/launch/ipc.ts b/desktop/packages/mullvad-vpn/test/e2e/mocked/launch/ipc.ts
new file mode 100644
index 0000000000..6e790c444f
--- /dev/null
+++ b/desktop/packages/mullvad-vpn/test/e2e/mocked/launch/ipc.ts
@@ -0,0 +1,17 @@
+import { MockedTestUtils } from '../mocked-utils';
+
+export const createIpc = (util: MockedTestUtils) => {
+ const createMockResponse = <T>(channel: string, response: T) =>
+ util.sendMockIpcResponse<T>({
+ channel,
+ response,
+ });
+
+ return {
+ handle: {},
+ send: {
+ daemonDisconnected: () => createMockResponse('daemon-disconnected', {}),
+ daemonAllowed: (allowed: boolean) => createMockResponse('daemon-daemonAllowed', allowed),
+ },
+ };
+};
diff --git a/desktop/packages/mullvad-vpn/test/e2e/mocked/launch/launch.spec.ts b/desktop/packages/mullvad-vpn/test/e2e/mocked/launch/launch.spec.ts
new file mode 100644
index 0000000000..30e793d6b8
--- /dev/null
+++ b/desktop/packages/mullvad-vpn/test/e2e/mocked/launch/launch.spec.ts
@@ -0,0 +1,62 @@
+import { expect, test } from '@playwright/test';
+import { Page } from 'playwright';
+
+import { RoutePath } from '../../../../src/shared/routes';
+import { RoutesObjectModel } from '../../route-object-models';
+import { MockedTestUtils, startMockedApp } from '../mocked-utils';
+import { createIpc } from './ipc';
+
+let page: Page;
+let util: MockedTestUtils;
+let routes: RoutesObjectModel;
+let ipc: ReturnType<typeof createIpc>;
+
+test.describe('Launch', () => {
+ test.beforeAll(async () => {
+ ({ page, util } = await startMockedApp());
+ ipc = createIpc(util);
+ routes = new RoutesObjectModel(page, util);
+ await util.waitForRoute(RoutePath.main);
+
+ await ipc.send.daemonDisconnected();
+ await routes.launch.waitForRoute();
+ });
+
+ test.afterAll(async () => {
+ await page.close();
+ });
+
+ test.describe('Linux', () => {
+ test.skip(() => process.platform !== 'linux');
+ test('Should display default footer', async () => {
+ const learnMoreButton = routes.launch.selectors.learnMoreButton();
+ await expect(learnMoreButton).toBeVisible();
+ const defaultFooterText = routes.launch.selectors.defaultFooterText();
+ await expect(defaultFooterText).toBeVisible();
+ });
+ });
+
+ test.describe('Windows', () => {
+ test.skip(() => process.platform !== 'win32');
+ test('Should display restart daemon footer', async () => {
+ const learnMoreButton = routes.launch.selectors.detailsButton();
+ await expect(learnMoreButton).toBeVisible();
+ const tryAgainButton = routes.launch.selectors.tryAgainButton();
+ await expect(tryAgainButton).toBeVisible();
+ });
+ });
+ test.describe('MacOS', () => {
+ test.skip(() => process.platform !== 'darwin');
+ test('Should display default footer', async () => {
+ const learnMoreButton = routes.launch.selectors.learnMoreButton();
+ await expect(learnMoreButton).toBeVisible();
+ const defaultFooterText = routes.launch.selectors.defaultFooterText();
+ await expect(defaultFooterText).toBeVisible();
+ });
+ test('Should display permission footer when daemon is not allowed', async () => {
+ await ipc.send.daemonAllowed(false);
+ const gotoSystemSettingsButton = routes.launch.selectors.gotoSystemSettingsButton();
+ await expect(gotoSystemSettingsButton).toBeVisible();
+ });
+ });
+});