diff --git a/app/javascript/packages/countdown-element/index.spec.ts b/app/javascript/packages/countdown-element/index.spec.ts index 939b87f6dfd..5666ce65051 100644 --- a/app/javascript/packages/countdown-element/index.spec.ts +++ b/app/javascript/packages/countdown-element/index.spec.ts @@ -102,4 +102,17 @@ describe('CountdownElement', () => { expect(element.textContent).to.equal('0 minutes and 2 seconds'); }); + + describe('#start', () => { + it('is idempotent', () => { + const element = createElement({ startImmediately: 'false' }); + + sinon.spy(element, 'setTimeRemaining'); + + element.start(); + element.start(); + + expect(clock.countTimers()).to.equal(1); + }); + }); }); diff --git a/app/javascript/packages/countdown-element/index.ts b/app/javascript/packages/countdown-element/index.ts index e42fdc7d6e5..a107fc05540 100644 --- a/app/javascript/packages/countdown-element/index.ts +++ b/app/javascript/packages/countdown-element/index.ts @@ -42,6 +42,7 @@ export class CountdownElement extends HTMLElement { } start(): void { + this.stop(); this.setTimeRemaining(); this.#pollIntervalId = window.setInterval(() => this.setTimeRemaining(), this.updateInterval); }