summaryrefslogtreecommitdiffhomepage
path: root/desktop
diff options
context:
space:
mode:
authorTobias Järvelöv <tobias.jarvelov@mullvad.net>2025-09-12 16:19:37 +0200
committerTobias Järvelöv <tobias.jarvelov@mullvad.net>2025-09-18 13:06:33 +0200
commit1cd875c883aea8ec7345c7724afef5f8f2392bca (patch)
treea74434c9bdab26ae15b2de3c7b7b630f233cd603 /desktop
parent1460901b28f1bb79f6ed0f3ef1d4f98bfb805654 (diff)
downloadmullvadvpn-1cd875c883aea8ec7345c7724afef5f8f2392bca.tar.xz
mullvadvpn-1cd875c883aea8ec7345c7724afef5f8f2392bca.zip
Add mocked test for Split tunneling
Diffstat (limited to 'desktop')
-rw-r--r--desktop/packages/mullvad-vpn/test/e2e/mocked/split-tunneling/split-tunneling.spec.ts92
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();
+ });
+ });
+});