summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--ios/MullvadVPN/Classes/AccessbilityIdentifier.swift1
-rw-r--r--ios/MullvadVPN/Coordinators/Settings/APIAccess/Edit/EditAccessMethodViewController.swift2
-rw-r--r--ios/MullvadVPN/Coordinators/Settings/APIAccess/List/ListAccessMethodView.swift1
-rw-r--r--ios/MullvadVPN/Views/List/MullvadListNavigationItemView.swift2
-rw-r--r--ios/MullvadVPNUITests/ConnectivityTests.swift40
-rw-r--r--ios/MullvadVPNUITests/Pages/APIAccessPage.swift4
-rw-r--r--ios/MullvadVPNUITests/Pages/EditAccessMethodPage.swift9
-rw-r--r--ios/MullvadVPNUITests/Pages/LoginPage.swift2
8 files changed, 40 insertions, 21 deletions
diff --git a/ios/MullvadVPN/Classes/AccessbilityIdentifier.swift b/ios/MullvadVPN/Classes/AccessbilityIdentifier.swift
index 63f3c87682..0dfb9dbdda 100644
--- a/ios/MullvadVPN/Classes/AccessbilityIdentifier.swift
+++ b/ios/MullvadVPN/Classes/AccessbilityIdentifier.swift
@@ -13,6 +13,7 @@ public enum AccessibilityIdentifier: Equatable {
case addAccessMethodButton
case accessMethodAddButton
case accessMethodTestButton
+ case accessMethodConfirmDeleteButton
case accountButton
case accessMethodUnreachableBackButton
case accessMethodUnreachableSaveButton
diff --git a/ios/MullvadVPN/Coordinators/Settings/APIAccess/Edit/EditAccessMethodViewController.swift b/ios/MullvadVPN/Coordinators/Settings/APIAccess/Edit/EditAccessMethodViewController.swift
index 4d0440fb07..1f1742c1bd 100644
--- a/ios/MullvadVPN/Coordinators/Settings/APIAccess/Edit/EditAccessMethodViewController.swift
+++ b/ios/MullvadVPN/Coordinators/Settings/APIAccess/Edit/EditAccessMethodViewController.swift
@@ -272,6 +272,7 @@ extension EditAccessMethodViewController: UITableViewDelegate {
var contentConfiguration = ButtonCellContentConfiguration()
contentConfiguration.style = .tableInsetGroupedDanger
contentConfiguration.text = itemIdentifier.text
+ contentConfiguration.accessibilityIdentifier = .deleteButton
contentConfiguration.primaryAction = UIAction { [weak self] _ in
self?.onDelete()
}
@@ -398,6 +399,7 @@ extension EditAccessMethodViewController: UITableViewDelegate {
comment: ""
),
style: .destructive,
+ accessibilityId: .accessMethodConfirmDeleteButton,
handler: { [weak self] in
guard let self else { return }
interactor.deleteAccessMethod()
diff --git a/ios/MullvadVPN/Coordinators/Settings/APIAccess/List/ListAccessMethodView.swift b/ios/MullvadVPN/Coordinators/Settings/APIAccess/List/ListAccessMethodView.swift
index 8c06bea36e..b5f42d4144 100644
--- a/ios/MullvadVPN/Coordinators/Settings/APIAccess/List/ListAccessMethodView.swift
+++ b/ios/MullvadVPN/Coordinators/Settings/APIAccess/List/ListAccessMethodView.swift
@@ -104,6 +104,7 @@ struct ListAccessMethodView<ViewModel>: View where ViewModel: ListAccessViewMode
) {
viewModel.addNewMethod()
}
+ .accessibilityIdentifier(AccessibilityIdentifier.addAccessMethodButton.asString)
.padding(.horizontal)
Spacer()
}
diff --git a/ios/MullvadVPN/Views/List/MullvadListNavigationItemView.swift b/ios/MullvadVPN/Views/List/MullvadListNavigationItemView.swift
index 0d5223f145..619212184d 100644
--- a/ios/MullvadVPN/Views/List/MullvadListNavigationItemView.swift
+++ b/ios/MullvadVPN/Views/List/MullvadListNavigationItemView.swift
@@ -68,7 +68,7 @@ struct MullvadListNavigationItemView: View {
.primary
)
}
- .accessibilityIdentifier(accessibilityIdentifier?.asString ?? "")
+ .accessibilityIdentifier(accessibilityIdentifier?.asString ?? title)
.onButtonPressedChange { isPressed in
self.isPressed = isPressed
}
diff --git a/ios/MullvadVPNUITests/ConnectivityTests.swift b/ios/MullvadVPNUITests/ConnectivityTests.swift
index 71ec190c78..a0cf389e6d 100644
--- a/ios/MullvadVPNUITests/ConnectivityTests.swift
+++ b/ios/MullvadVPNUITests/ConnectivityTests.swift
@@ -56,11 +56,6 @@ class ConnectivityTests: LoggedOutUITestCase {
/// Get the app into a blocked state by connecting to a relay then applying a filter which don't find this relay, then verify that app can still communicate by logging out and verifying that the device was successfully removed
// swiftlint:disable:next function_body_length
func testAPIReachableWhenBlocked() throws {
- let skipReason = """
- URLSession doesn't work when the app is in a blocked state.
- Thus, we should disable this test until we have migrated over to `Rust API client`.
- """
- try XCTSkipIf(true, skipReason)
let hasTimeAccountNumber = getAccountWithTime()
addTeardownBlock {
// Reset any filters
@@ -99,7 +94,6 @@ class ConnectivityTests: LoggedOutUITestCase {
.tapFilterButton()
SelectLocationFilterPage(app)
- .tapOwnershipCellExpandButton()
.tapMullvadOwnershipCell()
.tapApplyButton()
@@ -121,7 +115,6 @@ class ConnectivityTests: LoggedOutUITestCase {
.tapFilterButton()
SelectLocationFilterPage(app)
- .tapOwnershipCellExpandButton()
.tapRentedOwnershipCell()
.tapApplyButton()
@@ -146,13 +139,8 @@ class ConnectivityTests: LoggedOutUITestCase {
// swiftlint:disable function_body_length
/// Test that the app is functioning when API is down. To simulate API being down we create a dummy access method
func testAppStillFunctioningWhenAPIDown() throws {
- let skipReason = """
- This test is currently skipped due to a bug in iOS 18 where ATS shuts down the
- connection to the API in the blocked state, despite being explicitly disabled,
- and after the checks in SSLPinningURLSessionDelegate return no error.
- """
- try XCTSkipIf(true, skipReason)
let hasTimeAccountNumber = getAccountWithTime()
+ let customAccessMethodName = "Disable-access-dummy"
addTeardownBlock {
HeaderBar(self.app)
@@ -162,6 +150,14 @@ class ConnectivityTests: LoggedOutUITestCase {
.tapAPIAccessCell()
self.toggleAllAccessMethodsEnabledSwitchesIfOff()
+
+ APIAccessPage(self.app)
+ .editAccessMethod(customAccessMethodName)
+
+ EditAccessMethodPage(self.app)
+ .tapDeleteButton()
+ .confirmAccessMethodDeletion()
+
self.deleteTemporaryAccountWithTime(accountNumber: hasTimeAccountNumber)
}
@@ -179,8 +175,6 @@ class ConnectivityTests: LoggedOutUITestCase {
SettingsPage(app)
.tapAPIAccessCell()
- toggleAllAccessMethodsEnabledSwitches()
-
APIAccessPage(app)
.tapAddButton()
@@ -188,7 +182,7 @@ class ConnectivityTests: LoggedOutUITestCase {
AddAccessMethodPage(app)
.tapNameCell()
- .enterText("Disable-access-dummy")
+ .enterText(customAccessMethodName)
.tapTypeCell()
.tapSOCKS5TypeValueCell()
.tapServerCell()
@@ -203,6 +197,8 @@ class ConnectivityTests: LoggedOutUITestCase {
AddAccessMethodAPIUnreachableAlert(app)
.tapSaveButton()
+ disableBuiltinAccessMethods()
+
SettingsPage(app)
.swipeDownToDismissModal()
@@ -289,9 +285,15 @@ class ConnectivityTests: LoggedOutUITestCase {
// swiftlint:enable function_body_length
- /// Toggle enabled switch for all existing access methods. It is a precondition that the app is currently showing API access view.
- private func toggleAllAccessMethodsEnabledSwitches() {
- for cell in APIAccessPage(app).getAccessMethodCells() {
+ /// Toggle enabled switch for all existing access methods.
+ /// Preconditions:
+ /// - The app is currently showing API access view.
+ /// - There is one custom access method enabled
+ /// - The extra access method is not disabled
+ private func disableBuiltinAccessMethods() {
+ var accessMethods = APIAccessPage(app).getAccessMethodCells()
+ accessMethods.removeLast()
+ for cell in accessMethods {
cell.tap()
EditAccessMethodPage(app)
.tapEnableMethodSwitch()
diff --git a/ios/MullvadVPNUITests/Pages/APIAccessPage.swift b/ios/MullvadVPNUITests/Pages/APIAccessPage.swift
index b70e5c9d24..ca43cc91f3 100644
--- a/ios/MullvadVPNUITests/Pages/APIAccessPage.swift
+++ b/ios/MullvadVPNUITests/Pages/APIAccessPage.swift
@@ -29,4 +29,8 @@ class APIAccessPage: Page {
func getAccessMethodCell(accessibilityId: AccessibilityIdentifier) -> XCUIElement {
app.buttons[accessibilityId]
}
+
+ func editAccessMethod(_ named: String) {
+ app.buttons[named].tap()
+ }
}
diff --git a/ios/MullvadVPNUITests/Pages/EditAccessMethodPage.swift b/ios/MullvadVPNUITests/Pages/EditAccessMethodPage.swift
index bebcf92d12..77726e9bf0 100644
--- a/ios/MullvadVPNUITests/Pages/EditAccessMethodPage.swift
+++ b/ios/MullvadVPNUITests/Pages/EditAccessMethodPage.swift
@@ -64,4 +64,13 @@ class EditAccessMethodPage: Page {
XCTAssertFalse(app.switches[AccessibilityIdentifier.accessMethodEnableSwitch].isEnabled)
return self
}
+
+ @discardableResult func tapDeleteButton() -> Self {
+ app.buttons[AccessibilityIdentifier.deleteButton].tap()
+ return self
+ }
+
+ func confirmAccessMethodDeletion() {
+ app.buttons[.accessMethodConfirmDeleteButton].tap()
+ }
}
diff --git a/ios/MullvadVPNUITests/Pages/LoginPage.swift b/ios/MullvadVPNUITests/Pages/LoginPage.swift
index e120637a52..6035d844ca 100644
--- a/ios/MullvadVPNUITests/Pages/LoginPage.swift
+++ b/ios/MullvadVPNUITests/Pages/LoginPage.swift
@@ -50,7 +50,7 @@ class LoginPage: Page {
@discardableResult public func verifyFailIconShown() -> Self {
let predicate = NSPredicate(format: "identifier == 'statusImageView' AND value == 'fail'")
let elementQuery = app.images.containing(predicate)
- let elementExists = elementQuery.firstMatch.waitForExistence(timeout: BaseUITestCase.longTimeout)
+ let elementExists = elementQuery.firstMatch.waitForExistence(timeout: BaseUITestCase.veryLongTimeout)
XCTAssertTrue(elementExists, "Fail icon shown")
return self
}