修复新闻工作台换号联动流程

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
LongtailandCopilot committed 2026-11-01 15:11:41 +08:00
1 parent 7ab0bc3485
commit fd9474d0e1
15 files changed
+203 -34

No files matched your search

+20 -1
View File
@@ -12,7 +12,7 @@ test('终止后较早的 heartbeat 响应不能恢复流程',async()=>{
requests[1].onload({status:200,responseText:JSON.stringify({running:false,epoch:2})});await stop;
});
test('悬浮窗跳过按钮发送页面事件并防止忙碌时重复点击',()=>{
test('悬浮窗开始、暂停、跳过与开始响应竞态',async()=>{
const handlers=new Map(),elements=new Map(),emitted=[],requests=[];
const element=()=>({style:{},before(child){elements.set(child.id,child);}});
for(const id of ['halt','port','token','save','status'])elements.set(id,element());
@@ -33,4 +33,23 @@ test('悬浮窗跳过按钮发送页面事件并防止忙碌时重复点击',()=
doc.dispatchEvent(new Event('dww11:local-request',{detail:JSON.stringify({id:'skip-test',route:'skip',body:{id:'job'}})}));
assert.equal(requests[0].url,'http://127.0.0.1:8770/bridge/skip');
requests[0].onload({status:200,responseText:'{"ok":true}'});
const start=elements.get('start'),pause=elements.get('pause');
assert.equal(start.textContent,'开始 / 继续');assert.equal(pause.textContent,'暂停');
let started=start.onclick();assert.equal(start.disabled,true);
assert.ok(requests.at(-1).url.endsWith('/bridge/start'));
requests.at(-1).onload({status:200,responseText:'{"running":true}'});await started;
doc.dispatchEvent(new Event('dww11:run-state',{detail:true}));assert.equal(start.disabled,true);
const paused=pause.onclick();assert.equal(emitted.at(-1).type,'dww11:auto-stop');
assert.ok(requests.at(-1).url.endsWith('/bridge/pause'));
requests.at(-1).onload({status:200,responseText:'{"running":false}'});await paused;
doc.dispatchEvent(new Event('dww11:run-state',{detail:false}));assert.equal(start.disabled,false);
// Pause while Start is still in flight: a late Start must be followed by Pause.
started=start.onclick();const lateStart=requests.at(-1);
const pausing=pause.onclick();requests.at(-1).onload({status:200,responseText:'{"running":false}'});await pausing;
lateStart.onload({status:200,responseText:'{"running":true}'});
await new Promise(resolve=>setImmediate(resolve));
assert.ok(requests.at(-1).url.endsWith('/bridge/pause'));
requests.at(-1).onload({status:200,responseText:'{"running":false}'});await started;
assert.match(elements.get('status').textContent,/已暂停/);
});