This commit is contained in:
roomote-v0[bot] 2026-05-17 06:18:36 +00:00 committed by GitHub
commit 0f10fd36d2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 30 additions and 21 deletions

View file

@ -458,35 +458,39 @@ describe("Checkpoint functionality", () => {
// Simulate the condition function that runs inside pWaitFor
let warningShown = false
const checkpointTimeoutMs = mockTask.checkpointTimeout * 1000 // 15000ms
const simulateConditionCheck = (elapsedMs: number) => {
// This simulates what happens inside the pWaitFor condition function (lines 85-100)
if (!warningShown && elapsedMs >= 5000) {
// The warning is shown when elapsed time exceeds the configured timeout
if (!warningShown && elapsedMs >= checkpointTimeoutMs) {
warningShown = true
// This is what the actual code does at line 91-94
const provider = mockTask.providerRef.deref()
provider?.postMessageToWebview({
type: "checkpointInitWarning",
checkpointWarning: i18nModule.t("common:errors.wait_checkpoint_long_time", { timeout: 5 }),
checkpointWarning: i18nModule.t("common:errors.wait_checkpoint_long_time", {
timeout: mockTask.checkpointTimeout,
}),
})
}
return !!mockTask.checkpointService && !!mockTask.checkpointService.isInitialized
}
// Test: At 4 seconds, no warning should be sent
expect(simulateConditionCheck(4000)).toBe(false)
// Test: At 14 seconds (just under configured timeout of 15s), no warning should be sent
expect(simulateConditionCheck(14000)).toBe(false)
expect(mockProvider.postMessageToWebview).not.toHaveBeenCalled()
// Test: At 5 seconds, warning should be sent
expect(simulateConditionCheck(5000)).toBe(false)
// Test: At 15 seconds (configured timeout), warning should be sent with configured timeout
expect(simulateConditionCheck(15000)).toBe(false)
expect(mockProvider.postMessageToWebview).toHaveBeenCalledWith({
type: "checkpointInitWarning",
checkpointWarning: "Checkpoint initialization is taking longer than 5 seconds...",
checkpointWarning: "Checkpoint initialization is taking longer than 15 seconds...",
})
// Test: At 6 seconds, warning should not be sent again (warningShown is true)
// Test: At 16 seconds, warning should not be sent again (warningShown is true)
vi.clearAllMocks()
expect(simulateConditionCheck(6000)).toBe(false)
expect(simulateConditionCheck(16000)).toBe(false)
expect(mockProvider.postMessageToWebview).not.toHaveBeenCalled()
})
@ -548,11 +552,16 @@ describe("Checkpoint functionality", () => {
})
})
it("should use WARNING_THRESHOLD_MS constant of 5000ms", () => {
// Verify the warning threshold is 5 seconds by checking the implementation
const WARNING_THRESHOLD_MS = 5000
expect(WARNING_THRESHOLD_MS).toBe(5000)
expect(WARNING_THRESHOLD_MS / 1000).toBe(5) // Used in the i18n call
it("should use configured checkpointTimeout for warning threshold", () => {
// The warning threshold now uses the configured checkpointTimeout value
// This ensures the warning message matches when it actually appears
mockTask.checkpointTimeout = 15
const checkpointTimeoutMs = mockTask.checkpointTimeout * 1000
expect(checkpointTimeoutMs).toBe(15000)
mockTask.checkpointTimeout = 30
const checkpointTimeoutMs30 = mockTask.checkpointTimeout * 1000
expect(checkpointTimeoutMs30).toBe(30000)
})
it("should convert checkpointTimeout to milliseconds", () => {
@ -572,11 +581,11 @@ describe("Checkpoint functionality", () => {
const i18nModule = await import("../../../i18n")
vi.clearAllMocks()
// Test warning message i18n key
const warningMessage = i18nModule.t("common:errors.wait_checkpoint_long_time", { timeout: 5 })
expect(warningMessage).toBe("Checkpoint initialization is taking longer than 5 seconds...")
// Test warning message i18n key - should use configured timeout
const warningMessage = i18nModule.t("common:errors.wait_checkpoint_long_time", { timeout: 15 })
expect(warningMessage).toBe("Checkpoint initialization is taking longer than 15 seconds...")
// Test timeout error message i18n key
// Test timeout error message i18n key - should use configured timeout
const errorMessage = i18nModule.t("common:errors.init_checkpoint_fail_long_time", { timeout: 30 })
expect(errorMessage).toBe("Checkpoint initialization failed after 30 seconds")
})

View file

@ -82,10 +82,10 @@ export async function getCheckpointService(task: Task, { interval = 250 }: { int
() => {
const elapsed = Date.now() - checkpointInitStartTime
// Show warning if we're past the threshold and haven't shown it yet
if (!warningShown && elapsed >= WARNING_THRESHOLD_MS) {
// Show warning if we're past the configured timeout and haven't shown it yet
if (!warningShown && elapsed >= checkpointTimeoutMs) {
warningShown = true
sendCheckpointInitWarn(task, "WAIT_TIMEOUT", WARNING_THRESHOLD_MS / 1000)
sendCheckpointInitWarn(task, "WAIT_TIMEOUT", task.checkpointTimeout)
}
console.log(