52 lines
1.6 KiB
Python
52 lines
1.6 KiB
Python
import json
|
|
import subprocess
|
|
from pathlib import Path
|
|
|
|
|
|
SOURCE = Path(__file__).parents[1] / "frontend" / "today-timer.js"
|
|
|
|
|
|
def test_timer_adopts_claimed_elapsed_time():
|
|
script = SOURCE.read_text() + r"""
|
|
const values = new Map();
|
|
const storage = {
|
|
getItem:key=>values.get(key)||null,
|
|
setItem:(key,value)=>values.set(key,value),
|
|
};
|
|
let now = 100000;
|
|
const timer = createTodayTimer({storage, getLogin:()=> 'timmy', now:()=>now});
|
|
const adopted = timer.adopt('issue:r:42:', 90000, true);
|
|
now = 105000;
|
|
process.stdout.write(JSON.stringify({adopted, snapshot:timer.snapshot()}));
|
|
"""
|
|
completed = subprocess.run(["node", "-e", script], check=True, capture_output=True, text=True)
|
|
result = json.loads(completed.stdout)
|
|
|
|
assert result == {
|
|
"adopted": True,
|
|
"snapshot": {"identity": "issue:r:42:", "elapsed_ms": 95000, "running": True},
|
|
}
|
|
|
|
|
|
def test_timer_reports_durable_changes_for_session_sync():
|
|
script = SOURCE.read_text() + r"""
|
|
const values = new Map();
|
|
const storage = {getItem:key=>values.get(key)||null,setItem:(key,value)=>values.set(key,value)};
|
|
let now = 0;
|
|
const changes = [];
|
|
const timer = createTodayTimer({
|
|
storage, getLogin:()=> 'timmy', now:()=>now,
|
|
onChange:snapshot=>changes.push(snapshot),
|
|
});
|
|
timer.activate('issue:r:42:');
|
|
now = 5000;
|
|
timer.pause();
|
|
process.stdout.write(JSON.stringify(changes));
|
|
"""
|
|
completed = subprocess.run(["node", "-e", script], check=True, capture_output=True, text=True)
|
|
|
|
assert json.loads(completed.stdout) == [
|
|
{"identity": "issue:r:42:", "elapsed_ms": 0, "running": True},
|
|
{"identity": "issue:r:42:", "elapsed_ms": 5000, "running": False},
|
|
]
|