Preserve timed break when active work reopens
This commit is contained in:
parent
156d4b0ffc
commit
870edda123
|
|
@ -114,7 +114,8 @@ function createTodayTimer({ storage, getLogin, now = () => Date.now(), onChange
|
||||||
activate(identity) {
|
activate(identity) {
|
||||||
if (!key() || typeof identity !== 'string' || !identity) return false;
|
if (!key() || typeof identity !== 'string' || !identity) return false;
|
||||||
const state = read();
|
const state = read();
|
||||||
if (state.active_identity === identity && state.entries[identity]?.running) return true;
|
if (state.active_identity === identity &&
|
||||||
|
(state.entries[identity]?.running || validBreak(state)?.identity === identity)) return true;
|
||||||
settle(state);
|
settle(state);
|
||||||
state.active_identity = identity;
|
state.active_identity = identity;
|
||||||
const entry = state.entries[identity] || { elapsed_ms:0, started_at:null, running:false };
|
const entry = state.entries[identity] || { elapsed_ms:0, started_at:null, running:false };
|
||||||
|
|
|
||||||
|
|
@ -65,6 +65,34 @@ process.stdout.write(JSON.stringify(timer.snapshot()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def test_reactivating_the_active_item_during_reload_preserves_its_timed_break():
|
||||||
|
script = TIMER.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});
|
||||||
|
timer.activate('issue:r:42:');
|
||||||
|
timer.startBreak(5);
|
||||||
|
const reopened = timer.activate('issue:r:42:');
|
||||||
|
process.stdout.write(JSON.stringify({reopened,snapshot:timer.snapshot(),pending:timer.breakSnapshot()}));
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert run_node(script) == {
|
||||||
|
"reopened": True,
|
||||||
|
"snapshot": {
|
||||||
|
"identity": "issue:r:42:",
|
||||||
|
"elapsed_ms": 0,
|
||||||
|
"running": False,
|
||||||
|
"break_deadline_at": 400_000,
|
||||||
|
},
|
||||||
|
"pending": {
|
||||||
|
"identity": "issue:r:42:",
|
||||||
|
"deadline_at": 400_000,
|
||||||
|
"expired": False,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def test_break_expiry_never_restarts_time_and_resume_is_explicit_and_idempotent():
|
def test_break_expiry_never_restarts_time_and_resume_is_explicit_and_idempotent():
|
||||||
script = TIMER.read_text() + r"""
|
script = TIMER.read_text() + r"""
|
||||||
const values = new Map();
|
const values = new Map();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user