57 lines
1.9 KiB
Swift
57 lines
1.9 KiB
Swift
import CodexBarCore
|
|
import Foundation
|
|
import Testing
|
|
@testable import CodexBar
|
|
|
|
@Test
|
|
func `ProviderTokenAccountData encoding`() throws {
|
|
let now = Date().timeIntervalSince1970
|
|
let account = ProviderTokenAccount(
|
|
id: UUID(),
|
|
label: "user@example.com",
|
|
token: "test-token",
|
|
addedAt: now,
|
|
lastUsed: now)
|
|
let data = ProviderTokenAccountData(version: 1, accounts: [account], activeIndex: 0)
|
|
|
|
let encoder = JSONEncoder()
|
|
let encoded = try encoder.encode(data)
|
|
|
|
let decoder = JSONDecoder()
|
|
let decoded = try decoder.decode(ProviderTokenAccountData.self, from: encoded)
|
|
|
|
#expect(decoded.version == 1)
|
|
#expect(decoded.accounts.count == 1)
|
|
#expect(decoded.accounts[0].label == "user@example.com")
|
|
#expect(decoded.activeIndex == 0)
|
|
}
|
|
|
|
@Test
|
|
func `FileTokenAccountStore round trip`() throws {
|
|
let tempDir = FileManager.default.temporaryDirectory
|
|
let fileURL = tempDir.appendingPathComponent("codexbar-token-accounts-test.json")
|
|
defer { try? FileManager.default.removeItem(at: fileURL) }
|
|
|
|
let now = Date().timeIntervalSince1970
|
|
let account = ProviderTokenAccount(
|
|
id: UUID(),
|
|
label: "user@example.com",
|
|
token: "test-token",
|
|
addedAt: now,
|
|
lastUsed: nil,
|
|
usageScope: "team",
|
|
organizationID: "org-test",
|
|
workspaceID: "proj-test")
|
|
let data = ProviderTokenAccountData(version: 1, accounts: [account], activeIndex: 0)
|
|
let store = FileTokenAccountStore(fileURL: fileURL)
|
|
|
|
try store.storeAccounts([.zai: data])
|
|
let loaded = try store.loadAccounts()
|
|
|
|
#expect(loaded[.zai]?.accounts.count == 1)
|
|
#expect(loaded[.zai]?.accounts[0].label == "user@example.com")
|
|
#expect(loaded[.zai]?.accounts[0].usageScope == "team")
|
|
#expect(loaded[.zai]?.accounts[0].organizationID == "org-test")
|
|
#expect(loaded[.zai]?.accounts[0].workspaceID == "proj-test")
|
|
}
|