diff --git a/tests/test_today_week_reschedule.py b/tests/test_today_week_reschedule.py index f1a5c3d..3dd76c9 100644 --- a/tests/test_today_week_reschedule.py +++ b/tests/test_today_week_reschedule.py @@ -326,8 +326,9 @@ console.log(JSON.stringify({message,adopted,pending:controller.pending(),remaini assert result["remaining"] == 1 -def test_reschedule_dialog_closes_as_soon_as_a_valid_move_is_confirmed(): - result = run_controller(""" +def run_mounted_confirmation(*, fail_move: bool = False) -> dict: + failure = "true" if fail_move else "false" + scenario = """ const mount=require('./frontend/today-week-reschedule.js').mount; class Element { constructor(){this.listeners={};this.dataset={};this.children=[];this.open=false;this.disabled=false;this.value='';this.textContent='';} @@ -351,8 +352,8 @@ const selectors={ }; const document={hidden:false,addEventListener(){},createElement:()=>new Element()}; const window={addEventListener(){},setTimeout(){}}; -let finishMove; -const move=new Promise(resolve=>{finishMove=resolve;}); +let finishMove,failMove; +const move=new Promise((resolve,reject)=>{finishMove=resolve;failMove=reject;}); const today={revision:4,ids:['active'],estimates:{active:30}}; const weekState={revision:7,offline_snapshot:false,days:[]}; const week={load:async()=>weekState,review:()=>({days:[{ @@ -367,12 +368,29 @@ await selectors['#today-week-reschedule-days'].children[0].emit('click'); const confirming=selectors['#confirm-today-week-reschedule'].emit('click'); await Promise.resolve(); const openWhileSaving=selectors['#today-week-reschedule'].open; -finishMove({today:{revision:5,ids:[],estimates:{}},week:{revision:8,days:[]}}); +if(__FAIL_MOVE__){ + const error=new Error('Move unavailable. Try again.');error.status=500;failMove(error); +}else{ + finishMove({today:{revision:5,ids:[],estimates:{}},week:{revision:8,days:[]}}); +} await confirming; -console.log(JSON.stringify({openWhileSaving,openAfterSaving:selectors['#today-week-reschedule'].open})); -""") +console.log(JSON.stringify({openWhileSaving,openAfterSettled:selectors['#today-week-reschedule'].open})); +""" + return run_controller(scenario.replace("__FAIL_MOVE__", failure)) - assert result == {"openWhileSaving": False, "openAfterSaving": False} + +def test_reschedule_dialog_closes_as_soon_as_a_valid_move_is_confirmed(): + assert run_mounted_confirmation() == { + "openWhileSaving": False, + "openAfterSettled": False, + } + + +def test_reschedule_dialog_reopens_with_retry_state_when_confirm_fails(): + assert run_mounted_confirmation(fail_move=True) == { + "openWhileSaving": False, + "openAfterSettled": True, + } def test_mobile_active_today_reschedule_dialog_is_touch_safe_and_wired_into_release_bundle():