98 lines
2.9 KiB
Swift
98 lines
2.9 KiB
Swift
import Foundation
|
|
import Testing
|
|
@testable import Clawdbot
|
|
|
|
@Suite
|
|
struct ClawdbotOAuthStoreTests {
|
|
@Test
|
|
func returnsMissingWhenFileAbsent() {
|
|
let url = FileManager.default.temporaryDirectory
|
|
.appendingPathComponent("clawdbot-oauth-\(UUID().uuidString)")
|
|
.appendingPathComponent("oauth.json")
|
|
#expect(ClawdbotOAuthStore.anthropicOAuthStatus(at: url) == .missingFile)
|
|
}
|
|
|
|
@Test
|
|
func usesEnvOverrideForClawdbotOAuthDir() throws {
|
|
let key = "CLAWDBOT_OAUTH_DIR"
|
|
let previous = ProcessInfo.processInfo.environment[key]
|
|
defer {
|
|
if let previous {
|
|
setenv(key, previous, 1)
|
|
} else {
|
|
unsetenv(key)
|
|
}
|
|
}
|
|
|
|
let dir = FileManager.default.temporaryDirectory
|
|
.appendingPathComponent("clawdbot-oauth-\(UUID().uuidString)", isDirectory: true)
|
|
setenv(key, dir.path, 1)
|
|
|
|
#expect(ClawdbotOAuthStore.oauthDir().standardizedFileURL == dir.standardizedFileURL)
|
|
}
|
|
|
|
@Test
|
|
func acceptsPiFormatTokens() throws {
|
|
let url = try self.writeOAuthFile([
|
|
"anthropic": [
|
|
"type": "oauth",
|
|
"refresh": "r1",
|
|
"access": "a1",
|
|
"expires": 1_234_567_890,
|
|
],
|
|
])
|
|
|
|
#expect(ClawdbotOAuthStore.anthropicOAuthStatus(at: url).isConnected)
|
|
}
|
|
|
|
@Test
|
|
func acceptsTokenKeyVariants() throws {
|
|
let url = try self.writeOAuthFile([
|
|
"anthropic": [
|
|
"type": "oauth",
|
|
"refresh_token": "r1",
|
|
"access_token": "a1",
|
|
],
|
|
])
|
|
|
|
#expect(ClawdbotOAuthStore.anthropicOAuthStatus(at: url).isConnected)
|
|
}
|
|
|
|
@Test
|
|
func reportsMissingProviderEntry() throws {
|
|
let url = try self.writeOAuthFile([
|
|
"other": [
|
|
"type": "oauth",
|
|
"refresh": "r1",
|
|
"access": "a1",
|
|
],
|
|
])
|
|
|
|
#expect(ClawdbotOAuthStore.anthropicOAuthStatus(at: url) == .missingProviderEntry)
|
|
}
|
|
|
|
@Test
|
|
func reportsMissingTokens() throws {
|
|
let url = try self.writeOAuthFile([
|
|
"anthropic": [
|
|
"type": "oauth",
|
|
"refresh": "",
|
|
"access": "a1",
|
|
],
|
|
])
|
|
|
|
#expect(ClawdbotOAuthStore.anthropicOAuthStatus(at: url) == .missingTokens)
|
|
}
|
|
|
|
private func writeOAuthFile(_ json: [String: Any]) throws -> URL {
|
|
let dir = FileManager.default.temporaryDirectory
|
|
.appendingPathComponent("clawdbot-oauth-\(UUID().uuidString)", isDirectory: true)
|
|
try FileManager.default.createDirectory(at: dir, withIntermediateDirectories: true)
|
|
|
|
let url = dir.appendingPathComponent("oauth.json")
|
|
let data = try JSONSerialization.data(withJSONObject: json, options: [.prettyPrinted, .sortedKeys])
|
|
try data.write(to: url, options: [.atomic])
|
|
return url
|
|
}
|
|
}
|