Skip to content

Commit 4260e6d

Browse files
committed
Reset timer state even when scale cancel fails
1 parent 162d2bb commit 4260e6d

2 files changed

Lines changed: 21 additions & 2 deletions

File tree

src/views/TimerController.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,11 @@ export class TimerController {
102102
}
103103

104104
async cancelRun(): Promise<void> {
105-
await this.callbacks.resetTimer();
106-
this.resetToIdle();
105+
try {
106+
await this.callbacks.resetTimer();
107+
} finally {
108+
this.resetToIdle();
109+
}
107110
}
108111

109112
resetToIdle(): void {

tests/views/TimerController.test.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,4 +162,20 @@ describe('TimerController', () => {
162162
expect(controller.getElapsedSeconds()).toBe(0);
163163
expect(timerEl.textContent).toBe('0:00');
164164
});
165+
166+
it('cancelRun returns to idle even when the scale reset rejects', async () => {
167+
const callbacks = {
168+
startTimer: vi.fn().mockResolvedValue(undefined),
169+
stopTimer: vi.fn().mockResolvedValue(undefined),
170+
resetTimer: vi.fn().mockResolvedValue(undefined),
171+
};
172+
const timerEl = document.createElement('div');
173+
const timerBtn = document.createElement('button');
174+
const controller = new TimerController({ timerEl, timerBtn }, callbacks);
175+
await controller.handleTimerClick();
176+
callbacks.resetTimer.mockRejectedValueOnce(new Error('ble write failed'));
177+
await expect(controller.cancelRun()).rejects.toThrow('ble write failed');
178+
expect(controller.getElapsedSeconds()).toBe(0);
179+
expect(timerEl.textContent).toBe('0:00');
180+
});
165181
});

0 commit comments

Comments
 (0)