// Copyright 2020 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only

import { assert } from 'chai';
import { useFakeTimers } from 'sinon';

import { sleep } from '../../util/sleep.std.ts';

describe('sleep', () => {
  beforeEach(function (this: Mocha.Context) {
    // This isn't a hook.
    this.clock = useFakeTimers();
  });

  afterEach(function (this: Mocha.Context) {
    this.clock.restore();
  });

  it('returns a promise that resolves after the specified number of milliseconds', async function (this: Mocha.Context) {
    let isDone = false;

    void (async () => {
      await sleep(123);
      isDone = true;
    })();

    assert.isFalse(isDone);

    await this.clock.tickAsync(100);
    assert.isFalse(isDone);

    await this.clock.tickAsync(25);
    assert.isTrue(isDone);
  });
});
