36 lines
1.4 KiB
Python
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
|