summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorBug Magnet <marco.nikic@mullvad.net>2024-04-12 10:27:31 +0200
committerBug Magnet <marco.nikic@mullvad.net>2024-04-12 10:27:31 +0200
commitc4f3d510bd9db925e7143d847b0c0bf764fe3cdf (patch)
treec13aace29691fa0ffa39015c399c001e8bd5ca1e
parent51f272d1aae3346067711a61fcaf5112af8be41c (diff)
parent4a89ddad7dc974bc11e9af91e15dedcfc3850120 (diff)
downloadmullvadvpn-c4f3d510bd9db925e7143d847b0c0bf764fe3cdf.tar.xz
mullvadvpn-c4f3d510bd9db925e7143d847b0c0bf764fe3cdf.zip
Merge branch 'test-that-app-properly-displays-time-left-in-account-view-ios-433'
-rw-r--r--ios/MullvadVPN/Classes/AccessbilityIdentifier.swift1
-rw-r--r--ios/MullvadVPN/View controllers/Account/AccountExpiryRow.swift1
-rw-r--r--ios/MullvadVPNUITests/AccountTests.swift12
-rw-r--r--ios/MullvadVPNUITests/Networking/MullvadAPIWrapper.swift6
-rw-r--r--ios/MullvadVPNUITests/Pages/AccountPage.swift25
5 files changed, 43 insertions, 2 deletions
diff --git a/ios/MullvadVPN/Classes/AccessbilityIdentifier.swift b/ios/MullvadVPN/Classes/AccessbilityIdentifier.swift
index 371412c975..cda791d042 100644
--- a/ios/MullvadVPN/Classes/AccessbilityIdentifier.swift
+++ b/ios/MullvadVPN/Classes/AccessbilityIdentifier.swift
@@ -57,6 +57,7 @@ public enum AccessibilityIdentifier: String {
case quantumResistantTunnelCell
// Labels
+ case accountPagePaidUntilLabel
case headerDeviceNameLabel
case connectionStatusConnectedLabel
case connectionStatusNotConnectedLabel
diff --git a/ios/MullvadVPN/View controllers/Account/AccountExpiryRow.swift b/ios/MullvadVPN/View controllers/Account/AccountExpiryRow.swift
index b87e7c33cf..00f0ebbedf 100644
--- a/ios/MullvadVPN/View controllers/Account/AccountExpiryRow.swift
+++ b/ios/MullvadVPN/View controllers/Account/AccountExpiryRow.swift
@@ -62,6 +62,7 @@ class AccountExpiryRow: UIView {
valueLabel.translatesAutoresizingMaskIntoConstraints = false
valueLabel.font = UIFont.systemFont(ofSize: 17)
valueLabel.textColor = .white
+ valueLabel.accessibilityIdentifier = .accountPagePaidUntilLabel
return valueLabel
}()
diff --git a/ios/MullvadVPNUITests/AccountTests.swift b/ios/MullvadVPNUITests/AccountTests.swift
index b3b47dc858..f782353601 100644
--- a/ios/MullvadVPNUITests/AccountTests.swift
+++ b/ios/MullvadVPNUITests/AccountTests.swift
@@ -89,4 +89,16 @@ class AccountTests: LoggedOutUITestCase {
XCTAssertEqual(try MullvadAPIWrapper().getDevices(newAccountNumber).count, 0)
try MullvadAPIWrapper().deleteAccount(newAccountNumber)
}
+
+ func testTimeLeft() throws {
+ login(accountNumber: hasTimeAccountNumber)
+
+ let accountExpiry = try MullvadAPIWrapper().getAccountExpiry(hasTimeAccountNumber)
+
+ HeaderBar(app)
+ .tapAccountButton()
+
+ AccountPage(app)
+ .verifyPaidUntil(accountExpiry)
+ }
}
diff --git a/ios/MullvadVPNUITests/Networking/MullvadAPIWrapper.swift b/ios/MullvadVPNUITests/Networking/MullvadAPIWrapper.swift
index b3d7332ced..25439c987a 100644
--- a/ios/MullvadVPNUITests/Networking/MullvadAPIWrapper.swift
+++ b/ios/MullvadVPNUITests/Networking/MullvadAPIWrapper.swift
@@ -88,9 +88,11 @@ class MullvadAPIWrapper {
}
}
- func getAccountExpiry(_ account: String) throws -> UInt64 {
+ func getAccountExpiry(_ account: String) throws -> Date {
do {
- return try mullvadAPI.getExpiry(forAccount: account)
+ let accountExpiryTimestamp = Double(try mullvadAPI.getExpiry(forAccount: account))
+ let accountExpiryDate = Date(timeIntervalSince1970: accountExpiryTimestamp)
+ return accountExpiryDate
} catch {
throw MullvadAPIError.requestError
}
diff --git a/ios/MullvadVPNUITests/Pages/AccountPage.swift b/ios/MullvadVPNUITests/Pages/AccountPage.swift
index 8ff5e935af..b076c09b99 100644
--- a/ios/MullvadVPNUITests/Pages/AccountPage.swift
+++ b/ios/MullvadVPNUITests/Pages/AccountPage.swift
@@ -41,4 +41,29 @@ class AccountPage: Page {
app.buttons[AccessibilityIdentifier.deleteButton.rawValue].tap()
return self
}
+
+ @discardableResult func verifyPaidUntil(_ date: Date) -> Self {
+ // Strip seconds from date, since the app don't display seconds
+ let calendar = Calendar.current
+ var components = calendar.dateComponents([.year, .month, .day, .hour, .minute], from: date)
+ components.second = 0
+ guard let strippedDate = calendar.date(from: components) else {
+ XCTFail("Failed to remove seconds from date")
+ return self
+ }
+
+ let paidUntilLabelText = app.staticTexts[AccessibilityIdentifier.accountPagePaidUntilLabel].label
+ let dateFormatter = DateFormatter()
+ dateFormatter.dateStyle = .medium
+ dateFormatter.timeStyle = .short
+
+ guard let paidUntilLabelDate = dateFormatter.date(from: paidUntilLabelText) else {
+ XCTFail("Failed to convert presented date to Date object")
+ return self
+ }
+
+ XCTAssertEqual(strippedDate, paidUntilLabelDate)
+
+ return self
+ }
}