Skip to content

Commit fad5b40

Browse files
Add iOS test making sure app functioning when API is down
1 parent 7cc55c8 commit fad5b40

25 files changed

+394
-51
lines changed

ios/MullvadVPN.xcodeproj/project.pbxproj

+16-6
Original file line numberDiff line numberDiff line change
@@ -628,6 +628,8 @@
628628
852BC6702BAB44F500A47558 /* MullvadVPNUITestsChangeSettings.xctestplan in Resources */ = {isa = PBXBuildFile; fileRef = 852BC66D2BAB44F500A47558 /* MullvadVPNUITestsChangeSettings.xctestplan */; };
629629
852BC6712BAB44F500A47558 /* MullvadVPNUITestsVerifyDNSSettingsChanged.xctestplan in Resources */ = {isa = PBXBuildFile; fileRef = 852BC66E2BAB44F500A47558 /* MullvadVPNUITestsVerifyDNSSettingsChanged.xctestplan */; };
630630
852BC6732BAB450B00A47558 /* MullvadVPNUITestsChangeDNSSettings.xctestplan in Resources */ = {isa = PBXBuildFile; fileRef = 852BC6722BAB450B00A47558 /* MullvadVPNUITestsChangeDNSSettings.xctestplan */; };
631+
852D054D2BC3DE3A008578D2 /* APIAccessPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 852D054C2BC3DE3A008578D2 /* APIAccessPage.swift */; };
632+
852D054F2BC43DF7008578D2 /* AddAccessMethodPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 852D054E2BC43DF7008578D2 /* AddAccessMethodPage.swift */; };
631633
8532E6872B8CCED600ACECD1 /* ProblemReportSubmittedPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8532E6862B8CCED600ACECD1 /* ProblemReportSubmittedPage.swift */; };
632634
8542CE242B95F7B9006FCA14 /* VPNSettingsPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8542CE232B95F7B9006FCA14 /* VPNSettingsPage.swift */; };
633635
85557B0E2B591B2600795FE1 /* FirewallAPIClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85557B0D2B591B2600795FE1 /* FirewallAPIClient.swift */; };
@@ -640,9 +642,10 @@
640642
8556EB542B9A1D7100D26DD4 /* BridgingHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 8556EB532B9A1D7100D26DD4 /* BridgingHeader.h */; };
641643
8556EB562B9B0AC500D26DD4 /* RevokedDevicePage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8556EB552B9B0AC500D26DD4 /* RevokedDevicePage.swift */; };
642644
855D9F5B2B63E56B00D7C64D /* ProblemReportPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 855D9F5A2B63E56B00D7C64D /* ProblemReportPage.swift */; };
645+
856952E22BD6B04C008C1F84 /* XCUIElement+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 856952E12BD6B04C008C1F84 /* XCUIElement+Extensions.swift */; };
646+
8585CBE32BC684180015B6A4 /* EditAccessMethodPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8585CBE22BC684180015B6A4 /* EditAccessMethodPage.swift */; };
643647
8587A05D2B84D43100152938 /* ChangeLogAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8587A05C2B84D43100152938 /* ChangeLogAlert.swift */; };
644648
8590896F2B61763B003AF5F5 /* LoggedOutUITestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8590896B2B61763B003AF5F5 /* LoggedOutUITestCase.swift */; };
645-
85A42B862BB1D627007BABF7 /* XCUIElement+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85A42B852BB1D627007BABF7 /* XCUIElement+Extensions.swift */; };
646649
85A42B882BB44D31007BABF7 /* DeviceManagementPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85A42B872BB44D31007BABF7 /* DeviceManagementPage.swift */; };
647650
85B267612B849ADB0098E3CD /* mullvad-api.h in Headers */ = {isa = PBXBuildFile; fileRef = 85B267602B849ADB0098E3CD /* mullvad-api.h */; };
648651
85C7A2E92B89024B00035D5A /* SettingsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85C7A2E82B89024B00035D5A /* SettingsTests.swift */; };
@@ -1874,7 +1877,6 @@
18741877
850201DE2B5040A500EF8C96 /* TunnelControlPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TunnelControlPage.swift; sourceTree = "<group>"; };
18751878
850201E22B51A93C00EF8C96 /* SettingsPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsPage.swift; sourceTree = "<group>"; };
18761879
85139B2C2B84B4A700734217 /* OutOfTimePage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OutOfTimePage.swift; sourceTree = "<group>"; };
1877-
8518F6372B60157E009EB113 /* LoggedInWithoutTimeUITestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoggedInWithoutTimeUITestCase.swift; sourceTree = "<group>"; };
18781880
852969252B4D9C1F007EAD4C /* MullvadVPNUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MullvadVPNUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
18791881
852969272B4D9C1F007EAD4C /* AccountTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountTests.swift; sourceTree = "<group>"; };
18801882
852969302B4D9E70007EAD4C /* MullvadVPNUITestsAll.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = MullvadVPNUITestsAll.xctestplan; sourceTree = "<group>"; };
@@ -1889,6 +1891,8 @@
18891891
852BC66D2BAB44F500A47558 /* MullvadVPNUITestsChangeSettings.xctestplan */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MullvadVPNUITestsChangeSettings.xctestplan; sourceTree = "<group>"; };
18901892
852BC66E2BAB44F500A47558 /* MullvadVPNUITestsVerifyDNSSettingsChanged.xctestplan */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MullvadVPNUITestsVerifyDNSSettingsChanged.xctestplan; sourceTree = "<group>"; };
18911893
852BC6722BAB450B00A47558 /* MullvadVPNUITestsChangeDNSSettings.xctestplan */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MullvadVPNUITestsChangeDNSSettings.xctestplan; sourceTree = "<group>"; };
1894+
852D054C2BC3DE3A008578D2 /* APIAccessPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIAccessPage.swift; sourceTree = "<group>"; };
1895+
852D054E2BC43DF7008578D2 /* AddAccessMethodPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddAccessMethodPage.swift; sourceTree = "<group>"; };
18921896
8532E6862B8CCED600ACECD1 /* ProblemReportSubmittedPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProblemReportSubmittedPage.swift; sourceTree = "<group>"; };
18931897
8542CE232B95F7B9006FCA14 /* VPNSettingsPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPNSettingsPage.swift; sourceTree = "<group>"; };
18941898
85557B0D2B591B2600795FE1 /* FirewallAPIClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirewallAPIClient.swift; sourceTree = "<group>"; };
@@ -1902,11 +1906,12 @@
19021906
8556EB532B9A1D7100D26DD4 /* BridgingHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BridgingHeader.h; sourceTree = "<group>"; };
19031907
8556EB552B9B0AC500D26DD4 /* RevokedDevicePage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RevokedDevicePage.swift; sourceTree = "<group>"; };
19041908
855D9F5A2B63E56B00D7C64D /* ProblemReportPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProblemReportPage.swift; sourceTree = "<group>"; };
1909+
856952E12BD6B04C008C1F84 /* XCUIElement+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "XCUIElement+Extensions.swift"; sourceTree = "<group>"; };
1910+
8585CBE22BC684180015B6A4 /* EditAccessMethodPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditAccessMethodPage.swift; sourceTree = "<group>"; };
19051911
8587A05C2B84D43100152938 /* ChangeLogAlert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeLogAlert.swift; sourceTree = "<group>"; };
19061912
859089692B61763B003AF5F5 /* LoggedInWithTimeUITestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoggedInWithTimeUITestCase.swift; sourceTree = "<group>"; };
19071913
8590896A2B61763B003AF5F5 /* BaseUITestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseUITestCase.swift; sourceTree = "<group>"; };
19081914
8590896B2B61763B003AF5F5 /* LoggedOutUITestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoggedOutUITestCase.swift; sourceTree = "<group>"; };
1909-
85A42B852BB1D627007BABF7 /* XCUIElement+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "XCUIElement+Extensions.swift"; sourceTree = "<group>"; };
19101915
85A42B872BB44D31007BABF7 /* DeviceManagementPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceManagementPage.swift; sourceTree = "<group>"; };
19111916
85B267602B849ADB0098E3CD /* mullvad-api.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "mullvad-api.h"; path = "../../mullvad-api/include/mullvad-api.h"; sourceTree = "<group>"; };
19121917
85C7A2E82B89024B00035D5A /* SettingsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsTests.swift; sourceTree = "<group>"; };
@@ -3615,7 +3620,6 @@
36153620
8590896A2B61763B003AF5F5 /* BaseUITestCase.swift */,
36163621
859089692B61763B003AF5F5 /* LoggedInWithTimeUITestCase.swift */,
36173622
8590896B2B61763B003AF5F5 /* LoggedOutUITestCase.swift */,
3618-
8518F6372B60157E009EB113 /* LoggedInWithoutTimeUITestCase.swift */,
36193623
);
36203624
path = "Test base classes";
36213625
sourceTree = "<group>";
@@ -3632,8 +3636,8 @@
36323636
852969312B4E9220007EAD4C /* Pages */,
36333637
850201DA2B503D7700EF8C96 /* RelayTests.swift */,
36343638
8518F6392B601910009EB113 /* Test base classes */,
3639+
856952E12BD6B04C008C1F84 /* XCUIElement+Extensions.swift */,
36353640
85557B152B5ABBBE00795FE1 /* XCUIElementQuery+Extensions.swift */,
3636-
85A42B852BB1D627007BABF7 /* XCUIElement+Extensions.swift */,
36373641
85C7A2E82B89024B00035D5A /* SettingsTests.swift */,
36383642
85D039972BA4711800940E7F /* SettingsMigrationTests.swift */,
36393643
);
@@ -3662,6 +3666,9 @@
36623666
850201DE2B5040A500EF8C96 /* TunnelControlPage.swift */,
36633667
8542CE232B95F7B9006FCA14 /* VPNSettingsPage.swift */,
36643668
85FB5A0B2B6903990015DCED /* WelcomePage.swift */,
3669+
852D054C2BC3DE3A008578D2 /* APIAccessPage.swift */,
3670+
852D054E2BC43DF7008578D2 /* AddAccessMethodPage.swift */,
3671+
8585CBE22BC684180015B6A4 /* EditAccessMethodPage.swift */,
36653672
);
36663673
path = Pages;
36673674
sourceTree = "<group>";
@@ -5639,6 +5646,7 @@
56395646
isa = PBXSourcesBuildPhase;
56405647
buildActionMask = 2147483647;
56415648
files = (
5649+
8585CBE32BC684180015B6A4 /* EditAccessMethodPage.swift in Sources */,
56425650
8556EB522B9A1C6900D26DD4 /* MullvadApi.swift in Sources */,
56435651
85EC620C2B838D10005AFFB5 /* MullvadAPIWrapper.swift in Sources */,
56445652
A9DF789D2B7D1E8B0094E4AD /* LoggedInWithTimeUITestCase.swift in Sources */,
@@ -5647,10 +5655,11 @@
56475655
850201DD2B503D8C00EF8C96 /* SelectLocationPage.swift in Sources */,
56485656
85D039982BA4711800940E7F /* SettingsMigrationTests.swift in Sources */,
56495657
850201DB2B503D7700EF8C96 /* RelayTests.swift in Sources */,
5658+
852D054D2BC3DE3A008578D2 /* APIAccessPage.swift in Sources */,
56505659
85139B2D2B84B4A700734217 /* OutOfTimePage.swift in Sources */,
5651-
85A42B862BB1D627007BABF7 /* XCUIElement+Extensions.swift in Sources */,
56525660
852969362B4E9724007EAD4C /* AccessbilityIdentifier.swift in Sources */,
56535661
85E3BDE52B70E18C00FA71FD /* Networking.swift in Sources */,
5662+
856952E22BD6B04C008C1F84 /* XCUIElement+Extensions.swift in Sources */,
56545663
85C7A2E92B89024B00035D5A /* SettingsTests.swift in Sources */,
56555664
8590896F2B61763B003AF5F5 /* LoggedOutUITestCase.swift in Sources */,
56565665
85557B202B5FBBD700795FE1 /* AccountPage.swift in Sources */,
@@ -5674,6 +5683,7 @@
56745683
85557B122B594FC900795FE1 /* ConnectivityTests.swift in Sources */,
56755684
852969332B4E9232007EAD4C /* Page.swift in Sources */,
56765685
A9A557F32B7E19B10017ADA8 /* SettingsPage.swift in Sources */,
5686+
852D054F2BC43DF7008578D2 /* AddAccessMethodPage.swift in Sources */,
56775687
);
56785688
runOnlyForDeploymentPostprocessing = 0;
56795689
};

ios/MullvadVPN.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved

-22
This file was deleted.

ios/MullvadVPN/Classes/AccessbilityIdentifier.swift

+22
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,11 @@ import UIKit
1010

1111
public enum AccessibilityIdentifier: String {
1212
// Buttons
13+
case addAccessMethodButton
14+
case accessMethodAddButton
1315
case accountButton
16+
case accessMethodUnreachableBackButton
17+
case accessMethodUnreachableSaveButton
1418
case agreeButton
1519
case alertOkButton
1620
case applyButton
@@ -46,6 +50,7 @@ public enum AccessibilityIdentifier: String {
4650

4751
// Cells
4852
case deviceCell
53+
case accessMethodProtocolSelectionCell
4954
case vpnSettingsCell
5055
case dnsSettingsAddServerCell
5156
case dnsSettingsUseCustomDNSCell
@@ -60,22 +65,32 @@ public enum AccessibilityIdentifier: String {
6065
case wireGuardObfuscationCell
6166
case udpOverTCPPortCell
6267
case quantumResistantTunnelCell
68+
case socks5ServerCell
69+
case socks5PortCell
6370

6471
// Labels
6572
case accountPagePaidUntilLabel
73+
case addAccessMethodTestStatusReachableLabel
74+
case addAccessMethodTestStatusTestingLabel
75+
case addAccessMethodTestStatusUnreachableLabel
6676
case headerDeviceNameLabel
6777
case connectionStatusConnectedLabel
6878
case connectionStatusNotConnectedLabel
6979
case welcomeAccountNumberLabel
7080
case connectionPanelDetailLabel
7181

7282
// Views
83+
case accessMethodProtocolPickerView
84+
case accessMethodUnreachableAlert
7385
case accountView
7486
case addLocationsView
87+
case addAccessMethodTableView
88+
case apiAccessView
7589
case alertContainerView
7690
case alertTitle
7791
case changeLogAlert
7892
case deviceManagementView
93+
case editAccessMethodView
7994
case headerBarView
8095
case loginView
8196
case outOfTimeView
@@ -93,17 +108,24 @@ public enum AccessibilityIdentifier: String {
93108
case settingsContainerView
94109

95110
// Other UI elements
111+
case accessMethodEnableSwitch
112+
case accessMethodNameTextField
113+
case logOutSpinnerAlertView
96114
case connectionPanelInAddressRow
97115
case connectionPanelOutAddressRow
98116
case customSwitch
99117
case customWireGuardPortTextField
100118
case dnsContentBlockersHeaderView
101119
case dnsSettingsEnterIPAddressTextField
120+
case loginStatusIconAuthenticating
121+
case loginStatusIconFailure
122+
case loginStatusIconSuccess
102123
case loginTextField
103124
case selectLocationSearchTextField
104125
case problemReportEmailTextField
105126
case problemReportMessageTextView
106127
case deleteAccountTextField
128+
case socks5AuthenticationSwitch
107129

108130
// DNS settings
109131
case dnsSettings

ios/MullvadVPN/Coordinators/AccountCoordinator.swift

+1
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ final class AccountCoordinator: Coordinator, Presentable, Presenting {
135135
private func logOut() {
136136
let presentation = AlertPresentation(
137137
id: "account-logout-alert",
138+
accessibilityIdentifier: .logOutSpinnerAlertView,
138139
icon: .spinner,
139140
message: nil,
140141
buttons: []

ios/MullvadVPN/Coordinators/Settings/APIAccess/Cells/SwitchCellContentConfiguration.swift

+2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ struct SwitchCellContentConfiguration: UIContentConfiguration, Equatable {
1515
var color = UIColor.Cell.titleTextColor
1616
}
1717

18+
var accessibilityIdentifier: AccessibilityIdentifier?
19+
1820
/// Text label.
1921
var text: String?
2022

ios/MullvadVPN/Coordinators/Settings/APIAccess/Cells/SwitchCellContentView.swift

+4
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,10 @@ class SwitchCellContentView: UIView, UIContentView, UITextFieldDelegate {
7676
private func configureSwitch() {
7777
switchContainer.control.isOn = actualConfiguration.isOn
7878
switchContainer.transform = CGAffineTransform(scaleX: 0.85, y: 0.85)
79+
80+
if let accessibilityIdentifier = actualConfiguration.accessibilityIdentifier {
81+
switchContainer.accessibilityIdentifier = accessibilityIdentifier
82+
}
7983
}
8084

8185
private func addSubviews() {

ios/MullvadVPN/Coordinators/Settings/APIAccess/Common/SocksSectionHandler.swift

+3
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ struct SocksSectionHandler {
3838
contentConfiguration.inputText = subject.value.socks.server
3939
contentConfiguration.textFieldProperties = .withSmartFeaturesDisabled()
4040
contentConfiguration.editingEvents.onChange = subject.bindTextAction(to: \.socks.server)
41+
cell.accessibilityIdentifier = .socks5ServerCell
4142
cell.contentConfiguration = contentConfiguration
4243
}
4344

@@ -52,6 +53,7 @@ struct SocksSectionHandler {
5253
if case .phone = cell.traitCollection.userInterfaceIdiom {
5354
contentConfiguration.textFieldProperties.keyboardType = .numberPad
5455
}
56+
cell.accessibilityIdentifier = .socks5PortCell
5557
cell.contentConfiguration = contentConfiguration
5658
}
5759

@@ -60,6 +62,7 @@ struct SocksSectionHandler {
6062
contentConfiguration.text = itemIdentifier.text
6163
contentConfiguration.isOn = subject.value.socks.authenticate
6264
contentConfiguration.onChange = subject.bindSwitchAction(to: \.socks.authenticate)
65+
contentConfiguration.accessibilityIdentifier = .socks5AuthenticationSwitch
6366
cell.contentConfiguration = contentConfiguration
6467
}
6568

ios/MullvadVPN/Coordinators/Settings/APIAccess/Edit/EditAccessMethodViewController.swift

+2
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ class EditAccessMethodViewController: UITableViewController {
4343
override func viewDidLoad() {
4444
super.viewDidLoad()
4545

46+
view.accessibilityIdentifier = .editAccessMethodView
4647
view.backgroundColor = .secondaryColor
4748
tableView.backgroundColor = .secondaryColor
4849
navigationItem.largeTitleDisplayMode = .never
@@ -197,6 +198,7 @@ class EditAccessMethodViewController: UITableViewController {
197198

198199
private func configureEnableMethod(_ cell: UITableViewCell, itemIdentifier: EditAccessMethodItemIdentifier) {
199200
var contentConfiguration = SwitchCellContentConfiguration()
201+
contentConfiguration.accessibilityIdentifier = .accessMethodEnableSwitch
200202
contentConfiguration.text = itemIdentifier.text
201203
contentConfiguration.isOn = subject.value.isEnabled
202204
contentConfiguration.onChange = UIAction { [weak self] action in

ios/MullvadVPN/Coordinators/Settings/APIAccess/Edit/MethodSettings/MethodSettingsCellConfiguration.swift

+2
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ class MethodSettingsCellConfiguration {
111111
contentConfiguration.inputText = subject.value.name
112112
contentConfiguration.editingEvents.onChange = subject.bindTextAction(to: \.name)
113113

114+
cell.accessibilityIdentifier = .accessMethodNameTextField
114115
cell.setDisabled(isTesting)
115116
cell.contentConfiguration = contentConfiguration
116117
}
@@ -153,6 +154,7 @@ class MethodSettingsCellConfiguration {
153154
cell.disclosureType = .chevron
154155
}
155156

157+
cell.accessibilityIdentifier = .accessMethodProtocolSelectionCell
156158
cell.setDisabled(isTesting)
157159
}
158160

ios/MullvadVPN/Coordinators/Settings/APIAccess/Edit/MethodSettings/MethodSettingsViewController.swift

+7-1
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,13 @@ class MethodSettingsViewController: UITableViewController {
7676
override func viewDidLoad() {
7777
super.viewDidLoad()
7878

79+
view.accessibilityIdentifier = .addAccessMethodTableView
7980
view.directionalLayoutMargins = UIMetrics.contentLayoutMargins
8081
view.backgroundColor = .secondaryColor
8182

8283
navigationItem.rightBarButtonItem = saveBarButton
84+
navigationItem.rightBarButtonItem?.accessibilityIdentifier = .accessMethodAddButton
85+
navigationItem.rightBarButtonItem?.isAccessibilityElement = true
8386
isModalInPresentation = true
8487

8588
configureTableView()
@@ -307,6 +310,7 @@ class MethodSettingsViewController: UITableViewController {
307310
case .failed:
308311
let presentation = AlertPresentation(
309312
id: "api-access-methods-testing-status-failed-alert",
313+
accessibilityIdentifier: .accessMethodUnreachableAlert,
310314
icon: .warning,
311315
message: NSLocalizedString(
312316
"METHOD_SETTINGS_SAVE_PROMPT",
@@ -323,6 +327,7 @@ class MethodSettingsViewController: UITableViewController {
323327
comment: ""
324328
),
325329
style: .default,
330+
accessibilityId: .accessMethodUnreachableSaveButton,
326331
handler: { [weak self] in
327332
self?.onSave()
328333
}
@@ -334,7 +339,8 @@ class MethodSettingsViewController: UITableViewController {
334339
value: "Back to editing",
335340
comment: ""
336341
),
337-
style: .default
342+
style: .default,
343+
accessibilityId: .accessMethodUnreachableBackButton
338344
),
339345
]
340346
)

0 commit comments

Comments
 (0)