Add device access token authentication
This commit is contained in:
@@ -454,6 +454,71 @@ final class iPhoneLibraryViewModelPolishTests: XCTestCase {
|
||||
}
|
||||
}
|
||||
|
||||
@MainActor
|
||||
final class iPhoneLibraryViewModelDeviceAuthTests: XCTestCase {
|
||||
func testRefreshSyncStoresDeviceAccessTokenWhenRegistrationRuns() async throws {
|
||||
let keychain = MemoryKeychainService()
|
||||
let counter = RegisterCallCounter()
|
||||
let viewModel = makeViewModel(
|
||||
remoteTracks: [
|
||||
makeRemoteTrack(
|
||||
trackId: "remote-auth-store",
|
||||
assetId: "asset-auth-store",
|
||||
title: "Store Token"
|
||||
),
|
||||
],
|
||||
apiClient: TestRegisterAPIClient(counter: counter),
|
||||
keychainService: keychain
|
||||
)
|
||||
|
||||
await viewModel.loadIfNeeded()
|
||||
await viewModel.refreshSync()
|
||||
|
||||
let storedDeviceID = try await keychain.loadValue(forKey: "velody.iphone.device-id")
|
||||
let storedDeviceAccessToken = try await keychain.loadValue(
|
||||
forKey: "velody.iphone.device-access-token"
|
||||
)
|
||||
|
||||
XCTAssertEqual(await counter.count, 1)
|
||||
XCTAssertFalse((storedDeviceID ?? "").isEmpty)
|
||||
XCTAssertFalse((storedDeviceAccessToken ?? "").isEmpty)
|
||||
}
|
||||
|
||||
func testExistingDeviceWithoutAccessTokenReregistersCleanly() async throws {
|
||||
let keychain = MemoryKeychainService()
|
||||
let legacyDeviceID = "legacy-device-id"
|
||||
try await keychain.save(legacyDeviceID, forKey: "velody.iphone.device-id")
|
||||
try await keychain.save(
|
||||
"legacy-bootstrap-token",
|
||||
forKey: "velody.iphone.bootstrap-token"
|
||||
)
|
||||
let counter = RegisterCallCounter()
|
||||
let viewModel = makeViewModel(
|
||||
remoteTracks: [
|
||||
makeRemoteTrack(
|
||||
trackId: "remote-auth-reregister",
|
||||
assetId: "asset-auth-reregister",
|
||||
title: "Re-register Token"
|
||||
),
|
||||
],
|
||||
apiClient: TestRegisterAPIClient(counter: counter),
|
||||
keychainService: keychain
|
||||
)
|
||||
|
||||
await viewModel.loadIfNeeded()
|
||||
await viewModel.refreshSync()
|
||||
|
||||
let storedDeviceID = try await keychain.loadValue(forKey: "velody.iphone.device-id")
|
||||
let storedDeviceAccessToken = try await keychain.loadValue(
|
||||
forKey: "velody.iphone.device-access-token"
|
||||
)
|
||||
|
||||
XCTAssertEqual(await counter.count, 1)
|
||||
XCTAssertNotEqual(storedDeviceID, legacyDeviceID)
|
||||
XCTAssertFalse((storedDeviceAccessToken ?? "").isEmpty)
|
||||
}
|
||||
}
|
||||
|
||||
private actor RegisterCallCounter {
|
||||
private(set) var count = 0
|
||||
|
||||
|
||||
Reference in New Issue
Block a user