Files
steipete--codexbar/TestsLinux/OpenCodeGoLinuxTests.swift
T
2026-07-13 12:22:33 +08:00

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