diff options
| author | Tobias Järvelöv <tobias.jarvelov@mullvad.net> | 2025-09-12 16:19:37 +0200 |
|---|---|---|
| committer | Tobias Järvelöv <tobias.jarvelov@mullvad.net> | 2025-09-18 13:06:33 +0200 |
| commit | 1cd875c883aea8ec7345c7724afef5f8f2392bca (patch) | |
| tree | a74434c9bdab26ae15b2de3c7b7b630f233cd603 | |
| parent | 1460901b28f1bb79f6ed0f3ef1d4f98bfb805654 (diff) | |
| download | mullvadvpn-1cd875c883aea8ec7345c7724afef5f8f2392bca.tar.xz mullvadvpn-1cd875c883aea8ec7345c7724afef5f8f2392bca.zip | |
Add mocked test for Split tunneling
| -rw-r--r-- | desktop/packages/mullvad-vpn/test/e2e/mocked/split-tunneling/split-tunneling.spec.ts | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/desktop/packages/mullvad-vpn/test/e2e/mocked/split-tunneling/split-tunneling.spec.ts b/desktop/packages/mullvad-vpn/test/e2e/mocked/split-tunneling/split-tunneling.spec.ts new file mode 100644 index 0000000000..ee776261f0 --- /dev/null +++ b/desktop/packages/mullvad-vpn/test/e2e/mocked/split-tunneling/split-tunneling.spec.ts @@ -0,0 +1,92 @@ +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'; + +let page: Page; +let util: MockedTestUtils; +let routes: RoutesObjectModel; + +test.describe('Split tunneling', () => { + test.beforeAll(async () => { + ({ page, util } = await startMockedApp()); + routes = new RoutesObjectModel(page, util); + + await util.waitForRoute(RoutePath.main); + await routes.main.gotoSettings(); + await routes.settings.gotoSplitTunnelingSettings(); + }); + + test.afterAll(async () => { + await page.close(); + }); + + test.describe('Linux Split tunneling unsupported', () => { + if (process.platform !== 'linux') { + test.skip(); + } + + test.beforeAll(async () => { + await util.ipc.linuxSplitTunneling.isSplitTunnelingSupported.handle(false); + await util.ipc.linuxSplitTunneling.getApplications.handle([ + { + absolutepath: '/app', + exec: 'app', + name: 'app', + type: 'app', + icon: '', + warning: undefined, + }, + { + absolutepath: '/launches-elsewhere', + exec: 'launches-elsewhere', + name: 'launches-elsewhere', + type: 'launches-elsewhere', + icon: '', + warning: 'launches-elsewhere', + }, + { + absolutepath: '/launches-in-existing-process', + exec: 'launches-in-existing-process', + name: 'launches-in-existing-process', + type: 'launches-in-existing-process', + icon: '', + warning: 'launches-in-existing-process', + }, + ]); + }); + + test('App should show unsupported dialog when link in header is clicked', async () => { + // Open the unsupported dialog + await routes.splitTunnelingSettings.openUnsupportedDialog(); + const unsupportedText = + routes.splitTunnelingSettings.getSplitTunnelingUnsupportedDialogText(); + await expect(unsupportedText).toBeVisible(); + + // Close the unsupported dialog + await routes.splitTunnelingSettings.closeUnsupportedDialog(); + await expect(unsupportedText).not.toBeVisible(); + }); + + test('App list items should be shown even when split tunneling is unsupported', async () => { + // Apps should be shown if split tunneling is unsupported + const linuxApplications = routes.splitTunnelingSettings.getLinuxApplications(); + await expect(linuxApplications).toHaveCount(3); + }); + + test('App list items should show unsupported dialog when clicked', async () => { + // Ensure clicking an application in the list makes the unsupported dialog visible + const linuxApplications = routes.splitTunnelingSettings.getLinuxApplications(); + await linuxApplications.first().click(); + const unsupportedText = + routes.splitTunnelingSettings.getSplitTunnelingUnsupportedDialogText(); + await expect(unsupportedText).toBeVisible(); + + // Close the unsupported dialog + await routes.splitTunnelingSettings.closeUnsupportedDialog(); + await expect(unsupportedText).not.toBeVisible(); + }); + }); +}); |
