Skip to content

Commit dd3d128

Browse files
Handling revoked device view
1 parent eb8b71b commit dd3d128

File tree

6 files changed

+60
-17
lines changed

6 files changed

+60
-17
lines changed

ios/MullvadVPN.xcodeproj/project.pbxproj

+14-10
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
objects = {
88

99
/* Begin PBXBuildFile section */
10-
01EF6F2A2B6A473900125696 /* MullvadApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01EF6F292B6A473900125696 /* MullvadApi.swift */; };
1110
01EF6F342B6A590700125696 /* libmullvad_api.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 01EF6F332B6A590700125696 /* libmullvad_api.a */; };
1211
062B45A328FD4CA700746E77 /* le_root_cert.cer in Resources */ = {isa = PBXBuildFile; fileRef = 06799AB428F98CE700ACD94E /* le_root_cert.cer */; };
1312
062B45BC28FD8C3B00746E77 /* RESTDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = 062B45BB28FD8C3B00746E77 /* RESTDefaults.swift */; };
@@ -621,12 +620,15 @@
621620
85557B162B5ABBBE00795FE1 /* XCUIElementQuery+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85557B152B5ABBBE00795FE1 /* XCUIElementQuery+Extensions.swift */; };
622621
85557B1E2B5FB8C700795FE1 /* HeaderBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85557B1D2B5FB8C700795FE1 /* HeaderBar.swift */; };
623622
85557B202B5FBBD700795FE1 /* AccountPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85557B1F2B5FBBD700795FE1 /* AccountPage.swift */; };
623+
8556EB522B9A1C6900D26DD4 /* MullvadApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8556EB512B9A1C6900D26DD4 /* MullvadApi.swift */; };
624+
8556EB542B9A1D7100D26DD4 /* BridgingHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 8556EB532B9A1D7100D26DD4 /* BridgingHeader.h */; };
625+
8556EB562B9B0AC500D26DD4 /* RevokedDevicePage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8556EB552B9B0AC500D26DD4 /* RevokedDevicePage.swift */; };
624626
855D9F5B2B63E56B00D7C64D /* ProblemReportPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 855D9F5A2B63E56B00D7C64D /* ProblemReportPage.swift */; };
625627
8587A05D2B84D43100152938 /* ChangeLogAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8587A05C2B84D43100152938 /* ChangeLogAlert.swift */; };
626628
8590896C2B61763B003AF5F5 /* LoggedInWithoutTimeUITestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 859089682B61763B003AF5F5 /* LoggedInWithoutTimeUITestCase.swift */; };
627629
8590896F2B61763B003AF5F5 /* LoggedOutUITestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8590896B2B61763B003AF5F5 /* LoggedOutUITestCase.swift */; };
628-
85C7A2E92B89024B00035D5A /* SettingsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85C7A2E82B89024B00035D5A /* SettingsTests.swift */; };
629630
85B267612B849ADB0098E3CD /* mullvad-api.h in Headers */ = {isa = PBXBuildFile; fileRef = 85B267602B849ADB0098E3CD /* mullvad-api.h */; };
631+
85C7A2E92B89024B00035D5A /* SettingsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85C7A2E82B89024B00035D5A /* SettingsTests.swift */; };
630632
85D2B0B12B6BD32400DF9DA7 /* BaseUITestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8590896A2B61763B003AF5F5 /* BaseUITestCase.swift */; };
631633
85E3BDE52B70E18C00FA71FD /* Networking.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85E3BDE42B70E18C00FA71FD /* Networking.swift */; };
632634
85EC620C2B838D10005AFFB5 /* MullvadAPIWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85557B132B5983CF00795FE1 /* MullvadAPIWrapper.swift */; };
@@ -791,7 +793,6 @@
791793
A9C342C52ACC42130045F00E /* ServerRelaysResponse+Stubs.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9C342C42ACC42130045F00E /* ServerRelaysResponse+Stubs.swift */; };
792794
A9D99B9A2A1F7C3200DE27D3 /* RESTTransport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06FAE67D28F83CA50033DD93 /* RESTTransport.swift */; };
793795
A9DF789B2B7D1DF10094E4AD /* mullvad-api.h in Headers */ = {isa = PBXBuildFile; fileRef = 01EF6F2D2B6A51B100125696 /* mullvad-api.h */; settings = {ATTRIBUTES = (Private, ); }; };
794-
A9DF789C2B7D1E410094E4AD /* BridgingHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 01EF6F352B6A5AEF00125696 /* BridgingHeader.h */; settings = {ATTRIBUTES = (Public, ); }; };
795796
A9DF789D2B7D1E8B0094E4AD /* LoggedInWithTimeUITestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 859089692B61763B003AF5F5 /* LoggedInWithTimeUITestCase.swift */; };
796797
A9E031782ACB09930095D843 /* UIApplication+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9E031762ACB08950095D843 /* UIApplication+Extensions.swift */; };
797798
A9E0317A2ACB0AE70095D843 /* UIApplication+Stubs.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9E031792ACB0AE70095D843 /* UIApplication+Stubs.swift */; };
@@ -1254,12 +1255,10 @@
12541255
/* End PBXCopyFilesBuildPhase section */
12551256

12561257
/* Begin PBXFileReference section */
1257-
01EF6F292B6A473900125696 /* MullvadApi.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MullvadApi.swift; sourceTree = "<group>"; };
12581258
01EF6F2D2B6A51B100125696 /* mullvad-api.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "mullvad-api.h"; path = "../mullvad-api/include/mullvad-api.h"; sourceTree = "<group>"; };
12591259
01EF6F2F2B6A588300125696 /* aarch64-apple-ios */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "aarch64-apple-ios"; path = "../target/aarch64-apple-ios"; sourceTree = "<group>"; };
12601260
01EF6F312B6A58F000125696 /* debug */ = {isa = PBXFileReference; lastKnownFileType = folder; name = debug; path = "../target/aarch64-apple-ios/debug"; sourceTree = "<group>"; };
12611261
01EF6F332B6A590700125696 /* libmullvad_api.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libmullvad_api.a; path = "../target/aarch64-apple-ios/debug/libmullvad_api.a"; sourceTree = "<group>"; };
1262-
01EF6F352B6A5AEF00125696 /* BridgingHeader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BridgingHeader.h; sourceTree = "<group>"; };
12631262
01F1FF1D29F0627D007083C3 /* libshadowsocks_proxy.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libshadowsocks_proxy.a; path = ../target/debug/libshadowsocks_proxy.a; sourceTree = "<group>"; };
12641263
062B45BB28FD8C3B00746E77 /* RESTDefaults.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RESTDefaults.swift; sourceTree = "<group>"; };
12651264
063687AF28EB083800BE7161 /* ProxyURLRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProxyURLRequest.swift; sourceTree = "<group>"; };
@@ -1857,16 +1856,18 @@
18571856
85557B152B5ABBBE00795FE1 /* XCUIElementQuery+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "XCUIElementQuery+Extensions.swift"; sourceTree = "<group>"; };
18581857
85557B1D2B5FB8C700795FE1 /* HeaderBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeaderBar.swift; sourceTree = "<group>"; };
18591858
85557B1F2B5FBBD700795FE1 /* AccountPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountPage.swift; sourceTree = "<group>"; };
1859+
8556EB512B9A1C6900D26DD4 /* MullvadApi.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = MullvadApi.swift; path = MullvadVPNUITests/MullvadApi.swift; sourceTree = "<group>"; };
1860+
8556EB532B9A1D7100D26DD4 /* BridgingHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BridgingHeader.h; sourceTree = "<group>"; };
1861+
8556EB552B9B0AC500D26DD4 /* RevokedDevicePage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RevokedDevicePage.swift; sourceTree = "<group>"; };
18601862
855D9F5A2B63E56B00D7C64D /* ProblemReportPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProblemReportPage.swift; sourceTree = "<group>"; };
18611863
8587A05C2B84D43100152938 /* ChangeLogAlert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeLogAlert.swift; sourceTree = "<group>"; };
18621864
859089682B61763B003AF5F5 /* LoggedInWithoutTimeUITestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoggedInWithoutTimeUITestCase.swift; sourceTree = "<group>"; };
18631865
859089692B61763B003AF5F5 /* LoggedInWithTimeUITestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoggedInWithTimeUITestCase.swift; sourceTree = "<group>"; };
18641866
8590896A2B61763B003AF5F5 /* BaseUITestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseUITestCase.swift; sourceTree = "<group>"; };
18651867
8590896B2B61763B003AF5F5 /* LoggedOutUITestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoggedOutUITestCase.swift; sourceTree = "<group>"; };
1866-
85C7A2E82B89024B00035D5A /* SettingsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsTests.swift; sourceTree = "<group>"; };
18671868
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>"; };
1869+
85C7A2E82B89024B00035D5A /* SettingsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsTests.swift; sourceTree = "<group>"; };
18681870
85E3BDE42B70E18C00FA71FD /* Networking.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Networking.swift; sourceTree = "<group>"; };
1869-
85FB59F92B67F2140015DCED /* MullvadAPIWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MullvadAPIWrapper.swift; sourceTree = "<group>"; };
18701871
85FB5A0B2B6903990015DCED /* WelcomePage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomePage.swift; sourceTree = "<group>"; };
18711872
85FB5A0F2B6960A30015DCED /* AccountDeletionPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountDeletionPage.swift; sourceTree = "<group>"; };
18721873
A900E9B72ACC5C2B00C95F67 /* AccountsProxy+Stubs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AccountsProxy+Stubs.swift"; sourceTree = "<group>"; };
@@ -3102,6 +3103,7 @@
31023103
58CE5E57224146200008646E = {
31033104
isa = PBXGroup;
31043105
children = (
3106+
8556EB512B9A1C6900D26DD4 /* MullvadApi.swift */,
31053107
01EF6F2D2B6A51B100125696 /* mullvad-api.h */,
31063108
58F3C0A824A50C0E003E76BE /* Assets */,
31073109
58ECD29023F178FD004298B6 /* Configurations */,
@@ -3548,6 +3550,7 @@
35483550
children = (
35493551
85B267602B849ADB0098E3CD /* mullvad-api.h */,
35503552
852969272B4D9C1F007EAD4C /* AccountTests.swift */,
3553+
8556EB532B9A1D7100D26DD4 /* BridgingHeader.h */,
35513554
85557B112B594FC900795FE1 /* ConnectivityTests.swift */,
35523555
852969372B4ED20E007EAD4C /* Info.plist */,
35533556
85557B0C2B591B0F00795FE1 /* Networking */,
@@ -3573,6 +3576,7 @@
35733576
852969322B4E9232007EAD4C /* Page.swift */,
35743577
855D9F5A2B63E56B00D7C64D /* ProblemReportPage.swift */,
35753578
8532E6862B8CCED600ACECD1 /* ProblemReportSubmittedPage.swift */,
3579+
8556EB552B9B0AC500D26DD4 /* RevokedDevicePage.swift */,
35763580
850201DC2B503D8C00EF8C96 /* SelectLocationPage.swift */,
35773581
850201E22B51A93C00EF8C96 /* SettingsPage.swift */,
35783582
852969392B4F0238007EAD4C /* TermsOfServicePage.swift */,
@@ -3596,7 +3600,6 @@
35963600
85EC620B2B838B3A005AFFB5 /* Recovered References */ = {
35973601
isa = PBXGroup;
35983602
children = (
3599-
85FB59F92B67F2140015DCED /* MullvadAPIWrapper.swift */,
36003603
);
36013604
name = "Recovered References";
36023605
sourceTree = "<group>";
@@ -3799,8 +3802,8 @@
37993802
isa = PBXHeadersBuildPhase;
38003803
buildActionMask = 2147483647;
38013804
files = (
3802-
A9DF789C2B7D1E410094E4AD /* BridgingHeader.h in Headers */,
38033805
85B267612B849ADB0098E3CD /* mullvad-api.h in Headers */,
3806+
8556EB542B9A1D7100D26DD4 /* BridgingHeader.h in Headers */,
38043807
A9DF789B2B7D1DF10094E4AD /* mullvad-api.h in Headers */,
38053808
);
38063809
runOnlyForDeploymentPostprocessing = 0;
@@ -5540,6 +5543,7 @@
55405543
isa = PBXSourcesBuildPhase;
55415544
buildActionMask = 2147483647;
55425545
files = (
5546+
8556EB522B9A1C6900D26DD4 /* MullvadApi.swift in Sources */,
55435547
85EC620C2B838D10005AFFB5 /* MullvadAPIWrapper.swift in Sources */,
55445548
A9DF789D2B7D1E8B0094E4AD /* LoggedInWithTimeUITestCase.swift in Sources */,
55455549
85D2B0B12B6BD32400DF9DA7 /* BaseUITestCase.swift in Sources */,
@@ -5554,11 +5558,11 @@
55545558
8590896F2B61763B003AF5F5 /* LoggedOutUITestCase.swift in Sources */,
55555559
85557B202B5FBBD700795FE1 /* AccountPage.swift in Sources */,
55565560
852969352B4E9270007EAD4C /* LoginPage.swift in Sources */,
5561+
8556EB562B9B0AC500D26DD4 /* RevokedDevicePage.swift in Sources */,
55575562
85557B102B59215F00795FE1 /* FirewallRule.swift in Sources */,
55585563
85557B0E2B591B2600795FE1 /* FirewallAPIClient.swift in Sources */,
55595564
852969282B4D9C1F007EAD4C /* AccountTests.swift in Sources */,
55605565
8587A05D2B84D43100152938 /* ChangeLogAlert.swift in Sources */,
5561-
01EF6F2A2B6A473900125696 /* MullvadApi.swift in Sources */,
55625566
85FB5A102B6960A30015DCED /* AccountDeletionPage.swift in Sources */,
55635567
85557B162B5ABBBE00795FE1 /* XCUIElementQuery+Extensions.swift in Sources */,
55645568
855D9F5B2B63E56B00D7C64D /* ProblemReportPage.swift in Sources */,

ios/MullvadVPN/Classes/AccessbilityIdentifier.swift

+2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public enum AccessibilityIdentifier: String {
2020
case createAccountButton
2121
case deleteButton
2222
case disconnectButton
23+
case revokedDeviceLoginButton
2324
case infoButton
2425
case learnAboutPrivacyButton
2526
case loginBarButton
@@ -65,6 +66,7 @@ public enum AccessibilityIdentifier: String {
6566
case tunnelControlView
6667
case problemReportView
6768
case problemReportSubmittedView
69+
case revokedDeviceView
6870
case welcomeView
6971
case deleteAccountView
7072

ios/MullvadVPN/View controllers/RevokedDevice/RevokedDeviceViewController.swift

+2
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ class RevokedDeviceViewController: UIViewController, RootContainment {
6262

6363
private lazy var logoutButton: AppButton = {
6464
let button = AppButton(style: .default)
65+
button.accessibilityIdentifier = .revokedDeviceLoginButton
6566
button.translatesAutoresizingMaskIntoConstraints = false
6667
button.setTitle(
6768
NSLocalizedString(
@@ -108,6 +109,7 @@ class RevokedDeviceViewController: UIViewController, RootContainment {
108109
override func viewDidLoad() {
109110
super.viewDidLoad()
110111

112+
view.accessibilityIdentifier = .revokedDeviceView
111113
view.backgroundColor = .secondaryColor
112114
view.directionalLayoutMargins = UIMetrics.contentLayoutMargins
113115

ios/MullvadVPNUITests/Pages/HeaderBar.swift

+5-2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ import Foundation
1010
import XCTest
1111

1212
class HeaderBar: Page {
13+
lazy var accountButton = app.buttons[AccessibilityIdentifier.accountButton]
14+
lazy var settingsButton = app.buttons[AccessibilityIdentifier.settingsButton]
15+
1316
@discardableResult override init(_ app: XCUIApplication) {
1417
super.init(app)
1518

@@ -18,12 +21,12 @@ class HeaderBar: Page {
1821
}
1922

2023
@discardableResult func tapAccountButton() -> Self {
21-
app.buttons[AccessibilityIdentifier.accountButton.rawValue].tap()
24+
accountButton.tap()
2225
return self
2326
}
2427

2528
@discardableResult func tapSettingsButton() -> Self {
26-
app.buttons[AccessibilityIdentifier.settingsButton.rawValue].tap()
29+
settingsButton.tap()
2730
return self
2831
}
2932
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
//
2+
// RevokedDevicePage.swift
3+
// MullvadVPNUITests
4+
//
5+
// Created by Niklas Berglund on 2024-03-08.
6+
// Copyright © 2024 Mullvad VPN AB. All rights reserved.
7+
//
8+
9+
import Foundation
10+
import XCTest
11+
12+
class RevokedDevicePage: Page {
13+
@discardableResult override init(_ app: XCUIApplication) {
14+
super.init(app)
15+
16+
self.pageAccessibilityIdentifier = .revokedDeviceView
17+
waitForPageToBeShown()
18+
}
19+
20+
@discardableResult func tapGoToLogin() -> Self {
21+
app.buttons[AccessibilityIdentifier.revokedDeviceLoginButton]
22+
.tap()
23+
24+
return self
25+
}
26+
}

ios/MullvadVPNUITests/Test base classes/BaseUITestCase.swift

+11-5
Original file line numberDiff line numberDiff line change
@@ -101,11 +101,17 @@ class BaseUITestCase: XCTestCase {
101101

102102
func logoutIfLoggedIn() {
103103
if isLoggedIn() {
104-
HeaderBar(app)
105-
.tapAccountButton()
106-
107-
AccountPage(app)
108-
.tapLogOutButton()
104+
if (app.buttons[AccessibilityIdentifier.accountButton].exists) {
105+
HeaderBar(app)
106+
.tapAccountButton()
107+
108+
AccountPage(app)
109+
.tapLogOutButton()
110+
} else {
111+
// Workaround for revoked device view not showing account button
112+
RevokedDevicePage(app)
113+
.tapGoToLogin()
114+
}
109115

110116
LoginPage(app)
111117
}

0 commit comments

Comments
 (0)