import { createFakeDateClass, DEFAULT_ARGS, useRealDate } from './fake_date';

describe('spec/helpers/fake_date', () => {
  describe('createFakeDateClass', () => {
    let FakeDate;

    beforeAll(() => {
      useRealDate();
    });

    beforeEach(() => {
      FakeDate = createFakeDateClass(DEFAULT_ARGS);
    });

    it('should use default args', () => {
      expect(new FakeDate()).toMatchInlineSnapshot(`2020-07-06T00:00:00.000Z`);
    });

    it('should use default args when called as a function', () => {
      expect(FakeDate()).toMatchInlineSnapshot(
        `"Mon Jul 06 2020 00:00:00 GMT+0000 (Greenwich Mean Time)"`,
      );
    });

    it('should have deterministic now()', () => {
      expect(FakeDate.now()).toMatchInlineSnapshot(`1593993600000`);
    });

    it('should be instanceof Date', () => {
      expect(new FakeDate()).toBeInstanceOf(Date);
    });

    it('should be instanceof self', () => {
      expect(new FakeDate()).toBeInstanceOf(FakeDate);
    });
  });
});
