stackchain-dashboard/tests/test_offline_issue_close.py
timmy c451cd0bcb
All checks were successful
CI / lint (pull_request) Successful in 43s
CI / build-release (pull_request) Successful in 4s
CI / release-candidate (pull_request) Has been skipped
feat: queue offline issue closure and continue Today (#427)
2026-08-09 21:26:23 +00:00

36 lines
1.4 KiB
Python

import json
import subprocess
from pathlib import Path
OFFLINE_CLOSE = Path(__file__).parents[1] / "frontend" / "offline-issue-close.js"
def run_node(script: str):
result = subprocess.run(["node", "-e", script], check=True, capture_output=True, text=True)
return json.loads(result.stdout)
def test_offline_issue_close_waits_for_durable_admission_before_advancing_today():
script = f"""
const createOfflineIssueClose = require({json.dumps(str(OFFLINE_CLOSE))});
const events=[]; let release;
const gate=new Promise(resolve=>release=resolve);
const close=createOfflineIssueClose({{
enqueueDurably:async message=>{{events.push('admit');await gate;events.push('durable');return {{item:message,background:true}};}},
completeToday:item=>{{events.push('complete:' + item.number);return true;}},
}});
const item={{kind:'issue',repository:'stackchain/dashboard',number:27}};
const pending=close(item).then(result=>{{events.push('resolved');return result;}});
Promise.resolve().then(async()=>{{
const before=events.slice();release();const result=await pending;
process.stdout.write(JSON.stringify({{before,events,result}}));
}});
"""
output = run_node(script)
assert output["before"] == ["admit"]
assert output["events"] == ["admit", "durable", "complete:27", "resolved"]
assert output["result"]["advanced"] is True
assert output["result"]["admission"]["background"] is True