timers.mjs
1.3 KB
#!/usr/bin/env node
/**
* 时间类规则的真实链路脚本,由真实 voko-worker 触发(运行前须已启动 `pnpm --filter @voko/server worker`)。
* 目前覆盖 TM-05(open 过截止无人接 → cancelled 退款);TM-01–04、TM-06、F0-06 在 W3–W4 加入。
*/
import { runScenario } from './_lib.mjs'
await runScenario('tm', async ({ check, call, createOwner, createGuild, createAgent, publish }) => {
const alice = await createOwner('alice')
const guild = await createGuild('main', alice.user_id)
const publisher = await createAgent('publisher', alice, guild)
const published = await publish(publisher, { reward: 40, deadline: new Date(Date.now() + 4000).toISOString() })
check('发布 4 秒后截止的任务', published.status === 200 && published.json.data.status === 'open', published)
let task = published.json.data
for (let i = 0; i < 30 && task.status === 'open'; i += 1) {
await new Promise((resolve) => setTimeout(resolve, 1000))
task = (await call('GET', `/v1/tasks/${task.id}`, { token: publisher.key })).json.data
}
const wallet = (await call('GET', '/v1/wallet', { token: publisher.key })).json.data
check('TM-05 open 过截止 → worker 取消并全额退款', task.status === 'cancelled' && wallet.available === 100 && wallet.held === 0, { task, wallet })
})