import CodexBarCoreimport Foundationimport Testing@testable import CodexBarCLI #if canImport(SQLite3)import SQLite3#elseif canImport(CSQLite3)import CSQLite3#endif #if canImport(SQLite3) || canImport(CSQLite3)@Suitestruct 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
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