import { timeIntervalInWords } from '~/lib/utils/datetime_utility';

(() => {
  describe('Date time utils', () => {
    describe('timeFor', () => {
      it('returns `past due` when in past', () => {
        const date = new Date();
        date.setFullYear(date.getFullYear() - 1);

        expect(
          gl.utils.timeFor(date),
        ).toBe('Past due');
      });

      it('returns remaining time when in the future', () => {
        const date = new Date();
        date.setFullYear(date.getFullYear() + 1);

        // Add a day to prevent a transient error. If date is even 1 second
        // short of a full year, timeFor will return '11 months remaining'
        date.setDate(date.getDate() + 1);

        expect(
          gl.utils.timeFor(date),
        ).toBe('1 year remaining');
      });
    });

    describe('get day name', () => {
      it('should return Sunday', () => {
        const day = gl.utils.getDayName(new Date('07/17/2016'));
        expect(day).toBe('Sunday');
      });

      it('should return Monday', () => {
        const day = gl.utils.getDayName(new Date('07/18/2016'));
        expect(day).toBe('Monday');
      });

      it('should return Tuesday', () => {
        const day = gl.utils.getDayName(new Date('07/19/2016'));
        expect(day).toBe('Tuesday');
      });

      it('should return Wednesday', () => {
        const day = gl.utils.getDayName(new Date('07/20/2016'));
        expect(day).toBe('Wednesday');
      });

      it('should return Thursday', () => {
        const day = gl.utils.getDayName(new Date('07/21/2016'));
        expect(day).toBe('Thursday');
      });

      it('should return Friday', () => {
        const day = gl.utils.getDayName(new Date('07/22/2016'));
        expect(day).toBe('Friday');
      });

      it('should return Saturday', () => {
        const day = gl.utils.getDayName(new Date('07/23/2016'));
        expect(day).toBe('Saturday');
      });
    });

    describe('get day difference', () => {
      it('should return 7', () => {
        const firstDay = new Date('07/01/2016');
        const secondDay = new Date('07/08/2016');
        const difference = gl.utils.getDayDifference(firstDay, secondDay);
        expect(difference).toBe(7);
      });

      it('should return 31', () => {
        const firstDay = new Date('07/01/2016');
        const secondDay = new Date('08/01/2016');
        const difference = gl.utils.getDayDifference(firstDay, secondDay);
        expect(difference).toBe(31);
      });

      it('should return 365', () => {
        const firstDay = new Date('07/02/2015');
        const secondDay = new Date('07/01/2016');
        const difference = gl.utils.getDayDifference(firstDay, secondDay);
        expect(difference).toBe(365);
      });
    });
  });

  describe('timeIntervalInWords', () => {
    it('should return string with number of minutes and seconds', () => {
      expect(timeIntervalInWords(9.54)).toEqual('9 seconds');
      expect(timeIntervalInWords(1)).toEqual('1 second');
      expect(timeIntervalInWords(200)).toEqual('3 minutes 20 seconds');
      expect(timeIntervalInWords(6008)).toEqual('100 minutes 8 seconds');
    });
  });
})();
