Skip to content

Commit b1335c5

Browse files
committed
Fixed snapshots
1 parent ad77d0d commit b1335c5

File tree

5 files changed

+36
-62
lines changed

5 files changed

+36
-62
lines changed

Cryptomator/Snapshots/SnapshotCoordinator.swift

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
#if SNAPSHOTS
1010
import CryptomatorCommonCore
11+
import Dependencies
1112
import FileProvider
1213
import Foundation
1314
import LocalAuthentication
@@ -31,9 +32,7 @@ class SnapshotCoordinator: MainCoordinator {
3132
}
3233

3334
override func showVaultDetail(for vaultInfo: VaultInfo) {
34-
let snapshotFileProviderConnectorMock = SnapshotFileProviderConnectorMock()
35-
snapshotFileProviderConnectorMock.proxy = SnapshotVaultLockingMock()
36-
let viewModel = VaultDetailViewModel(vaultInfo: vaultInfo, vaultManager: VaultDBManager.shared, fileProviderConnector: snapshotFileProviderConnectorMock, passwordManager: SnapshotVaultPasswordManagerMock(), dbManager: DatabaseManager.shared, vaultKeepUnlockedSettings: SnapshotVaultKeepUnlockedSettings())
35+
let viewModel = VaultDetailViewModel(vaultInfo: vaultInfo, vaultManager: VaultDBManager.shared, passwordManager: SnapshotVaultPasswordManagerMock(), dbManager: DatabaseManager.shared, vaultKeepUnlockedSettings: SnapshotVaultKeepUnlockedSettings())
3736
let vaultDetailViewController = VaultDetailViewController(viewModel: viewModel)
3837
let detailNavigationController = BaseNavigationController(rootViewController: vaultDetailViewController)
3938
rootViewController.showDetailViewController(detailNavigationController, sender: nil)
@@ -57,8 +56,23 @@ class SnapshotCoordinator: MainCoordinator {
5756
}
5857
}
5958

59+
private enum FileProviderConnectorKey: DependencyKey {
60+
static var liveValue: FileProviderConnector = SnapshotFileProviderConnectorMock()
61+
#if DEBUG
62+
static var testValue: FileProviderConnector = SnapshotFileProviderConnectorMock()
63+
#endif
64+
}
65+
66+
public extension DependencyValues {
67+
var fileProviderConnector: FileProviderConnector {
68+
get { self[FileProviderConnectorKey.self] }
69+
set { self[FileProviderConnectorKey.self] = newValue }
70+
}
71+
}
72+
6073
private class SnapshotFileProviderConnectorMock: FileProviderConnector {
61-
var proxy: Any?
74+
let proxy = SnapshotVaultLockingMock()
75+
6276
func getXPC<T>(serviceName: NSFileProviderServiceName, domain: NSFileProviderDomain?) -> Promise<XPC<T>> {
6377
return getCastedProxy()
6478
}

FileProviderExtension/FileProviderExtension.swift

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -250,10 +250,9 @@ class FileProviderExtension: NSFileProviderExtension {
250250
#if SNAPSHOTS
251251
let snapshotVaultPath = CloudPath(LocalizedString.getValue("snapshots.main.vault1"))
252252
let snapshotDomain = NSFileProviderDomain(vaultUID: "12345", displayName: snapshotVaultPath.lastPathComponent)
253-
serviceSources.append(VaultUnlockingServiceSourceSnapshotMock(domain: snapshotDomain,
254-
notificator: notificator,
255-
dbPath: dbPath,
256-
delegate: LocalURLProvider(domain: snapshotDomain)))
253+
if let manager = NSFileProviderManager(for: snapshotDomain) {
254+
serviceSources.append(VaultUnlockingServiceSourceSnapshotMock(domain: snapshotDomain, notificator: notificator, dbPath: dbPath, delegate: LocalURLProvider(domain: snapshotDomain), taskRegistrator: manager))
255+
}
257256
#else
258257
if let domain = domain, let localURLProvider = localURLProvider, let dbPath = dbPath, let notificator = notificator, let manager = NSFileProviderManager(for: domain) {
259258
serviceSources.append(VaultUnlockingServiceSource(domain: domain, notificator: notificator, dbPath: dbPath, delegate: localURLProvider, taskRegistrator: manager))

FileProviderExtensionUI/Snapshots/FileProviderCoordinatorSnapshotMock.swift

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
#if SNAPSHOTS
1010
import CryptomatorCommonCore
11+
import CryptomatorFileProvider
12+
import Dependencies
1113
import FileProviderUI
1214
import LocalAuthentication
1315
import Promises
@@ -21,8 +23,8 @@ class FileProviderCoordinatorSnapshotMock: FileProviderCoordinator {
2123
super.init(extensionContext: extensionContext, hostViewController: hostViewController)
2224
}
2325

24-
override func showManualPasswordScreen(viewModel: UnlockVaultViewModel) {
25-
let viewModel = UnlockVaultViewModelSnapshotMock(domain: NSFileProviderDomain(vaultUID: "123", displayName: ""))
26+
override func showManualLogin(for domain: NSFileProviderDomain, unlockError: UnlockError) {
27+
let viewModel = UnlockVaultViewModelSnapshotMock(domain: domain)
2628
let unlockVaultVC = UnlockVaultViewController(viewModel: viewModel)
2729
unlockVaultVC.coordinator = self
2830
navigationController.pushViewController(unlockVaultVC, animated: false)
@@ -33,11 +35,10 @@ class UnlockVaultViewModelSnapshotMock: UnlockVaultViewModel {
3335
init(domain: NSFileProviderDomain) {
3436
super.init(domain: domain,
3537
wrongBiometricalPassword: false,
36-
fileProviderConnector: FileProviderXPCConnector.shared,
3738
passwordManager: VaultPasswordManagerSnapshotMock(),
3839
vaultAccountManager: VaultAccountDBManager.shared,
3940
providerManager: CloudProviderDBManager.shared,
40-
vaultCache: VaultDBCache(dbWriter: CryptomatorDatabase.shared.dbPool))
41+
vaultCache: VaultDBCache())
4142
}
4243
}
4344

@@ -64,7 +65,8 @@ extension UnlockVaultViewController {
6465
}()
6566

6667
@objc func swizzled_unlock() {
67-
let getXPCPromise: Promise<XPC<VaultUnlocking>> = FileProviderXPCConnector.shared.getXPC(serviceName: .vaultUnlocking, domain: nil)
68+
@Dependency(\.fileProviderConnector) var fileProviderConnector
69+
let getXPCPromise: Promise<XPC<VaultUnlocking>> = fileProviderConnector.getXPC(serviceName: .vaultUnlocking, domain: nil)
6870
getXPCPromise.then { xpc in
6971
xpc.proxy.unlockVault(kek: [UInt8](), reply: { [weak self] _ in
7072
self?.coordinator?.done()

Snapshots/Snapshots.swift

Lines changed: 6 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import XCTest
1010

11+
@MainActor
1112
class Snapshots: XCTestCase {
1213
var app: XCUIApplication!
1314
var filesApp: XCUIApplication!
@@ -166,58 +167,14 @@ class Snapshots: XCTestCase {
166167
XCTAssert(filesApp.wait(for: .runningForeground, timeout: 5.0))
167168

168169
navigateFromRecentsToFilesAppOverview()
169-
170-
// Tap on More Locations
171-
tapMoreLocationsInFilesAppOverview()
172-
173-
// Enable Cryptomator as FileProvider
174-
let browseCollectionView = filesApp.collectionViews["Browse View"]
175-
let cryptomatorCell = browseCollectionView.cells["DOC.sidebar.item.Cryptomator"]
176-
let cryptomatorCellSwitch = cryptomatorCell.switches.firstMatch
177-
XCTAssert(cryptomatorCellSwitch.waitForIsHittable(timeout: 3.0))
178-
cryptomatorCellSwitch.tap()
179-
180-
// Press Done
181-
tapDoneButtonInFilesAppOverview()
182170
}
183171

184172
private func navigateFromRecentsToFilesAppOverview() {
185173
guard XCUIDevice.shared.orientation == .portrait else {
186174
return
187175
}
188176
// Tap on Browse
189-
filesApp.tabBars["DOC.browsingModeTabBar"].buttons.element(boundBy: 1).tap(withNumberOfTaps: 2, numberOfTouches: 1)
190-
}
191-
192-
private func tapDoneButtonInFilesAppOverview() {
193-
let doneButton: XCUIElement
194-
switch UIDevice.current.userInterfaceIdiom {
195-
case .phone:
196-
doneButton = filesApp.navigationBars["FullDocumentManagerViewControllerNavigationBar"].buttons.firstMatch
197-
case .pad:
198-
doneButton = filesApp.navigationBars.firstMatch.buttons.element(boundBy: 1)
199-
default:
200-
XCTFail("Tap Done button in Files app overview is not supported for device: \(UIDevice.current.userInterfaceIdiom)")
201-
return
202-
}
203-
XCTAssert(doneButton.waitForIsHittable(timeout: 3.0))
204-
doneButton.tap()
205-
}
206-
207-
private func tapMoreLocationsInFilesAppOverview() {
208-
let index: Int
209-
switch UIDevice.current.userInterfaceIdiom {
210-
case .phone:
211-
index = 2
212-
case .pad:
213-
index = 3
214-
default:
215-
XCTFail("Tap Done button in Files app overview is not supported for device: \(UIDevice.current.userInterfaceIdiom)")
216-
return
217-
}
218-
let moreLocationsCell = filesApp.cells.element(boundBy: index)
219-
XCTAssert(moreLocationsCell.waitForIsHittable(timeout: 3.0))
220-
moreLocationsCell.tap()
177+
filesApp.tabBars["DOC.browsingModeTabBar"].buttons.element(boundBy: 2).tap(withNumberOfTaps: 2, numberOfTouches: 1)
221178
}
222179

223180
private func snapshotFilesOverview() {
@@ -233,6 +190,10 @@ class Snapshots: XCTestCase {
233190
// Start Cryptomator FileProvider
234191
cryptomatorCell.tap()
235192

193+
// Enable Cryptomator as FileProvider
194+
let activateButton = filesApp.alerts.element(boundBy: 0).buttons.element(boundBy: 1)
195+
activateButton.tap()
196+
236197
// Unlock Screen
237198
let vaultUnlockTableView = filesApp.tables["Snapshot_UnlockVaultViewController"]
238199
XCTAssert(vaultUnlockTableView.waitForExistence(timeout: 20.0))

fastlane/Snapfile

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
# A list of devices you want to take the screenshots from
22
devices([
3-
"iPhone 13 Pro Max",
4-
"iPhone 8 Plus",
5-
"iPad Pro (12.9-inch) (5th generation)",
6-
"iPad Pro (12.9-inch) (2nd generation)",
3+
"iPhone 15 Pro Max",
4+
"iPad Pro 13-inch (M4)",
75
])
86

97
languages([

0 commit comments

Comments
 (0)