mirror of
https://github.com/openclaw/openclaw.git
synced 2026-06-24 05:59:33 +00:00
Merged via squash.
Prepared head SHA: e7f7db3cb5
Co-authored-by: ngutman <1540134+ngutman@users.noreply.github.com>
Co-authored-by: ngutman <1540134+ngutman@users.noreply.github.com>
Reviewed-by: @ngutman
99 lines
3.3 KiB
Swift
99 lines
3.3 KiB
Swift
import Testing
|
|
@testable import OpenClaw
|
|
|
|
@Suite struct TalkProStateTests {
|
|
@Test func disabledTalkWithoutLoadedConfigCanStartAndRetryLoad() {
|
|
let state = TalkProState(
|
|
gatewayConnected: true,
|
|
isDemoMode: false,
|
|
isEnabled: false,
|
|
statusText: "Offline",
|
|
isConfigLoaded: false,
|
|
isListening: false,
|
|
isSpeaking: false,
|
|
isUserSpeechDetected: false,
|
|
permissionState: .unknown)
|
|
|
|
#expect(state.title == "Voice config unavailable")
|
|
#expect(state.chipText == "Config")
|
|
#expect(state.primaryAction == .start)
|
|
#expect(state.primaryButtonTitle == "Start Talk")
|
|
#expect(state.waveformMode(micLevel: 0.8) == .still)
|
|
}
|
|
|
|
@Test func enabledTalkWithoutLoadedConfigCanBeStopped() {
|
|
let state = TalkProState(
|
|
gatewayConnected: true,
|
|
isDemoMode: false,
|
|
isEnabled: true,
|
|
statusText: "Offline",
|
|
isConfigLoaded: false,
|
|
isListening: false,
|
|
isSpeaking: false,
|
|
isUserSpeechDetected: false,
|
|
permissionState: .unknown)
|
|
|
|
#expect(state.title == "Voice config unavailable")
|
|
#expect(state.chipText == "Config")
|
|
#expect(state.primaryAction == .stop)
|
|
#expect(state.primaryButtonTitle == "Stop Talk")
|
|
#expect(state.waveformMode(micLevel: 0.8) == .still)
|
|
}
|
|
|
|
@Test func enabledTalkWithLoadedConfigCanBeStopped() {
|
|
let state = TalkProState(
|
|
gatewayConnected: true,
|
|
isDemoMode: false,
|
|
isEnabled: true,
|
|
statusText: "Ready",
|
|
isConfigLoaded: true,
|
|
isListening: false,
|
|
isSpeaking: false,
|
|
isUserSpeechDetected: false,
|
|
permissionState: .ready)
|
|
|
|
#expect(state.title == "Ready to talk")
|
|
#expect(state.chipText == "Ready")
|
|
#expect(state.primaryAction == .stop)
|
|
}
|
|
|
|
@Test func missingScopeTakesPriorityOverUnloadedConfig() {
|
|
let state = TalkProState(
|
|
gatewayConnected: true,
|
|
isDemoMode: false,
|
|
isEnabled: false,
|
|
statusText: "Offline",
|
|
isConfigLoaded: false,
|
|
isListening: false,
|
|
isSpeaking: false,
|
|
isUserSpeechDetected: false,
|
|
permissionState: .missingScope("operator.talk.secrets"))
|
|
|
|
#expect(state.title == "Gateway permission required")
|
|
#expect(state.chipText == "Needs approval")
|
|
#expect(state.primaryAction == .enablePermission)
|
|
#expect(state.primaryButtonTitle == "Enable Talk")
|
|
}
|
|
|
|
@Test func demoModeKeepsTalkDisabled() {
|
|
let state = TalkProState(
|
|
gatewayConnected: true,
|
|
isDemoMode: true,
|
|
isEnabled: true,
|
|
statusText: "Ready",
|
|
isConfigLoaded: true,
|
|
isListening: true,
|
|
isSpeaking: true,
|
|
isUserSpeechDetected: true,
|
|
permissionState: .ready)
|
|
|
|
#expect(state.title == "Demo mode only")
|
|
#expect(state.chipText == "Demo")
|
|
#expect(state.icon == "waveform.slash")
|
|
#expect(state.primaryAction == .waiting)
|
|
#expect(state.primaryButtonTitle == "Demo Mode Only")
|
|
#expect(state.primaryButtonIcon == "lock.fill")
|
|
#expect(state.waveformMode(micLevel: 0.8) == .still)
|
|
}
|
|
}
|