38 lines
2.0 KiB
Python
38 lines
2.0 KiB
Python
import json
|
|
import subprocess
|
|
from pathlib import Path
|
|
|
|
|
|
MODULE = Path(__file__).parents[1] / "frontend" / "progressive-my-work.js"
|
|
MY_WORK = Path(__file__).parents[1] / "frontend" / "my-work.js"
|
|
|
|
|
|
def test_progressive_my_work_renders_and_filters_assigned_work_before_full_workspace():
|
|
harness = f"""
|
|
const fs=require('fs'); const vm=require('vm');
|
|
const buttons=[
|
|
{{dataset:{{workFilter:'all'}},attrs:{{}},addEventListener(n,cb){{this.cb=cb;}},setAttribute(n,v){{this.attrs[n]=v;}}}},
|
|
{{dataset:{{workFilter:'issue'}},attrs:{{}},addEventListener(n,cb){{this.cb=cb;}},setAttribute(n,v){{this.attrs[n]=v;}}}},
|
|
];
|
|
const list={{innerHTML:''}}; const status={{textContent:''}};
|
|
const document={{querySelector:s=>s==='#my-work-list'?list:s==='#my-work-status'?status:null,querySelectorAll:()=>buttons}};
|
|
const context={{module:{{exports:{{}}}},exports:{{}},console,URL,document}}; vm.createContext(context);
|
|
vm.runInContext(fs.readFileSync({json.dumps(str(MY_WORK))},'utf8'),context);
|
|
context.buildMyWork=context.module.exports; context.module={{exports:{{}}}};
|
|
vm.runInContext(fs.readFileSync({json.dumps(str(MODULE))},'utf8'),context);
|
|
const createProgressiveMyWork=context.module.exports;
|
|
const flow=createProgressiveMyWork({{document,fetchSnapshot:async()=>({{
|
|
user:{{login:'timmy'}},issues:[{{number:7,title:'Fix mobile queue',repository:'stackchain/dashboard',assignees:['timmy'],url:'https://forge.example/issues/7'}}],pull_requests:[]
|
|
}})}});
|
|
(async()=>{{
|
|
await flow.start(); const rendered=list.innerHTML;
|
|
buttons[1].cb();
|
|
console.log(JSON.stringify({{status:status.textContent,rendered,pressed:buttons.map(b=>b.attrs['aria-pressed'])}}));
|
|
}})().catch(e=>{{console.error(e);process.exit(1);}});
|
|
"""
|
|
result = subprocess.run(["node", "-e", harness], check=True, capture_output=True, text=True)
|
|
state = json.loads(result.stdout)
|
|
assert state["status"] == "1 assigned work item ready."
|
|
assert "Fix mobile queue" in state["rendered"]
|
|
assert 'href="https://forge.example/issues/7"' in state["rendered"]
|
|
assert state["pressed"] == ["false", "true"] |