162 lines
4.8 KiB
Swift
162 lines
4.8 KiB
Swift
import SwiftUI
|
|
import Testing
|
|
@testable import Clawdbot
|
|
|
|
@Suite(.serialized)
|
|
@MainActor
|
|
struct SettingsViewSmokeTests {
|
|
@Test func cronSettingsBuildsBody() {
|
|
let store = CronJobsStore(isPreview: true)
|
|
store.schedulerEnabled = false
|
|
store.schedulerStorePath = "/tmp/clawdbot-cron-store.json"
|
|
|
|
let job1 = CronJob(
|
|
id: "job-1",
|
|
name: " Morning Check-in ",
|
|
description: nil,
|
|
enabled: true,
|
|
createdAtMs: 1_700_000_000_000,
|
|
updatedAtMs: 1_700_000_100_000,
|
|
schedule: .cron(expr: "0 8 * * *", tz: "UTC"),
|
|
sessionTarget: .main,
|
|
wakeMode: .now,
|
|
payload: .systemEvent(text: "ping"),
|
|
isolation: nil,
|
|
state: CronJobState(
|
|
nextRunAtMs: 1_700_000_200_000,
|
|
runningAtMs: nil,
|
|
lastRunAtMs: 1_700_000_050_000,
|
|
lastStatus: "ok",
|
|
lastError: nil,
|
|
lastDurationMs: 123))
|
|
|
|
let job2 = CronJob(
|
|
id: "job-2",
|
|
name: "",
|
|
description: nil,
|
|
enabled: false,
|
|
createdAtMs: 1_700_000_000_000,
|
|
updatedAtMs: 1_700_000_100_000,
|
|
schedule: .every(everyMs: 30000, anchorMs: nil),
|
|
sessionTarget: .isolated,
|
|
wakeMode: .nextHeartbeat,
|
|
payload: .agentTurn(
|
|
message: "hello",
|
|
thinking: "low",
|
|
timeoutSeconds: 30,
|
|
deliver: true,
|
|
provider: "sms",
|
|
to: "+15551234567",
|
|
bestEffortDeliver: true),
|
|
isolation: CronIsolation(postToMainPrefix: "[cron] "),
|
|
state: CronJobState(
|
|
nextRunAtMs: nil,
|
|
runningAtMs: nil,
|
|
lastRunAtMs: nil,
|
|
lastStatus: nil,
|
|
lastError: nil,
|
|
lastDurationMs: nil))
|
|
|
|
store.jobs = [job1, job2]
|
|
store.selectedJobId = job1.id
|
|
store.runEntries = [
|
|
CronRunLogEntry(
|
|
ts: 1_700_000_050_000,
|
|
jobId: job1.id,
|
|
action: "finished",
|
|
status: "ok",
|
|
error: nil,
|
|
summary: "ok",
|
|
runAtMs: 1_700_000_050_000,
|
|
durationMs: 123,
|
|
nextRunAtMs: 1_700_000_200_000),
|
|
]
|
|
|
|
let view = CronSettings(store: store)
|
|
_ = view.body
|
|
}
|
|
|
|
@Test func cronSettingsExercisesPrivateViews() {
|
|
CronSettings.exerciseForTesting()
|
|
}
|
|
|
|
@Test func configSettingsBuildsBody() {
|
|
let view = ConfigSettings()
|
|
_ = view.body
|
|
}
|
|
|
|
@Test func debugSettingsBuildsBody() {
|
|
let view = DebugSettings()
|
|
_ = view.body
|
|
}
|
|
|
|
@Test func generalSettingsBuildsBody() {
|
|
let state = AppState(preview: true)
|
|
let view = GeneralSettings(state: state)
|
|
_ = view.body
|
|
}
|
|
|
|
@Test func generalSettingsExercisesBranches() {
|
|
GeneralSettings.exerciseForTesting()
|
|
}
|
|
|
|
@Test func sessionsSettingsBuildsBody() {
|
|
let view = SessionsSettings(rows: SessionRow.previewRows, isPreview: true)
|
|
_ = view.body
|
|
}
|
|
|
|
@Test func instancesSettingsBuildsBody() {
|
|
let store = InstancesStore(isPreview: true)
|
|
store.instances = [
|
|
InstanceInfo(
|
|
id: "local",
|
|
host: "this-mac",
|
|
ip: "127.0.0.1",
|
|
version: "1.0",
|
|
platform: "macos 15.0",
|
|
deviceFamily: "Mac",
|
|
modelIdentifier: "MacPreview",
|
|
lastInputSeconds: 12,
|
|
mode: "local",
|
|
reason: "test",
|
|
text: "test instance",
|
|
ts: Date().timeIntervalSince1970 * 1000),
|
|
]
|
|
let view = InstancesSettings(store: store)
|
|
_ = view.body
|
|
}
|
|
|
|
@Test func permissionsSettingsBuildsBody() {
|
|
let view = PermissionsSettings(
|
|
status: [
|
|
.notifications: true,
|
|
.screenRecording: false,
|
|
],
|
|
refresh: {},
|
|
showOnboarding: {})
|
|
_ = view.body
|
|
}
|
|
|
|
@Test func settingsRootViewBuildsBody() {
|
|
let state = AppState(preview: true)
|
|
let view = SettingsRootView(state: state, updater: nil, initialTab: .general)
|
|
_ = view.body
|
|
}
|
|
|
|
@Test func aboutSettingsBuildsBody() {
|
|
let view = AboutSettings(updater: nil)
|
|
_ = view.body
|
|
}
|
|
|
|
@Test func voiceWakeSettingsBuildsBody() {
|
|
let state = AppState(preview: true)
|
|
let view = VoiceWakeSettings(state: state, isActive: false)
|
|
_ = view.body
|
|
}
|
|
|
|
@Test func skillsSettingsBuildsBody() {
|
|
let view = SkillsSettings(state: .preview)
|
|
_ = view.body
|
|
}
|
|
}
|