Skip to content

Commit abed837

Browse files
Add iOS test making sure app functioning when API is down
1 parent 4380b7a commit abed837

24 files changed

+401
-34
lines changed

ios/MullvadVPN.xcodeproj/project.pbxproj

+19-5
Original file line numberDiff line numberDiff line change
@@ -631,6 +631,8 @@
631631
852BC6702BAB44F500A47558 /* MullvadVPNUITestsChangeSettings.xctestplan in Resources */ = {isa = PBXBuildFile; fileRef = 852BC66D2BAB44F500A47558 /* MullvadVPNUITestsChangeSettings.xctestplan */; };
632632
852BC6712BAB44F500A47558 /* MullvadVPNUITestsVerifyDNSSettingsChanged.xctestplan in Resources */ = {isa = PBXBuildFile; fileRef = 852BC66E2BAB44F500A47558 /* MullvadVPNUITestsVerifyDNSSettingsChanged.xctestplan */; };
633633
852BC6732BAB450B00A47558 /* MullvadVPNUITestsChangeDNSSettings.xctestplan in Resources */ = {isa = PBXBuildFile; fileRef = 852BC6722BAB450B00A47558 /* MullvadVPNUITestsChangeDNSSettings.xctestplan */; };
634+
852D054D2BC3DE3A008578D2 /* APIAccessPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 852D054C2BC3DE3A008578D2 /* APIAccessPage.swift */; };
635+
852D054F2BC43DF7008578D2 /* AddAccessMethodPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 852D054E2BC43DF7008578D2 /* AddAccessMethodPage.swift */; };
634636
8532E6872B8CCED600ACECD1 /* ProblemReportSubmittedPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8532E6862B8CCED600ACECD1 /* ProblemReportSubmittedPage.swift */; };
635637
8542CE242B95F7B9006FCA14 /* VPNSettingsPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8542CE232B95F7B9006FCA14 /* VPNSettingsPage.swift */; };
636638
8542F7532BCFBD050035C042 /* SelectLocationFilterPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8542F7522BCFBD050035C042 /* SelectLocationFilterPage.swift */; };
@@ -644,9 +646,10 @@
644646
8556EB542B9A1D7100D26DD4 /* BridgingHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 8556EB532B9A1D7100D26DD4 /* BridgingHeader.h */; };
645647
8556EB562B9B0AC500D26DD4 /* RevokedDevicePage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8556EB552B9B0AC500D26DD4 /* RevokedDevicePage.swift */; };
646648
855D9F5B2B63E56B00D7C64D /* ProblemReportPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 855D9F5A2B63E56B00D7C64D /* ProblemReportPage.swift */; };
649+
856952E22BD6B04C008C1F84 /* XCUIElement+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 856952E12BD6B04C008C1F84 /* XCUIElement+Extensions.swift */; };
650+
8585CBE32BC684180015B6A4 /* EditAccessMethodPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8585CBE22BC684180015B6A4 /* EditAccessMethodPage.swift */; };
647651
8587A05D2B84D43100152938 /* ChangeLogAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8587A05C2B84D43100152938 /* ChangeLogAlert.swift */; };
648652
8590896F2B61763B003AF5F5 /* LoggedOutUITestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8590896B2B61763B003AF5F5 /* LoggedOutUITestCase.swift */; };
649-
85A42B862BB1D627007BABF7 /* XCUIElement+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85A42B852BB1D627007BABF7 /* XCUIElement+Extensions.swift */; };
650653
85A42B882BB44D31007BABF7 /* DeviceManagementPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85A42B872BB44D31007BABF7 /* DeviceManagementPage.swift */; };
651654
85B267612B849ADB0098E3CD /* mullvad-api.h in Headers */ = {isa = PBXBuildFile; fileRef = 85B267602B849ADB0098E3CD /* mullvad-api.h */; };
652655
85C7A2E92B89024B00035D5A /* SettingsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85C7A2E82B89024B00035D5A /* SettingsTests.swift */; };
@@ -1883,7 +1886,6 @@
18831886
850201DE2B5040A500EF8C96 /* TunnelControlPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TunnelControlPage.swift; sourceTree = "<group>"; };
18841887
850201E22B51A93C00EF8C96 /* SettingsPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsPage.swift; sourceTree = "<group>"; };
18851888
85139B2C2B84B4A700734217 /* OutOfTimePage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OutOfTimePage.swift; sourceTree = "<group>"; };
1886-
8518F6372B60157E009EB113 /* LoggedInWithoutTimeUITestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoggedInWithoutTimeUITestCase.swift; sourceTree = "<group>"; };
18871889
852969252B4D9C1F007EAD4C /* MullvadVPNUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MullvadVPNUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
18881890
852969272B4D9C1F007EAD4C /* AccountTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountTests.swift; sourceTree = "<group>"; };
18891891
852969302B4D9E70007EAD4C /* MullvadVPNUITestsAll.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = MullvadVPNUITestsAll.xctestplan; sourceTree = "<group>"; };
@@ -1898,6 +1900,8 @@
18981900
852BC66D2BAB44F500A47558 /* MullvadVPNUITestsChangeSettings.xctestplan */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MullvadVPNUITestsChangeSettings.xctestplan; sourceTree = "<group>"; };
18991901
852BC66E2BAB44F500A47558 /* MullvadVPNUITestsVerifyDNSSettingsChanged.xctestplan */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MullvadVPNUITestsVerifyDNSSettingsChanged.xctestplan; sourceTree = "<group>"; };
19001902
852BC6722BAB450B00A47558 /* MullvadVPNUITestsChangeDNSSettings.xctestplan */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MullvadVPNUITestsChangeDNSSettings.xctestplan; sourceTree = "<group>"; };
1903+
852D054C2BC3DE3A008578D2 /* APIAccessPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIAccessPage.swift; sourceTree = "<group>"; };
1904+
852D054E2BC43DF7008578D2 /* AddAccessMethodPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddAccessMethodPage.swift; sourceTree = "<group>"; };
19011905
8532E6862B8CCED600ACECD1 /* ProblemReportSubmittedPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProblemReportSubmittedPage.swift; sourceTree = "<group>"; };
19021906
8542CE232B95F7B9006FCA14 /* VPNSettingsPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPNSettingsPage.swift; sourceTree = "<group>"; };
19031907
8542F7522BCFBD050035C042 /* SelectLocationFilterPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectLocationFilterPage.swift; sourceTree = "<group>"; };
@@ -1912,11 +1916,12 @@
19121916
8556EB532B9A1D7100D26DD4 /* BridgingHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BridgingHeader.h; sourceTree = "<group>"; };
19131917
8556EB552B9B0AC500D26DD4 /* RevokedDevicePage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RevokedDevicePage.swift; sourceTree = "<group>"; };
19141918
855D9F5A2B63E56B00D7C64D /* ProblemReportPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProblemReportPage.swift; sourceTree = "<group>"; };
1919+
856952E12BD6B04C008C1F84 /* XCUIElement+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "XCUIElement+Extensions.swift"; sourceTree = "<group>"; };
1920+
8585CBE22BC684180015B6A4 /* EditAccessMethodPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditAccessMethodPage.swift; sourceTree = "<group>"; };
19151921
8587A05C2B84D43100152938 /* ChangeLogAlert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeLogAlert.swift; sourceTree = "<group>"; };
19161922
859089692B61763B003AF5F5 /* LoggedInWithTimeUITestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoggedInWithTimeUITestCase.swift; sourceTree = "<group>"; };
19171923
8590896A2B61763B003AF5F5 /* BaseUITestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseUITestCase.swift; sourceTree = "<group>"; };
19181924
8590896B2B61763B003AF5F5 /* LoggedOutUITestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoggedOutUITestCase.swift; sourceTree = "<group>"; };
1919-
85A42B852BB1D627007BABF7 /* XCUIElement+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "XCUIElement+Extensions.swift"; sourceTree = "<group>"; };
19201925
85A42B872BB44D31007BABF7 /* DeviceManagementPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceManagementPage.swift; sourceTree = "<group>"; };
19211926
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>"; };
19221927
85C7A2E82B89024B00035D5A /* SettingsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsTests.swift; sourceTree = "<group>"; };
@@ -3766,7 +3771,6 @@
37663771
8590896A2B61763B003AF5F5 /* BaseUITestCase.swift */,
37673772
859089692B61763B003AF5F5 /* LoggedInWithTimeUITestCase.swift */,
37683773
8590896B2B61763B003AF5F5 /* LoggedOutUITestCase.swift */,
3769-
8518F6372B60157E009EB113 /* LoggedInWithoutTimeUITestCase.swift */,
37703774
);
37713775
path = "Test base classes";
37723776
sourceTree = "<group>";
@@ -3783,6 +3787,10 @@
37833787
85557B0C2B591B0F00795FE1 /* Networking */,
37843788
852969312B4E9220007EAD4C /* Pages */,
37853789
850201DA2B503D7700EF8C96 /* RelayTests.swift */,
3790+
8518F6392B601910009EB113 /* Test base classes */,
3791+
856952E12BD6B04C008C1F84 /* XCUIElement+Extensions.swift */,
3792+
85557B152B5ABBBE00795FE1 /* XCUIElementQuery+Extensions.swift */,
3793+
85C7A2E82B89024B00035D5A /* SettingsTests.swift */,
37863794
85D039972BA4711800940E7F /* SettingsMigrationTests.swift */,
37873795
85C7A2E82B89024B00035D5A /* SettingsTests.swift */,
37883796
8518F6392B601910009EB113 /* Test base classes */,
@@ -3818,6 +3826,9 @@
38183826
8542CE232B95F7B9006FCA14 /* VPNSettingsPage.swift */,
38193827
85FB5A0B2B6903990015DCED /* WelcomePage.swift */,
38203828
8542F7522BCFBD050035C042 /* SelectLocationFilterPage.swift */,
3829+
852D054C2BC3DE3A008578D2 /* APIAccessPage.swift */,
3830+
852D054E2BC43DF7008578D2 /* AddAccessMethodPage.swift */,
3831+
8585CBE22BC684180015B6A4 /* EditAccessMethodPage.swift */,
38213832
);
38223833
path = Pages;
38233834
sourceTree = "<group>";
@@ -5799,6 +5810,7 @@
57995810
buildActionMask = 2147483647;
58005811
files = (
58015812
A9BFB0012BD00B7F00F2BCA1 /* CustomListPage.swift in Sources */,
5813+
8585CBE32BC684180015B6A4 /* EditAccessMethodPage.swift in Sources */,
58025814
8556EB522B9A1C6900D26DD4 /* MullvadApi.swift in Sources */,
58035815
85EC620C2B838D10005AFFB5 /* MullvadAPIWrapper.swift in Sources */,
58045816
A9DF789D2B7D1E8B0094E4AD /* LoggedInWithTimeUITestCase.swift in Sources */,
@@ -5808,10 +5820,11 @@
58085820
850201DD2B503D8C00EF8C96 /* SelectLocationPage.swift in Sources */,
58095821
85D039982BA4711800940E7F /* SettingsMigrationTests.swift in Sources */,
58105822
850201DB2B503D7700EF8C96 /* RelayTests.swift in Sources */,
5823+
852D054D2BC3DE3A008578D2 /* APIAccessPage.swift in Sources */,
58115824
85139B2D2B84B4A700734217 /* OutOfTimePage.swift in Sources */,
5812-
85A42B862BB1D627007BABF7 /* XCUIElement+Extensions.swift in Sources */,
58135825
852969362B4E9724007EAD4C /* AccessbilityIdentifier.swift in Sources */,
58145826
85E3BDE52B70E18C00FA71FD /* Networking.swift in Sources */,
5827+
856952E22BD6B04C008C1F84 /* XCUIElement+Extensions.swift in Sources */,
58155828
85C7A2E92B89024B00035D5A /* SettingsTests.swift in Sources */,
58165829
8590896F2B61763B003AF5F5 /* LoggedOutUITestCase.swift in Sources */,
58175830
85557B202B5FBBD700795FE1 /* AccountPage.swift in Sources */,
@@ -5838,6 +5851,7 @@
58385851
85557B122B594FC900795FE1 /* ConnectivityTests.swift in Sources */,
58395852
852969332B4E9232007EAD4C /* Page.swift in Sources */,
58405853
A9A557F32B7E19B10017ADA8 /* SettingsPage.swift in Sources */,
5854+
852D054F2BC43DF7008578D2 /* AddAccessMethodPage.swift in Sources */,
58415855
);
58425856
runOnlyForDeploymentPostprocessing = 0;
58435857
};

ios/MullvadVPN/Classes/AccessbilityIdentifier.swift

+24-1
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
@@ -56,6 +60,7 @@ public enum AccessibilityIdentifier: String {
5660

5761
// Cells
5862
case deviceCell
63+
case accessMethodProtocolSelectionCell
5964
case vpnSettingsCell
6065
case dnsSettingsAddServerCell
6166
case dnsSettingsUseCustomDNSCell
@@ -83,20 +88,31 @@ public enum AccessibilityIdentifier: String {
8388
case customListLocationCell
8489

8590
// Labels
86-
case accountPagePaidUntilLabel
8791
case accountPageDeviceNameLabel
92+
case socks5ServerCell
93+
case socks5PortCell
94+
case accountPagePaidUntilLabel
95+
case addAccessMethodTestStatusReachableLabel
96+
case addAccessMethodTestStatusTestingLabel
97+
case addAccessMethodTestStatusUnreachableLabel
8898
case headerDeviceNameLabel
8999
case connectionStatusConnectedLabel
90100
case connectionStatusNotConnectedLabel
91101
case welcomeAccountNumberLabel
92102
case connectionPanelDetailLabel
93103

94104
// Views
105+
case accessMethodProtocolPickerView
106+
case accessMethodUnreachableAlert
95107
case accountView
108+
case addLocationsView
109+
case addAccessMethodTableView
110+
case apiAccessView
96111
case alertContainerView
97112
case alertTitle
98113
case changeLogAlert
99114
case deviceManagementView
115+
case editAccessMethodView
100116
case headerBarView
101117
case loginView
102118
case outOfTimeView
@@ -121,17 +137,24 @@ public enum AccessibilityIdentifier: String {
121137
case editCustomListEditLocationsTableView
122138

123139
// Other UI elements
140+
case accessMethodEnableSwitch
141+
case accessMethodNameTextField
142+
case logOutSpinnerAlertView
124143
case connectionPanelInAddressRow
125144
case connectionPanelOutAddressRow
126145
case customSwitch
127146
case customWireGuardPortTextField
128147
case dnsContentBlockersHeaderView
129148
case dnsSettingsEnterIPAddressTextField
149+
case loginStatusIconAuthenticating
150+
case loginStatusIconFailure
151+
case loginStatusIconSuccess
130152
case loginTextField
131153
case selectLocationSearchTextField
132154
case problemReportEmailTextField
133155
case problemReportMessageTextView
134156
case deleteAccountTextField
157+
case socks5AuthenticationSwitch
135158

136159
// DNS settings
137160
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

+1
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ 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+
switchContainer.accessibilityIdentifier = accessibilityIdentifier
7980
}
8081

8182
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)