rastrillo / native Public

Clone
git clone https://amadan.net/rastrillo/native

Plain git — no account needed to clone.

Download

Download this file

1import XCTest
2@testable import RastrilloApple
3
4final class NativeAccountsTests: XCTestCase {
5 @MainActor func testChangingSavedOriginCannotRedirectCredential() throws {
6 let suite = "OficinaAccountsTest.\(UUID().uuidString)"
7 let defaults = try XCTUnwrap(UserDefaults(suiteName: suite))
8 defer { defaults.removePersistentDomain(forName: suite) }
9 let original = NativeAccount(id: UUID().uuidString, origin: URL(string: "https://trusted.test")!, name: "Work")
10 try NativeCredentials.save(NativeSession(name: "__Host-rastrillo_session", value: "secret"), origin: original.credentialKey)
11 defer { NativeCredentials.remove(original.credentialKey) }
12 for origin in ["https://other.test", "http://trusted.test", "https://trusted.test/path"] {
13 let modified = NativeAccount(id: original.id, origin: URL(string: origin)!, name: original.name)
14 defaults.set(try JSONEncoder().encode([modified]), forKey: "native.accounts")
15 defaults.set(original.id, forKey: "native.activeAccount")
16 let connection = NativeConnection(defaultServer: "https://trusted.test", defaults: defaults)
17 XCTAssertNil(connection.client)
18 XCTAssertNil(connection.activeAccountID)
19 }
20 }
21
22 @MainActor func testBackPreservesSessionsAndRestoresMostRecentAccount() throws {
23 let suite = "OficinaAccountsTest.\(UUID().uuidString)"
24 let defaults = try XCTUnwrap(UserDefaults(suiteName: suite))
25 defer { defaults.removePersistentDomain(forName: suite) }
26 let origin = URL(string: "https://trusted.test")!
27 let first = NativeAccount(id: UUID().uuidString, origin: origin, name: "Work")
28 let second = NativeAccount(id: UUID().uuidString, origin: origin, name: "Personal")
29 for (account, token) in [(first,"first"), (second,"second")] {
30 try NativeCredentials.save(NativeSession(name: "__Host-rastrillo_session", value: token), origin: account.credentialKey)
31 }
32 defer { for account in [first,second] { NativeCredentials.remove(account.credentialKey) } }
33 defaults.set(try JSONEncoder().encode([first,second]), forKey: "native.accounts")
34 let connection = NativeConnection(defaultServer: origin.absoluteString, defaults: defaults)
35 connection.selectAccount(second)
36 XCTAssertEqual(connection.client?.credential?.value, "second")
37 connection.showAccounts()
38 XCTAssertNil(connection.client)
39 XCTAssertEqual(connection.accounts.count, 2)
40 let restored = NativeConnection(defaultServer: origin.absoluteString, defaults: defaults)
41 XCTAssertEqual(restored.activeAccountID, second.id)
42 XCTAssertEqual(restored.client?.credential?.value, "second")
43 restored.selectAccount(first)
44 XCTAssertEqual(restored.client?.credential?.value, "first")
45 }
46}
47