// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import {assert} from 'chai';
import {FORMATTER, MS_PER_MONTH, standardTime,
  relativeTime} from './chops-timestamp-helpers.js';
import sinon from 'sinon';

// The formatted date strings differ based on time zone and browser, so we can't
// use static strings for testing. We can't stub out the format method because
// it's native code and can't be modified. So just use the FORMATTER object.

let clock;

describe('chops-timestamp-helpers', () => {
  beforeEach(() => {
    // Set clock to the Epoch.
    clock = sinon.useFakeTimers({
      now: new Date(0),
      shouldAdvanceTime: false,
    });
  });

  afterEach(() => {
    clock.restore();
  });

  describe('standardTime', () => {
    it('shows relative timestamp when less than a month ago', () => {
      const date = new Date();
      assert.equal(standardTime(date), `${FORMATTER.format(date)} (just now)`);
    });

    it('no relative time when more than a month in the future', () => {
      const date = new Date(1548808276 * 1000);
      assert.equal(standardTime(date), 'Tue, Jan 29, 2019, 4:31 PM PST');
    });

    it('no relative time when more than a month in the past', () => {
      // Jan 29, 2019, 4:31 PM PST
      const now = 1548808276 * 1000;
      clock.tick(now);

      const date = new Date(now - MS_PER_MONTH);
      assert.equal(standardTime(date), 'Sun, Dec 30, 2018, 4:31 PM PST');
    });
  });

  it('relativeTime future', () => {
    assert.equal(relativeTime(new Date()), `just now`);

    assert.equal(relativeTime(new Date(59 * 1000)), `just now`);

    assert.equal(relativeTime(new Date(60 * 1000)), `a minute from now`);
    assert.equal(relativeTime(new Date(2 * 60 * 1000)),
        `2 minutes from now`);
    assert.equal(relativeTime(new Date(59 * 60 * 1000)),
        `59 minutes from now`);

    assert.equal(relativeTime(new Date(60 * 60 * 1000)), `an hour from now`);
    assert.equal(relativeTime(new Date(2 * 60 * 60 * 1000)),
        `2 hours from now`);
    assert.equal(relativeTime(new Date(23 * 60 * 60 * 1000)),
        `23 hours from now`);

    assert.equal(relativeTime(new Date(24 * 60 * 60 * 1000)),
        `a day from now`);
    assert.equal(relativeTime(new Date(2 * 24 * 60 * 60 * 1000)),
        `2 days from now`);
    assert.equal(relativeTime(new Date(29 * 24 * 60 * 60 * 1000)),
        `29 days from now`);

    assert.equal(relativeTime(new Date(30 * 24 * 60 * 60 * 1000)),
        'Jan 30, 1970');
  });

  it('relativeTime past', () => {
    const baseTime = 234234 * 1000;

    clock.tick(baseTime);

    assert.equal(relativeTime(new Date()), `just now`);

    assert.equal(relativeTime(new Date(baseTime - 59 * 1000)),
        `just now`);

    assert.equal(relativeTime(new Date(baseTime - 60 * 1000)),
        `a minute ago`);
    assert.equal(relativeTime(new Date(baseTime - 2 * 60 * 1000)),
        `2 minutes ago`);
    assert.equal(relativeTime(new Date(baseTime - 59 * 60 * 1000)),
        `59 minutes ago`);

    assert.equal(relativeTime(new Date(baseTime - 60 * 60 * 1000)),
        `an hour ago`);
    assert.equal(relativeTime(new Date(baseTime - 2 * 60 * 60 * 1000)),
        `2 hours ago`);
    assert.equal(relativeTime(new Date(baseTime - 23 * 60 * 60 * 1000)),
        `23 hours ago`);

    assert.equal(relativeTime(new Date(
        baseTime - 24 * 60 * 60 * 1000)), `a day ago`);
    assert.equal(relativeTime(new Date(
        baseTime - 2 * 24 * 60 * 60 * 1000)), `2 days ago`);
    assert.equal(relativeTime(new Date(
        baseTime - 29 * 24 * 60 * 60 * 1000)), `29 days ago`);

    assert.equal(relativeTime(new Date(
        baseTime - 30 * 24 * 60 * 60 * 1000)), 'Dec 4, 1969');
  });
});
