Skip to content

Commit bf96edc

Browse files
niklasberglundbuggmagnet
authored andcommittedFeb 14, 2024·
Add iOS test for connecting to API via bridges
1 parent 3a7fdd4 commit bf96edc

19 files changed

+584
-98
lines changed
 
+12-13
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
1-
//
2-
// MullvadVPNUITests.xcconfig
3-
// MullvadVPN
4-
//
5-
// Created by Niklas Berglund on 2024-01-10.
6-
// Copyright © 2024 Mullvad VPN AB. All rights reserved.
7-
//
1+
#include "Base.xcconfig"
82

93
// Pin code of the iOS device under test
10-
MULLVAD_IOS_DEVICE_PIN_CODE =
4+
IOS_DEVICE_PIN_CODE =
115

12-
// Ad serving domain used when testing ad blocking. Not that we are assuming there's an HTTP server running on the host.
13-
MULLVAD_AD_SERVING_DOMAIN =
6+
// UUID to identify test runs. Should be unique per test device. Generate with for example uuidgen on macOS.
7+
TEST_DEVICE_IDENTIFIER_UUID =
148

159
// Mullvad accounts used by UI tests
16-
MULLVAD_NO_TIME_ACCOUNT_NUMBER =
17-
MULLVAD_HAS_TIME_ACCOUNT_NUMBER =
18-
MULLVAD_FIVE_WIREGUARD_KEYS_ACCOUNT_NUMBER =
10+
NO_TIME_ACCOUNT_NUMBER =
11+
HAS_TIME_ACCOUNT_NUMBER =
12+
FIVE_WIREGUARD_KEYS_ACCOUNT_NUMBER =
13+
14+
// Ad serving domain used when testing ad blocking. Note that we are assuming there's an HTTP server running on the host.
15+
AD_SERVING_DOMAIN = vpnlist.to
1916

17+
// Base URL for the firewall API, Note that // will be treated as a comment, therefor you need to insert a ${} between the slashes for example http:/${}/8.8.8.8
18+
FIREWALL_API_BASE_URL = http:/${}/8.8.8.8

‎ios/MullvadVPN.xcodeproj/project.pbxproj

+43-12
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,10 @@
3838
06799AFC28F98EE300ACD94E /* AddressCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06AC114128F8413A0037AF9A /* AddressCache.swift */; };
3939
0697D6E728F01513007A9E99 /* TransportMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0697D6E628F01513007A9E99 /* TransportMonitor.swift */; };
4040
06AC116228F94C450037AF9A /* ApplicationConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58BFA5CB22A7CE1F00A6173D /* ApplicationConfiguration.swift */; };
41-
44DD7D2D2B74E44A0005F67F /* QuantumResistanceSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44DD7D2C2B74E44A0005F67F /* QuantumResistanceSettings.swift */; };
4241
44DD7D242B6CFFD70005F67F /* StartTunnelOperationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44DD7D232B6CFFD70005F67F /* StartTunnelOperationTests.swift */; };
4342
44DD7D272B6D18FB0005F67F /* MockTunnelInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44DD7D262B6D18FB0005F67F /* MockTunnelInteractor.swift */; };
4443
44DD7D292B7113CA0005F67F /* MockTunnel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44DD7D282B7113CA0005F67F /* MockTunnel.swift */; };
44+
44DD7D2D2B74E44A0005F67F /* QuantumResistanceSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44DD7D2C2B74E44A0005F67F /* QuantumResistanceSettings.swift */; };
4545
5803B4B02940A47300C23744 /* TunnelConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5803B4AF2940A47300C23744 /* TunnelConfiguration.swift */; };
4646
5803B4B22940A48700C23744 /* TunnelStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5803B4B12940A48700C23744 /* TunnelStore.swift */; };
4747
5807E2C02432038B00F5FF30 /* String+Split.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5807E2BF2432038B00F5FF30 /* String+Split.swift */; };
@@ -590,13 +590,18 @@
590590
852969362B4E9724007EAD4C /* AccessbilityIdentifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A0B311D2B303A0D004B12E0 /* AccessbilityIdentifier.swift */; };
591591
8529693A2B4F0238007EAD4C /* TermsOfServicePage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 852969392B4F0238007EAD4C /* TermsOfServicePage.swift */; };
592592
8529693C2B4F0257007EAD4C /* Alert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8529693B2B4F0257007EAD4C /* Alert.swift */; };
593+
85557B0E2B591B2600795FE1 /* FirewallAPIClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85557B0D2B591B2600795FE1 /* FirewallAPIClient.swift */; };
594+
85557B102B59215F00795FE1 /* FirewallRule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85557B0F2B59215F00795FE1 /* FirewallRule.swift */; };
595+
85557B122B594FC900795FE1 /* ConnectivityTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85557B112B594FC900795FE1 /* ConnectivityTests.swift */; };
596+
85557B142B5983CF00795FE1 /* MullvadAPIWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85557B132B5983CF00795FE1 /* MullvadAPIWrapper.swift */; };
593597
85557B162B5ABBBE00795FE1 /* XCUIElementQuery+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85557B152B5ABBBE00795FE1 /* XCUIElementQuery+Extensions.swift */; };
594598
85557B1E2B5FB8C700795FE1 /* HeaderBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85557B1D2B5FB8C700795FE1 /* HeaderBar.swift */; };
595599
85557B202B5FBBD700795FE1 /* AccountPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85557B1F2B5FBBD700795FE1 /* AccountPage.swift */; };
600+
855D9F5B2B63E56B00D7C64D /* ProblemReportPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 855D9F5A2B63E56B00D7C64D /* ProblemReportPage.swift */; };
596601
8590896C2B61763B003AF5F5 /* LoggedInWithoutTimeUITestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 859089682B61763B003AF5F5 /* LoggedInWithoutTimeUITestCase.swift */; };
597-
8590896D2B61763B003AF5F5 /* LoggedInWithTimeUITestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 859089692B61763B003AF5F5 /* LoggedInWithTimeUITestCase.swift */; };
598-
8590896E2B61763B003AF5F5 /* BaseUITestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8590896A2B61763B003AF5F5 /* BaseUITestCase.swift */; };
599602
8590896F2B61763B003AF5F5 /* LoggedOutUITestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8590896B2B61763B003AF5F5 /* LoggedOutUITestCase.swift */; };
603+
85D2B0B12B6BD32400DF9DA7 /* BaseUITestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8590896A2B61763B003AF5F5 /* BaseUITestCase.swift */; };
604+
85E3BDE52B70E18C00FA71FD /* Networking.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85E3BDE42B70E18C00FA71FD /* Networking.swift */; };
600605
A900E9B82ACC5C2B00C95F67 /* AccountsProxy+Stubs.swift in Sources */ = {isa = PBXBuildFile; fileRef = A900E9B72ACC5C2B00C95F67 /* AccountsProxy+Stubs.swift */; };
601606
A900E9BA2ACC5D0600C95F67 /* RESTRequestExecutor+Stubs.swift in Sources */ = {isa = PBXBuildFile; fileRef = A900E9B92ACC5D0600C95F67 /* RESTRequestExecutor+Stubs.swift */; };
602607
A900E9BC2ACC609200C95F67 /* DevicesProxy+Stubs.swift in Sources */ = {isa = PBXBuildFile; fileRef = A900E9BB2ACC609200C95F67 /* DevicesProxy+Stubs.swift */; };
@@ -1245,10 +1250,10 @@
12451250
06FAE67A28F83CA50033DD93 /* RESTDevicesProxy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RESTDevicesProxy.swift; sourceTree = "<group>"; };
12461251
06FAE67B28F83CA50033DD93 /* REST.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = REST.swift; sourceTree = "<group>"; };
12471252
06FAE67D28F83CA50033DD93 /* RESTTransport.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RESTTransport.swift; sourceTree = "<group>"; };
1248-
44DD7D2C2B74E44A0005F67F /* QuantumResistanceSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuantumResistanceSettings.swift; sourceTree = "<group>"; };
12491253
44DD7D232B6CFFD70005F67F /* StartTunnelOperationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StartTunnelOperationTests.swift; sourceTree = "<group>"; };
12501254
44DD7D262B6D18FB0005F67F /* MockTunnelInteractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockTunnelInteractor.swift; sourceTree = "<group>"; };
12511255
44DD7D282B7113CA0005F67F /* MockTunnel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockTunnel.swift; sourceTree = "<group>"; };
1256+
44DD7D2C2B74E44A0005F67F /* QuantumResistanceSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuantumResistanceSettings.swift; sourceTree = "<group>"; };
12521257
5802EBC42A8E44AC00E5CE4C /* AppRoutes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppRoutes.swift; sourceTree = "<group>"; };
12531258
5802EBC62A8E457A00E5CE4C /* AppRouteProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppRouteProtocol.swift; sourceTree = "<group>"; };
12541259
5802EBC82A8E45BA00E5CE4C /* ApplicationRouterDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationRouterDelegate.swift; sourceTree = "<group>"; };
@@ -1774,13 +1779,19 @@
17741779
852969382B4ED818007EAD4C /* UITests.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = UITests.xcconfig; sourceTree = "<group>"; };
17751780
852969392B4F0238007EAD4C /* TermsOfServicePage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TermsOfServicePage.swift; sourceTree = "<group>"; };
17761781
8529693B2B4F0257007EAD4C /* Alert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Alert.swift; sourceTree = "<group>"; };
1782+
85557B0D2B591B2600795FE1 /* FirewallAPIClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirewallAPIClient.swift; sourceTree = "<group>"; };
1783+
85557B0F2B59215F00795FE1 /* FirewallRule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirewallRule.swift; sourceTree = "<group>"; };
1784+
85557B112B594FC900795FE1 /* ConnectivityTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectivityTests.swift; sourceTree = "<group>"; };
1785+
85557B132B5983CF00795FE1 /* MullvadAPIWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MullvadAPIWrapper.swift; sourceTree = "<group>"; };
17771786
85557B152B5ABBBE00795FE1 /* XCUIElementQuery+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "XCUIElementQuery+Extensions.swift"; sourceTree = "<group>"; };
17781787
85557B1D2B5FB8C700795FE1 /* HeaderBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeaderBar.swift; sourceTree = "<group>"; };
17791788
85557B1F2B5FBBD700795FE1 /* AccountPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountPage.swift; sourceTree = "<group>"; };
1789+
855D9F5A2B63E56B00D7C64D /* ProblemReportPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProblemReportPage.swift; sourceTree = "<group>"; };
17801790
859089682B61763B003AF5F5 /* LoggedInWithoutTimeUITestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoggedInWithoutTimeUITestCase.swift; sourceTree = "<group>"; };
17811791
859089692B61763B003AF5F5 /* LoggedInWithTimeUITestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoggedInWithTimeUITestCase.swift; sourceTree = "<group>"; };
17821792
8590896A2B61763B003AF5F5 /* BaseUITestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseUITestCase.swift; sourceTree = "<group>"; };
17831793
8590896B2B61763B003AF5F5 /* LoggedOutUITestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoggedOutUITestCase.swift; sourceTree = "<group>"; };
1794+
85E3BDE42B70E18C00FA71FD /* Networking.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Networking.swift; sourceTree = "<group>"; };
17841795
A900E9B72ACC5C2B00C95F67 /* AccountsProxy+Stubs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AccountsProxy+Stubs.swift"; sourceTree = "<group>"; };
17851796
A900E9B92ACC5D0600C95F67 /* RESTRequestExecutor+Stubs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "RESTRequestExecutor+Stubs.swift"; sourceTree = "<group>"; };
17861797
A900E9BB2ACC609200C95F67 /* DevicesProxy+Stubs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DevicesProxy+Stubs.swift"; sourceTree = "<group>"; };
@@ -3390,32 +3401,46 @@
33903401
852969262B4D9C1F007EAD4C /* MullvadVPNUITests */ = {
33913402
isa = PBXGroup;
33923403
children = (
3393-
8518F6392B601910009EB113 /* Test base classes */,
3394-
852969312B4E9220007EAD4C /* Pages */,
33953404
852969272B4D9C1F007EAD4C /* AccountTests.swift */,
3405+
85557B112B594FC900795FE1 /* ConnectivityTests.swift */,
3406+
852969372B4ED20E007EAD4C /* Info.plist */,
3407+
85557B0C2B591B0F00795FE1 /* Networking */,
3408+
852969312B4E9220007EAD4C /* Pages */,
33963409
850201DA2B503D7700EF8C96 /* RelayTests.swift */,
3410+
8518F6392B601910009EB113 /* Test base classes */,
33973411
85557B152B5ABBBE00795FE1 /* XCUIElementQuery+Extensions.swift */,
3398-
852969372B4ED20E007EAD4C /* Info.plist */,
33993412
);
34003413
path = MullvadVPNUITests;
34013414
sourceTree = "<group>";
34023415
};
34033416
852969312B4E9220007EAD4C /* Pages */ = {
34043417
isa = PBXGroup;
34053418
children = (
3419+
85557B1F2B5FBBD700795FE1 /* AccountPage.swift */,
34063420
8529693B2B4F0257007EAD4C /* Alert.swift */,
3421+
85557B1D2B5FB8C700795FE1 /* HeaderBar.swift */,
34073422
852969342B4E9270007EAD4C /* LoginPage.swift */,
34083423
852969322B4E9232007EAD4C /* Page.swift */,
3424+
855D9F5A2B63E56B00D7C64D /* ProblemReportPage.swift */,
34093425
850201DC2B503D8C00EF8C96 /* SelectLocationPage.swift */,
34103426
850201E22B51A93C00EF8C96 /* SettingsPage.swift */,
3411-
850201DE2B5040A500EF8C96 /* TunnelControlPage.swift */,
3412-
85557B1D2B5FB8C700795FE1 /* HeaderBar.swift */,
34133427
852969392B4F0238007EAD4C /* TermsOfServicePage.swift */,
3414-
85557B1F2B5FBBD700795FE1 /* AccountPage.swift */,
3428+
850201DE2B5040A500EF8C96 /* TunnelControlPage.swift */,
34153429
);
34163430
path = Pages;
34173431
sourceTree = "<group>";
34183432
};
3433+
85557B0C2B591B0F00795FE1 /* Networking */ = {
3434+
isa = PBXGroup;
3435+
children = (
3436+
85557B0D2B591B2600795FE1 /* FirewallAPIClient.swift */,
3437+
85557B0F2B59215F00795FE1 /* FirewallRule.swift */,
3438+
85557B132B5983CF00795FE1 /* MullvadAPIWrapper.swift */,
3439+
85E3BDE42B70E18C00FA71FD /* Networking.swift */,
3440+
);
3441+
path = Networking;
3442+
sourceTree = "<group>";
3443+
};
34193444
A907639F2B2857D50045ADF0 /* Socks5 */ = {
34203445
isa = PBXGroup;
34213446
children = (
@@ -5291,23 +5316,29 @@
52915316
isa = PBXSourcesBuildPhase;
52925317
buildActionMask = 2147483647;
52935318
files = (
5294-
8590896D2B61763B003AF5F5 /* LoggedInWithTimeUITestCase.swift in Sources */,
5319+
85D2B0B12B6BD32400DF9DA7 /* BaseUITestCase.swift in Sources */,
52955320
8529693C2B4F0257007EAD4C /* Alert.swift in Sources */,
52965321
850201DD2B503D8C00EF8C96 /* SelectLocationPage.swift in Sources */,
52975322
850201DB2B503D7700EF8C96 /* RelayTests.swift in Sources */,
5323+
85557B142B5983CF00795FE1 /* MullvadAPIWrapper.swift in Sources */,
52985324
852969362B4E9724007EAD4C /* AccessbilityIdentifier.swift in Sources */,
5325+
85E3BDE52B70E18C00FA71FD /* Networking.swift in Sources */,
52995326
8590896C2B61763B003AF5F5 /* LoggedInWithoutTimeUITestCase.swift in Sources */,
53005327
8590896F2B61763B003AF5F5 /* LoggedOutUITestCase.swift in Sources */,
53015328
85557B202B5FBBD700795FE1 /* AccountPage.swift in Sources */,
53025329
852969352B4E9270007EAD4C /* LoginPage.swift in Sources */,
5303-
8590896E2B61763B003AF5F5 /* BaseUITestCase.swift in Sources */,
53045330
850201E32B51A93C00EF8C96 /* SettingsPage.swift in Sources */,
53055331
8518F6382B60157E009EB113 /* LoggedInWithoutTimeUITestCase.swift in Sources */,
5332+
85557B102B59215F00795FE1 /* FirewallRule.swift in Sources */,
5333+
850201E32B51A93C00EF8C96 /* SettingsPage.swift in Sources */,
5334+
85557B0E2B591B2600795FE1 /* FirewallAPIClient.swift in Sources */,
53065335
852969282B4D9C1F007EAD4C /* AccountTests.swift in Sources */,
53075336
85557B162B5ABBBE00795FE1 /* XCUIElementQuery+Extensions.swift in Sources */,
5337+
855D9F5B2B63E56B00D7C64D /* ProblemReportPage.swift in Sources */,
53085338
8529693A2B4F0238007EAD4C /* TermsOfServicePage.swift in Sources */,
53095339
850201DF2B5040A500EF8C96 /* TunnelControlPage.swift in Sources */,
53105340
85557B1E2B5FB8C700795FE1 /* HeaderBar.swift in Sources */,
5341+
85557B122B594FC900795FE1 /* ConnectivityTests.swift in Sources */,
53115342
852969332B4E9232007EAD4C /* Page.swift in Sources */,
53125343
);
53135344
runOnlyForDeploymentPostprocessing = 0;

‎ios/MullvadVPN.xcodeproj/xcshareddata/xcschemes/MullvadVPNUITests.xcscheme

+12-2
Original file line numberDiff line numberDiff line change
@@ -40,22 +40,32 @@
4040
debugDocumentVersioning = "YES"
4141
debugServiceExtension = "internal"
4242
allowLocationSimulation = "YES">
43-
<MacroExpansion>
43+
<BuildableProductRunnable
44+
runnableDebuggingMode = "0">
4445
<BuildableReference
4546
BuildableIdentifier = "primary"
4647
BlueprintIdentifier = "58CE5E5F224146200008646E"
4748
BuildableName = "MullvadVPN.app"
4849
BlueprintName = "MullvadVPN"
4950
ReferencedContainer = "container:MullvadVPN.xcodeproj">
5051
</BuildableReference>
51-
</MacroExpansion>
52+
</BuildableProductRunnable>
5253
</LaunchAction>
5354
<ProfileAction
5455
buildConfiguration = "Release"
5556
shouldUseLaunchSchemeArgsEnv = "YES"
5657
savedToolIdentifier = ""
5758
useCustomWorkingDirectory = "NO"
5859
debugDocumentVersioning = "YES">
60+
<MacroExpansion>
61+
<BuildableReference
62+
BuildableIdentifier = "primary"
63+
BlueprintIdentifier = "58CE5E5F224146200008646E"
64+
BuildableName = "MullvadVPN.app"
65+
BlueprintName = "MullvadVPN"
66+
ReferencedContainer = "container:MullvadVPN.xcodeproj">
67+
</BuildableReference>
68+
</MacroExpansion>
5969
</ProfileAction>
6070
<AnalyzeAction
6171
buildConfiguration = "Debug">

‎ios/MullvadVPN/Classes/AccessbilityIdentifier.swift

+7
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,12 @@ public enum AccessibilityIdentifier: String {
2727
case purchaseButton
2828
case redeemVoucherButton
2929
case restorePurchasesButton
30+
case secureConnectionButton
3031
case selectLocationButton
3132
case settingsButton
3233
case startUsingTheAppButton
34+
case problemReportAppLogsButton
35+
case problemReportSendButton
3336

3437
// Cells
3538
case preferencesCell
@@ -43,6 +46,7 @@ public enum AccessibilityIdentifier: String {
4346

4447
// Labels
4548
case headerDeviceNameLabel
49+
case connectionStatusLabel
4650

4751
// Views
4852
case accountView
@@ -55,6 +59,7 @@ public enum AccessibilityIdentifier: String {
5559
case selectLocationTableView
5660
case settingsTableView
5761
case tunnelControlView
62+
case problemReportView
5863

5964
// Other UI elements
6065
case connectionPanelInAddressRow
@@ -63,6 +68,8 @@ public enum AccessibilityIdentifier: String {
6368
case dnsContentBlockersHeaderView
6469
case loginTextField
6570
case selectLocationSearchTextField
71+
case problemReportEmailTextField
72+
case problemReportMessageTextView
6673

6774
// DNS settings
6875
case dnsSettings

‎ios/MullvadVPN/View controllers/ProblemReport/ProblemReportViewController.swift

+4
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ final class ProblemReportViewController: UIViewController, UITextFieldDelegate {
7575
super.viewDidLoad()
7676

7777
view.backgroundColor = .secondaryColor
78+
view.accessibilityIdentifier = .problemReportView
7879

7980
navigationItem.title = Self.persistentViewModel.navigationTitle
8081

@@ -90,6 +91,9 @@ final class ProblemReportViewController: UIViewController, UITextFieldDelegate {
9091
messageTextView.setContentHuggingPriority(.defaultLow, for: .vertical)
9192
messageTextView.setContentCompressionResistancePriority(.defaultLow, for: .vertical)
9293

94+
emailTextField.accessibilityIdentifier = .problemReportEmailTextField
95+
messageTextView.accessibilityIdentifier = .problemReportMessageTextView
96+
9397
addConstraints()
9498
registerForNotifications()
9599
loadPersistentViewModel()

‎ios/MullvadVPN/View controllers/Tunnel/TunnelControlView.swift

+3
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ final class TunnelControlView: UIView {
6464

6565
private let connectButton: AppButton = {
6666
let button = AppButton(style: .success)
67+
button.accessibilityIdentifier = .secureConnectionButton
6768
button.translatesAutoresizingMaskIntoConstraints = false
6869
return button
6970
}()
@@ -120,6 +121,8 @@ final class TunnelControlView: UIView {
120121
accessibilityContainerType = .semanticGroup
121122
accessibilityIdentifier = .tunnelControlView
122123

124+
secureLabel.accessibilityIdentifier = .connectionStatusLabel
125+
123126
addSubviews()
124127
addButtonHandlers()
125128
}

0 commit comments

Comments
 (0)
Please sign in to comment.