94 lines
3.0 KiB
Swift
94 lines
3.0 KiB
Swift
import SwiftUI
|
|
import Testing
|
|
@testable import Clawdbot
|
|
|
|
@Suite(.serialized)
|
|
@MainActor
|
|
struct CronJobEditorSmokeTests {
|
|
@Test func statusPillBuildsBody() {
|
|
_ = StatusPill(text: "ok", tint: .green).body
|
|
_ = StatusPill(text: "disabled", tint: .secondary).body
|
|
}
|
|
|
|
@Test func cronJobEditorBuildsBodyForNewJob() {
|
|
let channelsStore = ChannelsStore(isPreview: true)
|
|
let view = CronJobEditor(
|
|
job: nil,
|
|
isSaving: .constant(false),
|
|
error: .constant(nil),
|
|
channelsStore: channelsStore,
|
|
onCancel: {},
|
|
onSave: { _ in })
|
|
_ = view.body
|
|
}
|
|
|
|
@Test func cronJobEditorBuildsBodyForExistingJob() {
|
|
let channelsStore = ChannelsStore(isPreview: true)
|
|
let job = CronJob(
|
|
id: "job-1",
|
|
agentId: "ops",
|
|
name: "Daily summary",
|
|
description: nil,
|
|
enabled: true,
|
|
deleteAfterRun: nil,
|
|
createdAtMs: 1_700_000_000_000,
|
|
updatedAtMs: 1_700_000_000_000,
|
|
schedule: .every(everyMs: 3_600_000, anchorMs: 1_700_000_000_000),
|
|
sessionTarget: .isolated,
|
|
wakeMode: .nextHeartbeat,
|
|
payload: .agentTurn(
|
|
message: "Summarize the last day",
|
|
thinking: "low",
|
|
timeoutSeconds: 120,
|
|
deliver: true,
|
|
channel: "whatsapp",
|
|
to: "+15551234567",
|
|
bestEffortDeliver: true),
|
|
isolation: CronIsolation(postToMainPrefix: "Cron"),
|
|
state: CronJobState(
|
|
nextRunAtMs: 1_700_000_100_000,
|
|
runningAtMs: nil,
|
|
lastRunAtMs: 1_700_000_050_000,
|
|
lastStatus: "ok",
|
|
lastError: nil,
|
|
lastDurationMs: 1000))
|
|
|
|
let view = CronJobEditor(
|
|
job: job,
|
|
isSaving: .constant(false),
|
|
error: .constant(nil),
|
|
channelsStore: channelsStore,
|
|
onCancel: {},
|
|
onSave: { _ in })
|
|
_ = view.body
|
|
}
|
|
|
|
@Test func cronJobEditorExercisesBuilders() {
|
|
let channelsStore = ChannelsStore(isPreview: true)
|
|
var view = CronJobEditor(
|
|
job: nil,
|
|
isSaving: .constant(false),
|
|
error: .constant(nil),
|
|
channelsStore: channelsStore,
|
|
onCancel: {},
|
|
onSave: { _ in })
|
|
view.exerciseForTesting()
|
|
}
|
|
|
|
@Test func cronJobEditorIncludesDeleteAfterRunForAtSchedule() throws {
|
|
let channelsStore = ChannelsStore(isPreview: true)
|
|
let view = CronJobEditor(
|
|
job: nil,
|
|
isSaving: .constant(false),
|
|
error: .constant(nil),
|
|
channelsStore: channelsStore,
|
|
onCancel: {},
|
|
onSave: { _ in })
|
|
|
|
var root: [String: Any] = [:]
|
|
view.applyDeleteAfterRun(to: &root, scheduleKind: CronJobEditor.ScheduleKind.at, deleteAfterRun: true)
|
|
let raw = root["deleteAfterRun"] as? Bool
|
|
#expect(raw == true)
|
|
}
|
|
}
|