74 lines · 2.8 KB · Swift
RawDownload
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