2cc81c4628
Add local clipboard intent recommendations, webpage and phone actions, and safer host handoffs. Refine managed gateway, catalog refresh, onboarding, and adaptive polish behavior.
117 lines
4.2 KiB
Swift
117 lines
4.2 KiB
Swift
// AIUserSkillStoreTests.swift
|
|
// OSGKeyboardTests
|
|
|
|
@testable import OSGKeyboardShared
|
|
import XCTest
|
|
|
|
@MainActor
|
|
final class AIUserSkillStoreTests: XCTestCase {
|
|
private func makeDefaults() -> UserDefaults {
|
|
let suite = "group.com.osgkeyboard.shared.tests.userSkills.\(UUID().uuidString)"
|
|
let defaults = UserDefaults(suiteName: suite)!
|
|
defaults.removePersistentDomain(forName: suite)
|
|
return defaults
|
|
}
|
|
|
|
func testNewTextSkillIsInstalledByDefault() throws {
|
|
let store = AIAgentSkillLayoutStore(defaults: makeDefaults())
|
|
let skill = AIUserSkill(name: "Custom", prompt: "Do it")
|
|
|
|
try store.saveUserSkill(skill)
|
|
|
|
XCTAssertTrue(store.layout.isEnabled(skill.id))
|
|
XCTAssertEqual(store.layout.enabledIDs.last, skill.id)
|
|
}
|
|
|
|
func testNewShortcutSkillWaitsForConfirmation() throws {
|
|
let store = AIAgentSkillLayoutStore(defaults: makeDefaults())
|
|
let skill = AIUserSkill(
|
|
name: "Custom",
|
|
prompt: "Do it",
|
|
shortcutICloudURL: URL(
|
|
string: "https://www.icloud.com/shortcuts/65bf33ba4206484ba78d582eaf1e9c44"
|
|
),
|
|
shortcutName: "Run Me"
|
|
)
|
|
|
|
try store.saveUserSkill(skill)
|
|
|
|
XCTAssertFalse(store.layout.isEnabled(skill.id))
|
|
XCTAssertEqual(store.enable(skill.id), .needsShortcut)
|
|
}
|
|
|
|
func testEditingDisabledTextSkillDoesNotReinstallIt() throws {
|
|
let store = AIAgentSkillLayoutStore(defaults: makeDefaults())
|
|
var skill = AIUserSkill(name: "Custom", prompt: "Do it")
|
|
try store.saveUserSkill(skill)
|
|
store.disable(skill.id)
|
|
|
|
skill.prompt = "Do it differently"
|
|
try store.saveUserSkill(skill)
|
|
|
|
XCTAssertFalse(store.layout.isEnabled(skill.id))
|
|
}
|
|
|
|
func testChangingShortcutLinkDropsConfirmation() throws {
|
|
let store = AIAgentSkillLayoutStore(defaults: makeDefaults())
|
|
let firstURL = URL(string: "https://www.icloud.com/shortcuts/65bf33ba4206484ba78d582eaf1e9c44")!
|
|
let secondURL = URL(string: "https://www.icloud.com/shortcuts/1f4afcf7ee22400cbf84e319d969aadf")!
|
|
var skill = AIUserSkill(
|
|
name: "Custom",
|
|
prompt: "Do it",
|
|
shortcutICloudURL: firstURL,
|
|
shortcutName: "One"
|
|
)
|
|
try store.saveUserSkill(skill)
|
|
XCTAssertEqual(store.confirmShortcutAndEnable(skill.id), .enabled)
|
|
XCTAssertTrue(store.layout.isEnabled(skill.id))
|
|
|
|
skill.shortcutICloudURL = secondURL
|
|
skill.shortcutName = "Two"
|
|
try store.saveUserSkill(skill)
|
|
XCTAssertFalse(store.layout.hasConfirmedShortcut(skill.id))
|
|
XCTAssertFalse(store.layout.isEnabled(skill.id))
|
|
}
|
|
|
|
func testRemovingShortcutLinkKeepsEnabledTextSkill() throws {
|
|
let store = AIAgentSkillLayoutStore(defaults: makeDefaults())
|
|
var skill = AIUserSkill(
|
|
name: "Custom",
|
|
prompt: "Do it",
|
|
shortcutICloudURL: URL(
|
|
string: "https://www.icloud.com/shortcuts/65bf33ba4206484ba78d582eaf1e9c44"
|
|
),
|
|
shortcutName: "Run Me"
|
|
)
|
|
try store.saveUserSkill(skill)
|
|
XCTAssertEqual(store.confirmShortcutAndEnable(skill.id), .enabled)
|
|
|
|
skill.shortcutICloudURL = nil
|
|
try store.saveUserSkill(skill)
|
|
|
|
XCTAssertTrue(store.layout.isEnabled(skill.id))
|
|
XCTAssertFalse(store.layout.hasConfirmedShortcut(skill.id))
|
|
XCTAssertEqual(store.userSkill(id: skill.id)?.asClipboardSkill().kind, .transform)
|
|
}
|
|
|
|
func testAddingShortcutLinkDisablesTextSkillUntilConfirmed() throws {
|
|
let store = AIAgentSkillLayoutStore(defaults: makeDefaults())
|
|
var skill = AIUserSkill(
|
|
name: "Custom",
|
|
prompt: "Do it"
|
|
)
|
|
try store.saveUserSkill(skill)
|
|
XCTAssertEqual(store.enable(skill.id), .alreadyEnabled)
|
|
|
|
skill.shortcutICloudURL = URL(
|
|
string: "https://www.icloud.com/shortcuts/65bf33ba4206484ba78d582eaf1e9c44"
|
|
)
|
|
skill.shortcutName = "Run Me"
|
|
try store.saveUserSkill(skill)
|
|
|
|
XCTAssertFalse(store.layout.isEnabled(skill.id))
|
|
XCTAssertFalse(store.layout.hasConfirmedShortcut(skill.id))
|
|
XCTAssertEqual(store.enable(skill.id), .needsShortcut)
|
|
}
|
|
}
|