summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorOliver <oliver@mohlin.dev>2025-05-19 15:58:38 +0200
committerTobias Järvelöv <tobias.jarvelov@mullvad.net>2025-05-27 21:38:04 +0200
commitd63229c841b928da5a220f60ee4793b78d2ddaf8 (patch)
treef07c0ecd8407f2ee55379620cfac2a1c83475dc1
parentfe7c3949bebf52db830ecf0a2146b077e6565e0d (diff)
downloadmullvadvpn-d63229c841b928da5a220f60ee4793b78d2ddaf8.tar.xz
mullvadvpn-d63229c841b928da5a220f60ee4793b78d2ddaf8.zip
Add vpn settings route object model
-rw-r--r--desktop/packages/mullvad-vpn/test/e2e/route-object-models/routes-object-model.ts3
-rw-r--r--desktop/packages/mullvad-vpn/test/e2e/route-object-models/vpn-settings/index.ts2
-rw-r--r--desktop/packages/mullvad-vpn/test/e2e/route-object-models/vpn-settings/selectors.ts7
-rw-r--r--desktop/packages/mullvad-vpn/test/e2e/route-object-models/vpn-settings/vpn-settings-route-object-model.ts64
4 files changed, 76 insertions, 0 deletions
diff --git a/desktop/packages/mullvad-vpn/test/e2e/route-object-models/routes-object-model.ts b/desktop/packages/mullvad-vpn/test/e2e/route-object-models/routes-object-model.ts
index d9c959122c..cb6b63f99e 100644
--- a/desktop/packages/mullvad-vpn/test/e2e/route-object-models/routes-object-model.ts
+++ b/desktop/packages/mullvad-vpn/test/e2e/route-object-models/routes-object-model.ts
@@ -5,17 +5,20 @@ import { MainRouteObjectModel } from './main';
import { SelectLanguageRouteObjectModel } from './select-language';
import { SettingsRouteObjectModel } from './settings/settings-route-object-model';
import { UserInterfaceSettingsRouteObjectModel } from './user-interface-settings';
+import { VpnSettingsRouteObjectModel } from './vpn-settings';
export class RoutesObjectModel {
readonly main: MainRouteObjectModel;
readonly settings: SettingsRouteObjectModel;
readonly userInterfaceSettings: UserInterfaceSettingsRouteObjectModel;
readonly selectLanguage: SelectLanguageRouteObjectModel;
+ readonly vpnSettings: VpnSettingsRouteObjectModel;
constructor(page: Page, utils: TestUtils) {
this.selectLanguage = new SelectLanguageRouteObjectModel(page, utils);
this.main = new MainRouteObjectModel(page, utils);
this.settings = new SettingsRouteObjectModel(page, utils);
this.userInterfaceSettings = new UserInterfaceSettingsRouteObjectModel(page, utils);
+ this.vpnSettings = new VpnSettingsRouteObjectModel(page, utils);
}
}
diff --git a/desktop/packages/mullvad-vpn/test/e2e/route-object-models/vpn-settings/index.ts b/desktop/packages/mullvad-vpn/test/e2e/route-object-models/vpn-settings/index.ts
new file mode 100644
index 0000000000..171ed06a89
--- /dev/null
+++ b/desktop/packages/mullvad-vpn/test/e2e/route-object-models/vpn-settings/index.ts
@@ -0,0 +1,2 @@
+export * from './vpn-settings-route-object-model';
+export * from './selectors';
diff --git a/desktop/packages/mullvad-vpn/test/e2e/route-object-models/vpn-settings/selectors.ts b/desktop/packages/mullvad-vpn/test/e2e/route-object-models/vpn-settings/selectors.ts
new file mode 100644
index 0000000000..ebae817f2f
--- /dev/null
+++ b/desktop/packages/mullvad-vpn/test/e2e/route-object-models/vpn-settings/selectors.ts
@@ -0,0 +1,7 @@
+import { Page } from 'playwright';
+
+export const createSelectors = (page: Page) => ({
+ launchAppOnStartupSwitch: () => page.getByLabel('Launch app on start-up'),
+ autoConnectSwitch: () => page.getByLabel('Auto-connect'),
+ lanSwitch: () => page.getByLabel('Local network sharing'),
+});
diff --git a/desktop/packages/mullvad-vpn/test/e2e/route-object-models/vpn-settings/vpn-settings-route-object-model.ts b/desktop/packages/mullvad-vpn/test/e2e/route-object-models/vpn-settings/vpn-settings-route-object-model.ts
new file mode 100644
index 0000000000..cc23cc60c3
--- /dev/null
+++ b/desktop/packages/mullvad-vpn/test/e2e/route-object-models/vpn-settings/vpn-settings-route-object-model.ts
@@ -0,0 +1,64 @@
+import { Page } from 'playwright';
+
+import { TestUtils } from '../../utils';
+import { createSelectors } from './selectors';
+
+export class VpnSettingsRouteObjectModel {
+ readonly page: Page;
+ readonly utils: TestUtils;
+ readonly selectors: ReturnType<typeof createSelectors>;
+
+ constructor(page: Page, utils: TestUtils) {
+ this.page = page;
+ this.utils = utils;
+ this.selectors = createSelectors(page);
+ }
+
+ getAutoConnectSwitch() {
+ return this.selectors.autoConnectSwitch();
+ }
+
+ async setAutoConnectSwitch(enabled: boolean) {
+ const autoConnectSwitch = this.getAutoConnectSwitch();
+ const ariaChecked = await autoConnectSwitch.getAttribute('aria-checked');
+
+ if ((enabled && ariaChecked === 'false') || (!enabled && ariaChecked === 'true')) {
+ await autoConnectSwitch.click();
+ }
+ }
+
+ async getAutoConnectSwitchState() {
+ const autoConnectSwitch = this.getAutoConnectSwitch();
+ return autoConnectSwitch.getAttribute('aria-checked');
+ }
+
+ getLaunchAppOnStartupSwitch() {
+ return this.selectors.launchAppOnStartupSwitch();
+ }
+
+ async setLaunchAppOnStartupSwitch(enabled: boolean) {
+ const launchAppOnStartupSwitch = this.getLaunchAppOnStartupSwitch();
+ const ariaChecked = await launchAppOnStartupSwitch.getAttribute('aria-checked');
+ if ((enabled && ariaChecked === 'false') || (!enabled && ariaChecked === 'true')) {
+ await launchAppOnStartupSwitch.click();
+ }
+ }
+
+ async getLaunchAppOnStartupSwitchState() {
+ const launchAppOnStartupSwitch = this.getLaunchAppOnStartupSwitch();
+ return launchAppOnStartupSwitch.getAttribute('aria-checked');
+ }
+
+ getLanSwitch() {
+ return this.selectors.lanSwitch();
+ }
+
+ async setLanSwitch(enabled: boolean) {
+ const lanSwitch = this.getLanSwitch();
+ const ariaChecked = await lanSwitch.getAttribute('aria-checked');
+
+ if ((enabled && ariaChecked === 'false') || (!enabled && ariaChecked === 'true')) {
+ await lanSwitch.click();
+ }
+ }
+}