// AIAgentSkillLayoutTests.swift // OSGKeyboardTests import XCTest @testable import OSGKeyboardShared @MainActor final class AIAgentSkillLayoutTests: XCTestCase { private func makeDefaults() -> UserDefaults { let suite = "group.com.osgkeyboard.shared.tests.skills.\(UUID().uuidString)" let defaults = UserDefaults(suiteName: suite)! defaults.removePersistentDomain(forName: suite) return defaults } func testFreshInstallEnablesDefaultTransformSkills() { let defaults = makeDefaults() let layout = AppGroupStore(defaults: defaults).agentSkillLayout XCTAssertEqual(layout.enabledIDs, AIAgentSkillLayout.defaultEnabledIDs) XCTAssertTrue(layout.confirmedShortcutIDs.isEmpty) } func testEmptyEnabledListIsPreserved() { let defaults = makeDefaults() let store = AppGroupStore(defaults: defaults) store.setAgentSkillLayout( AIAgentSkillLayout(enabledIDs: [], confirmedShortcutIDs: []) ) XCTAssertEqual(store.agentSkillLayout.enabledIDs, []) } func testCannotEnableExportSkillBeforeShortcutConfirmation() { let store = AIAgentSkillLayoutStore(defaults: makeDefaults()) XCTAssertEqual( store.enable(AIClipboardSkillCatalog.extractTodosID), .needsShortcut ) XCTAssertFalse(store.layout.isEnabled(AIClipboardSkillCatalog.extractTodosID)) } func testConfirmShortcutAutoEnablesWhenSlotAvailable() { let store = AIAgentSkillLayoutStore(defaults: makeDefaults()) XCTAssertEqual( store.confirmShortcutAndEnable(AIClipboardSkillCatalog.extractTodosID), .enabled ) XCTAssertTrue(store.layout.hasConfirmedShortcut(AIClipboardSkillCatalog.extractTodosID)) XCTAssertEqual( store.layout.enabledIDs.last, AIClipboardSkillCatalog.extractTodosID ) } func testSanitizedDropsUnconfirmedExportAndUnknownIDs() { let layout = AIAgentSkillLayout( enabledIDs: ["reply", "extractTodos", "unknown"], confirmedShortcutIDs: [] ).sanitized() XCTAssertEqual(layout.enabledIDs, ["reply"]) } func testSanitizedKeepsConfirmedExport() { let layout = AIAgentSkillLayout( enabledIDs: ["reply", "extractTodos"], confirmedShortcutIDs: ["extractTodos"] ).sanitized() XCTAssertEqual(layout.enabledIDs, ["reply", "extractTodos"]) } func testIsFullUsesEnabledCount() { let full = AIAgentSkillLayout( enabledIDs: (0..