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: "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 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 }) } }