Skip to content

Commit d1bd86d

Browse files
Add iOS test making sure app functioning when API is down
1 parent 077781b commit d1bd86d

26 files changed

+356
-36
lines changed

ios/MullvadVPN.xcodeproj/project.pbxproj

+16
Original file line numberDiff line numberDiff line change
@@ -624,6 +624,8 @@
624624
852BC6702BAB44F500A47558 /* MullvadVPNUITestsChangeSettings.xctestplan in Resources */ = {isa = PBXBuildFile; fileRef = 852BC66D2BAB44F500A47558 /* MullvadVPNUITestsChangeSettings.xctestplan */; };
625625
852BC6712BAB44F500A47558 /* MullvadVPNUITestsVerifyDNSSettingsChanged.xctestplan in Resources */ = {isa = PBXBuildFile; fileRef = 852BC66E2BAB44F500A47558 /* MullvadVPNUITestsVerifyDNSSettingsChanged.xctestplan */; };
626626
852BC6732BAB450B00A47558 /* MullvadVPNUITestsChangeDNSSettings.xctestplan in Resources */ = {isa = PBXBuildFile; fileRef = 852BC6722BAB450B00A47558 /* MullvadVPNUITestsChangeDNSSettings.xctestplan */; };
627+
852D054D2BC3DE3A008578D2 /* APIAccessPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 852D054C2BC3DE3A008578D2 /* APIAccessPage.swift */; };
628+
852D054F2BC43DF7008578D2 /* AddAccessMethodPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 852D054E2BC43DF7008578D2 /* AddAccessMethodPage.swift */; };
627629
8532E6872B8CCED600ACECD1 /* ProblemReportSubmittedPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8532E6862B8CCED600ACECD1 /* ProblemReportSubmittedPage.swift */; };
628630
8542CE242B95F7B9006FCA14 /* VPNSettingsPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8542CE232B95F7B9006FCA14 /* VPNSettingsPage.swift */; };
629631
85557B0E2B591B2600795FE1 /* FirewallAPIClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85557B0D2B591B2600795FE1 /* FirewallAPIClient.swift */; };
@@ -636,7 +638,9 @@
636638
8556EB542B9A1D7100D26DD4 /* BridgingHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 8556EB532B9A1D7100D26DD4 /* BridgingHeader.h */; };
637639
8556EB562B9B0AC500D26DD4 /* RevokedDevicePage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8556EB552B9B0AC500D26DD4 /* RevokedDevicePage.swift */; };
638640
855D9F5B2B63E56B00D7C64D /* ProblemReportPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 855D9F5A2B63E56B00D7C64D /* ProblemReportPage.swift */; };
641+
8585CBE32BC684180015B6A4 /* EditAccessMethodPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8585CBE22BC684180015B6A4 /* EditAccessMethodPage.swift */; };
639642
8587A05D2B84D43100152938 /* ChangeLogAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8587A05C2B84D43100152938 /* ChangeLogAlert.swift */; };
643+
8588F5C52BCD7FB000374D0B /* XCUIElement+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8588F5C42BCD7FB000374D0B /* XCUIElement+Extensions.swift */; };
640644
8590896C2B61763B003AF5F5 /* LoggedInWithoutTimeUITestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 859089682B61763B003AF5F5 /* LoggedInWithoutTimeUITestCase.swift */; };
641645
8590896F2B61763B003AF5F5 /* LoggedOutUITestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8590896B2B61763B003AF5F5 /* LoggedOutUITestCase.swift */; };
642646
85A42B862BB1D627007BABF7 /* XCUIElement+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85A42B852BB1D627007BABF7 /* XCUIElement+Extensions.swift */; };
@@ -1882,6 +1886,8 @@
18821886
852BC66D2BAB44F500A47558 /* MullvadVPNUITestsChangeSettings.xctestplan */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MullvadVPNUITestsChangeSettings.xctestplan; sourceTree = "<group>"; };
18831887
852BC66E2BAB44F500A47558 /* MullvadVPNUITestsVerifyDNSSettingsChanged.xctestplan */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MullvadVPNUITestsVerifyDNSSettingsChanged.xctestplan; sourceTree = "<group>"; };
18841888
852BC6722BAB450B00A47558 /* MullvadVPNUITestsChangeDNSSettings.xctestplan */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MullvadVPNUITestsChangeDNSSettings.xctestplan; sourceTree = "<group>"; };
1889+
852D054C2BC3DE3A008578D2 /* APIAccessPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIAccessPage.swift; sourceTree = "<group>"; };
1890+
852D054E2BC43DF7008578D2 /* AddAccessMethodPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddAccessMethodPage.swift; sourceTree = "<group>"; };
18851891
8532E6862B8CCED600ACECD1 /* ProblemReportSubmittedPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProblemReportSubmittedPage.swift; sourceTree = "<group>"; };
18861892
8542CE232B95F7B9006FCA14 /* VPNSettingsPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPNSettingsPage.swift; sourceTree = "<group>"; };
18871893
85557B0D2B591B2600795FE1 /* FirewallAPIClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirewallAPIClient.swift; sourceTree = "<group>"; };
@@ -1895,7 +1901,9 @@
18951901
8556EB532B9A1D7100D26DD4 /* BridgingHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BridgingHeader.h; sourceTree = "<group>"; };
18961902
8556EB552B9B0AC500D26DD4 /* RevokedDevicePage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RevokedDevicePage.swift; sourceTree = "<group>"; };
18971903
855D9F5A2B63E56B00D7C64D /* ProblemReportPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProblemReportPage.swift; sourceTree = "<group>"; };
1904+
8585CBE22BC684180015B6A4 /* EditAccessMethodPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditAccessMethodPage.swift; sourceTree = "<group>"; };
18981905
8587A05C2B84D43100152938 /* ChangeLogAlert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeLogAlert.swift; sourceTree = "<group>"; };
1906+
8588F5C42BCD7FB000374D0B /* XCUIElement+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "XCUIElement+Extensions.swift"; sourceTree = "<group>"; };
18991907
859089682B61763B003AF5F5 /* LoggedInWithoutTimeUITestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoggedInWithoutTimeUITestCase.swift; sourceTree = "<group>"; };
19001908
859089692B61763B003AF5F5 /* LoggedInWithTimeUITestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoggedInWithTimeUITestCase.swift; sourceTree = "<group>"; };
19011909
8590896A2B61763B003AF5F5 /* BaseUITestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseUITestCase.swift; sourceTree = "<group>"; };
@@ -3627,6 +3635,7 @@
36273635
85A42B852BB1D627007BABF7 /* XCUIElement+Extensions.swift */,
36283636
85C7A2E82B89024B00035D5A /* SettingsTests.swift */,
36293637
85D039972BA4711800940E7F /* SettingsMigrationTests.swift */,
3638+
8588F5C42BCD7FB000374D0B /* XCUIElement+Extensions.swift */,
36303639
);
36313640
path = MullvadVPNUITests;
36323641
sourceTree = "<group>";
@@ -3652,6 +3661,9 @@
36523661
850201DE2B5040A500EF8C96 /* TunnelControlPage.swift */,
36533662
8542CE232B95F7B9006FCA14 /* VPNSettingsPage.swift */,
36543663
85FB5A0B2B6903990015DCED /* WelcomePage.swift */,
3664+
852D054C2BC3DE3A008578D2 /* APIAccessPage.swift */,
3665+
852D054E2BC43DF7008578D2 /* AddAccessMethodPage.swift */,
3666+
8585CBE22BC684180015B6A4 /* EditAccessMethodPage.swift */,
36553667
);
36563668
path = Pages;
36573669
sourceTree = "<group>";
@@ -5625,6 +5637,7 @@
56255637
isa = PBXSourcesBuildPhase;
56265638
buildActionMask = 2147483647;
56275639
files = (
5640+
8585CBE32BC684180015B6A4 /* EditAccessMethodPage.swift in Sources */,
56285641
8556EB522B9A1C6900D26DD4 /* MullvadApi.swift in Sources */,
56295642
85EC620C2B838D10005AFFB5 /* MullvadAPIWrapper.swift in Sources */,
56305643
A9DF789D2B7D1E8B0094E4AD /* LoggedInWithTimeUITestCase.swift in Sources */,
@@ -5633,6 +5646,7 @@
56335646
850201DD2B503D8C00EF8C96 /* SelectLocationPage.swift in Sources */,
56345647
85D039982BA4711800940E7F /* SettingsMigrationTests.swift in Sources */,
56355648
850201DB2B503D7700EF8C96 /* RelayTests.swift in Sources */,
5649+
852D054D2BC3DE3A008578D2 /* APIAccessPage.swift in Sources */,
56365650
85139B2D2B84B4A700734217 /* OutOfTimePage.swift in Sources */,
56375651
85A42B862BB1D627007BABF7 /* XCUIElement+Extensions.swift in Sources */,
56385652
852969362B4E9724007EAD4C /* AccessbilityIdentifier.swift in Sources */,
@@ -5659,7 +5673,9 @@
56595673
85557B1E2B5FB8C700795FE1 /* HeaderBar.swift in Sources */,
56605674
85557B122B594FC900795FE1 /* ConnectivityTests.swift in Sources */,
56615675
852969332B4E9232007EAD4C /* Page.swift in Sources */,
5676+
8588F5C52BCD7FB000374D0B /* XCUIElement+Extensions.swift in Sources */,
56625677
A9A557F32B7E19B10017ADA8 /* SettingsPage.swift in Sources */,
5678+
852D054F2BC43DF7008578D2 /* AddAccessMethodPage.swift in Sources */,
56635679
);
56645680
runOnlyForDeploymentPostprocessing = 0;
56655681
};

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
@@ -41,6 +45,7 @@ public enum AccessibilityIdentifier: String {
4145
case settingsDoneButton
4246

4347
// Cells
48+
case accessMethodProtocolSelectionCell
4449
case vpnSettingsCell
4550
case dnsSettingsAddServerCell
4651
case dnsSettingsUseCustomDNSCell
@@ -55,21 +60,31 @@ public enum AccessibilityIdentifier: String {
5560
case wireGuardObfuscationCell
5661
case udpOverTCPPortCell
5762
case quantumResistantTunnelCell
63+
case socks5ServerCell
64+
case socks5PortCell
5865

5966
// Labels
6067
case accountPagePaidUntilLabel
68+
case addAccessMethodTestStatusReachableLabel
69+
case addAccessMethodTestStatusTestingLabel
70+
case addAccessMethodTestStatusUnreachableLabel
6171
case headerDeviceNameLabel
6272
case connectionStatusConnectedLabel
6373
case connectionStatusNotConnectedLabel
6474
case welcomeAccountNumberLabel
6575
case connectionPanelDetailLabel
6676

6777
// Views
78+
case accessMethodProtocolPickerView
79+
case accessMethodUnreachableAlert
6880
case accountView
6981
case addLocationsView
82+
case addAccessMethodTableView
83+
case apiAccessView
7084
case alertContainerView
7185
case alertTitle
7286
case changeLogAlert
87+
case editAccessMethodView
7388
case headerBarView
7489
case loginView
7590
case outOfTimeView
@@ -87,17 +102,24 @@ public enum AccessibilityIdentifier: String {
87102
case settingsContainerView
88103

89104
// Other UI elements
105+
case accessMethodEnableSwitch
106+
case accessMethodNameTextField
107+
case logOutSpinnerAlertView
90108
case connectionPanelInAddressRow
91109
case connectionPanelOutAddressRow
92110
case customSwitch
93111
case customWireGuardPortTextField
94112
case dnsContentBlockersHeaderView
95113
case dnsSettingsEnterIPAddressTextField
114+
case loginStatusIconAuthenticating
115+
case loginStatusIconFailure
116+
case loginStatusIconSuccess
96117
case loginTextField
97118
case selectLocationSearchTextField
98119
case problemReportEmailTextField
99120
case problemReportMessageTextView
100121
case deleteAccountTextField
122+
case socks5AuthenticationSwitch
101123

102124
// DNS settings
103125
case dnsSettings

ios/MullvadVPN/Containers/Navigation/CustomNavigationController.swift

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ class CustomNavigationController: UINavigationController {
2626

2727
override func viewDidLayoutSubviews() {
2828
super.viewDidLayoutSubviews()
29+
navigationItem.backBarButtonItem?.accessibilityIdentifier = "asdasd"
2930

3031
// Navigation bar updates the prompt color on layout so we have to force our own appearance on each layout pass.
3132
navigationBar.overridePromptColor()

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
)

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

+11
Original file line numberDiff line numberDiff line change
@@ -136,12 +136,23 @@ class MethodTestingStatusCellContentView: UIView, UIContentView {
136136
progressView.startAnimating()
137137
}
138138

139+
// Set accessibility identifier for the text label based on the status it is indicating
140+
switch actualConfiguration.status {
141+
case .reachable:
142+
textLabel.accessibilityIdentifier = .addAccessMethodTestStatusReachableLabel
143+
case .unreachable:
144+
textLabel.accessibilityIdentifier = .addAccessMethodTestStatusUnreachableLabel
145+
case .testing:
146+
textLabel.accessibilityIdentifier = .addAccessMethodTestStatusTestingLabel
147+
}
148+
139149
// Text label is always the last one, so only add it into the stack if it's not there yet.
140150
if textLabel.superview == nil {
141151
horizontalStackView.addArrangedSubview(textLabel)
142152
}
143153
}
144154

155+
145156
private func configureLayoutMargins() {
146157
directionalLayoutMargins = actualConfiguration.directionalLayoutMargins
147158
}

ios/MullvadVPN/Coordinators/Settings/APIAccess/List/ListAccessMethodViewController.swift

+3
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ class ListAccessMethodViewController: UIViewController, UITableViewDelegate {
6767

6868
tableView.registerReusableViews(from: CellReuseIdentifier.self)
6969

70+
view.accessibilityIdentifier = .apiAccessView
71+
7072
view.addConstrainedSubviews([headerView, tableView]) {
7173
headerView.pinEdgesToSuperview(.all().excluding(.bottom))
7274
tableView.pinEdgesToSuperview(.all().excluding(.top))
@@ -117,6 +119,7 @@ class ListAccessMethodViewController: UIViewController, UITableViewDelegate {
117119
button.addAction(UIAction { [weak self] _ in
118120
self?.sendAddNew()
119121
}, for: .touchUpInside)
122+
button.accessibilityIdentifier = .addAccessMethodButton
120123

121124
let fontSize = button.titleLabel?.font.pointSize ?? 0
122125
button.titleLabel?.font = UIFont.systemFont(ofSize: fontSize, weight: .regular)

ios/MullvadVPN/Coordinators/Settings/APIAccess/Pickers/AccessMethodProtocolPicker.swift

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ struct AccessMethodProtocolPicker {
2323

2424
let dataSource = AccessMethodProtocolPickerDataSource()
2525
let controller = ListItemPickerViewController(dataSource: dataSource, selectedItemID: currentValue)
26+
controller.view.accessibilityIdentifier = .accessMethodProtocolPickerView
2627

2728
controller.navigationItem.title = NSLocalizedString(
2829
"SELECT_PROTOCOL_NAV_TITLE",

0 commit comments

Comments
 (0)