mirror of
https://github.com/hanzoai/bot.git
synced 2026-10-30 17:24:26 +00:00
Squash merge of 1,462 upstream commits with openclaw→hanzo-bot naming transforms applied. Conflicts resolved favoring our main branch to preserve existing customizations. Key upstream additions: - iOS Security Stack (concurrency locks, runtime guards, TTS fallback) - Discord CDN hostname allowlisting for SSRF protection - Discord mention handling improvements - Various bug fixes and stability improvements
71 lines
2.4 KiB
Swift
71 lines
2.4 KiB
Swift
import HanzoBotProtocol
|
|
import Foundation
|
|
import BotProtocol
|
|
import Testing
|
|
@testable import HanzoBot
|
|
|
|
@Suite(.serialized) struct VoiceWakeGlobalSettingsSyncTests {
|
|
@Test func appliesVoiceWakeChangedEventToAppState() async {
|
|
let previous = await MainActor.run { AppStateStore.shared.swabbleTriggerWords }
|
|
|
|
await MainActor.run {
|
|
AppStateStore.shared.applyGlobalVoiceWakeTriggers(["before"])
|
|
}
|
|
|
|
let payload = HanzoBotProtocol.AnyCodable(["triggers": ["hanzo-bot", "computer"]])
|
|
let evt = EventFrame(
|
|
type: "event",
|
|
event: "voicewake.changed",
|
|
payload: payload,
|
|
seq: nil,
|
|
stateversion: nil)
|
|
}
|
|
|
|
private func applyTriggersAndCapturePrevious(_ triggers: [String]) async -> [String] {
|
|
let previous = await MainActor.run { AppStateStore.shared.swabbleTriggerWords }
|
|
await MainActor.run {
|
|
AppStateStore.shared.applyGlobalVoiceWakeTriggers(triggers)
|
|
}
|
|
return previous
|
|
}
|
|
|
|
@Test func appliesVoiceWakeChangedEventToAppState() async {
|
|
let previous = await applyTriggersAndCapturePrevious(["before"])
|
|
let evt = voiceWakeChangedEvent(payload: BotProtocol.AnyCodable(["triggers": ["@hanzo/bot", "computer"]]))
|
|
|
|
await VoiceWakeGlobalSettingsSync.shared.handle(push: .event(evt))
|
|
|
|
let updated = await MainActor.run { AppStateStore.shared.swabbleTriggerWords }
|
|
#expect(updated == ["hanzo-bot", "computer"])
|
|
|
|
await MainActor.run {
|
|
AppStateStore.shared.applyGlobalVoiceWakeTriggers(previous)
|
|
}
|
|
}
|
|
|
|
@Test func ignoresVoiceWakeChangedEventWithInvalidPayload() async {
|
|
let previous = await MainActor.run { AppStateStore.shared.swabbleTriggerWords }
|
|
|
|
await MainActor.run {
|
|
AppStateStore.shared.applyGlobalVoiceWakeTriggers(["before"])
|
|
}
|
|
|
|
let payload = HanzoBotProtocol.AnyCodable(["unexpected": 123])
|
|
let evt = EventFrame(
|
|
type: "event",
|
|
event: "voicewake.changed",
|
|
payload: payload,
|
|
seq: nil,
|
|
stateversion: nil)
|
|
|
|
await VoiceWakeGlobalSettingsSync.shared.handle(push: .event(evt))
|
|
|
|
let updated = await MainActor.run { AppStateStore.shared.swabbleTriggerWords }
|
|
#expect(updated == ["before"])
|
|
|
|
await MainActor.run {
|
|
AppStateStore.shared.applyGlobalVoiceWakeTriggers(previous)
|
|
}
|
|
}
|
|
}
|