fix(stop-continuation): clear stop state for native work-starting commands

This commit is contained in:
YeonGyu-Kim
2026-04-10 18:47:18 +09:00
parent 9532440cb2
commit de156578ea
2 changed files with 129 additions and 0 deletions
+114
View File
@@ -0,0 +1,114 @@
import { describe, expect, mock, test } from "bun:test"
import { createCommandExecuteBeforeHandler } from "./command-execute-before"
describe("createCommandExecuteBeforeHandler", () => {
test("#given stopped session and /ulw-loop #when command.execute.before runs #then clear is called", async () => {
// given
const clear = mock(() => {})
const isStopped = mock(() => true)
const startLoop = mock(() => true)
const handler = createCommandExecuteBeforeHandler({
hooks: {
ralphLoop: {
startLoop,
cancelLoop: mock(() => true),
},
stopContinuationGuard: {
isStopped,
clear,
},
},
})
// when
await handler(
{
command: "ulw-loop",
sessionID: "ses-stopped",
arguments: "Ship feature",
},
{
parts: [],
},
)
// then
expect(startLoop).toHaveBeenCalledTimes(1)
expect(isStopped).toHaveBeenCalledWith("ses-stopped")
expect(clear).toHaveBeenCalledTimes(1)
expect(clear).toHaveBeenCalledWith("ses-stopped")
})
test("#given stopped session and /start-work #when command.execute.before runs #then clear is called", async () => {
// given
const clear = mock(() => {})
const isStopped = mock(() => true)
const startWorkHook = mock(async () => {})
const handler = createCommandExecuteBeforeHandler({
hooks: {
startWork: {
"command.execute.before": startWorkHook,
},
stopContinuationGuard: {
isStopped,
clear,
},
},
})
// when
await handler(
{
command: "start-work",
sessionID: "ses-stopped",
arguments: "",
},
{
parts: [],
},
)
// then
expect(startWorkHook).toHaveBeenCalledTimes(1)
expect(isStopped).toHaveBeenCalledWith("ses-stopped")
expect(clear).toHaveBeenCalledTimes(1)
expect(clear).toHaveBeenCalledWith("ses-stopped")
})
test("#given non-stopped session and /ulw-loop #when command.execute.before runs #then clear is not called", async () => {
// given
const clear = mock(() => {})
const isStopped = mock(() => false)
const startLoop = mock(() => true)
const handler = createCommandExecuteBeforeHandler({
hooks: {
ralphLoop: {
startLoop,
cancelLoop: mock(() => true),
},
stopContinuationGuard: {
isStopped,
clear,
},
},
})
// when
await handler(
{
command: "ulw-loop",
sessionID: "ses-running",
arguments: "Ship feature",
},
{
parts: [],
},
)
// then
expect(startLoop).toHaveBeenCalledTimes(1)
expect(isStopped).toHaveBeenCalledWith("ses-running")
expect(clear).not.toHaveBeenCalled()
})
})