75 lines
2.8 KiB
Swift
75 lines
2.8 KiB
Swift
import CodexBarCore
|
|
import Foundation
|
|
import Testing
|
|
@testable import CodexBarCLI
|
|
|
|
#if canImport(SQLite3)
|
|
import SQLite3
|
|
#elseif canImport(CSQLite3)
|
|
import CSQLite3
|
|
#endif
|
|
|
|
#if canImport(SQLite3) || canImport(CSQLite3)
|
|
@Suite
|
|
struct OpenCodeGoLinuxTests {
|
|
@Test
|
|
func autoSourceDoesNotRequireWebSupport() {
|
|
#expect(!CodexBarCLI.sourceModeRequiresWebSupport(.auto, provider: .opencodego))
|
|
#expect(CodexBarCLI.sourceModeRequiresWebSupport(.web, provider: .opencodego))
|
|
}
|
|
|
|
@Test
|
|
func commandCodeManualCookieDoesNotRequireMacOSWebSupport() {
|
|
let settings = ProviderSettingsSnapshot.make(
|
|
commandcode: .init(cookieSource: .manual, manualCookieHeader: "session=manual"))
|
|
|
|
#expect(!CodexBarCLI.sourceModeRequiresWebSupport(
|
|
.auto,
|
|
provider: .commandcode,
|
|
settings: settings))
|
|
#expect(!CodexBarCLI.sourceModeRequiresWebSupport(
|
|
.web,
|
|
provider: .commandcode,
|
|
settings: settings))
|
|
}
|
|
|
|
@Test
|
|
func localReaderLoadsOpenCodeDatabase() throws {
|
|
let root = FileManager.default.temporaryDirectory
|
|
.appendingPathComponent("OpenCodeGoLinuxTests-\(UUID().uuidString)", isDirectory: true)
|
|
defer { try? FileManager.default.removeItem(at: root) }
|
|
try FileManager.default.createDirectory(at: root, withIntermediateDirectories: true)
|
|
|
|
let databaseURL = root.appendingPathComponent("opencode.db")
|
|
let authURL = root.appendingPathComponent("auth.json")
|
|
let now = Date(timeIntervalSince1970: 1_800_000_000)
|
|
let createdMs = Int64((now.timeIntervalSince1970 - 60) * 1000)
|
|
try Self.createDatabase(at: databaseURL, createdMs: createdMs)
|
|
|
|
let snapshot = try OpenCodeGoLocalUsageReader(authURL: authURL, databaseURL: databaseURL).fetch(now: now)
|
|
|
|
#expect(snapshot.rollingUsagePercent == 50)
|
|
#expect(snapshot.weeklyUsagePercent == 20)
|
|
#expect(snapshot.monthlyUsagePercent == 10)
|
|
}
|
|
|
|
private static func createDatabase(at url: URL, createdMs: Int64) throws {
|
|
var database: OpaquePointer?
|
|
guard sqlite3_open(url.path, &database) == SQLITE_OK else {
|
|
sqlite3_close(database)
|
|
throw OpenCodeGoLocalUsageError.sqliteFailed("open failed")
|
|
}
|
|
defer { sqlite3_close(database) }
|
|
|
|
let data = "{\"time\":{\"created\":\(createdMs)},\"cost\":6,\"providerID\":\"opencode-go\",\"role\":\"assistant\"}"
|
|
let sql = """
|
|
CREATE TABLE message (id TEXT PRIMARY KEY, time_created INTEGER NOT NULL, data TEXT NOT NULL);
|
|
INSERT INTO message (id, time_created, data) VALUES ('message-1', \(createdMs), '\(data)');
|
|
"""
|
|
guard sqlite3_exec(database, sql, nil, nil, nil) == SQLITE_OK else {
|
|
throw OpenCodeGoLocalUsageError.sqliteFailed("fixture creation failed")
|
|
}
|
|
}
|
|
}
|
|
#endif
|