97 lines
3.6 KiB
Swift
97 lines
3.6 KiB
Swift
import AppKit
|
|
import Testing
|
|
@testable import Clawdbot
|
|
|
|
@Suite(.serialized)
|
|
@MainActor
|
|
struct MenuSessionsInjectorTests {
|
|
@Test func injectsDisconnectedMessage() {
|
|
let injector = MenuSessionsInjector()
|
|
injector.setTestingControlChannelConnected(false)
|
|
injector.setTestingSnapshot(nil, errorText: nil)
|
|
|
|
let menu = NSMenu()
|
|
menu.addItem(NSMenuItem(title: "Header", action: nil, keyEquivalent: ""))
|
|
menu.addItem(.separator())
|
|
menu.addItem(NSMenuItem(title: "Send Heartbeats", action: nil, keyEquivalent: ""))
|
|
|
|
injector.injectForTesting(into: menu)
|
|
#expect(menu.items.contains { $0.tag == 9_415_557 })
|
|
}
|
|
|
|
@Test func injectsSessionRows() {
|
|
let injector = MenuSessionsInjector()
|
|
injector.setTestingControlChannelConnected(true)
|
|
|
|
let defaults = SessionDefaults(model: "anthropic/claude-opus-4-5", contextTokens: 200_000)
|
|
let rows = [
|
|
SessionRow(
|
|
id: "main",
|
|
key: "main",
|
|
kind: .direct,
|
|
displayName: nil,
|
|
provider: nil,
|
|
subject: nil,
|
|
room: nil,
|
|
space: nil,
|
|
updatedAt: Date(),
|
|
sessionId: "s1",
|
|
thinkingLevel: "low",
|
|
verboseLevel: nil,
|
|
systemSent: false,
|
|
abortedLastRun: false,
|
|
tokens: SessionTokenStats(input: 10, output: 20, total: 30, contextTokens: 200_000),
|
|
model: "claude-opus-4-5"),
|
|
SessionRow(
|
|
id: "discord:group:alpha",
|
|
key: "discord:group:alpha",
|
|
kind: .group,
|
|
displayName: nil,
|
|
provider: nil,
|
|
subject: nil,
|
|
room: nil,
|
|
space: nil,
|
|
updatedAt: Date(timeIntervalSinceNow: -60),
|
|
sessionId: "s2",
|
|
thinkingLevel: "high",
|
|
verboseLevel: "debug",
|
|
systemSent: true,
|
|
abortedLastRun: true,
|
|
tokens: SessionTokenStats(input: 50, output: 50, total: 100, contextTokens: 200_000),
|
|
model: "claude-opus-4-5"),
|
|
]
|
|
let snapshot = SessionStoreSnapshot(
|
|
storePath: "/tmp/sessions.json",
|
|
defaults: defaults,
|
|
rows: rows)
|
|
injector.setTestingSnapshot(snapshot, errorText: nil)
|
|
|
|
let usage = GatewayUsageSummary(
|
|
updatedAt: Date().timeIntervalSince1970 * 1000,
|
|
providers: [
|
|
GatewayUsageProvider(
|
|
provider: "anthropic",
|
|
displayName: "Claude",
|
|
windows: [GatewayUsageWindow(label: "5h", usedPercent: 12, resetAt: nil)],
|
|
plan: "Pro",
|
|
error: nil),
|
|
GatewayUsageProvider(
|
|
provider: "openai-codex",
|
|
displayName: "Codex",
|
|
windows: [GatewayUsageWindow(label: "day", usedPercent: 3, resetAt: nil)],
|
|
plan: nil,
|
|
error: nil),
|
|
])
|
|
injector.setTestingUsageSummary(usage, errorText: nil)
|
|
|
|
let menu = NSMenu()
|
|
menu.addItem(NSMenuItem(title: "Header", action: nil, keyEquivalent: ""))
|
|
menu.addItem(.separator())
|
|
menu.addItem(NSMenuItem(title: "Send Heartbeats", action: nil, keyEquivalent: ""))
|
|
|
|
injector.injectForTesting(into: menu)
|
|
#expect(menu.items.contains { $0.tag == 9_415_557 })
|
|
#expect(menu.items.contains { $0.tag == 9_415_557 && $0.isSeparatorItem })
|
|
}
|
|
}
|