// 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, expect} from 'chai';
import {ChopsTimestamp} from './chops-timestamp.js';
import {FORMATTER, SHORT_FORMATTER} 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 element;
let clock;

describe('chops-timestamp', () => {
  beforeEach(() => {
    element = document.createElement('chops-timestamp');
    document.body.appendChild(element);

    // Set clock to the Epoch.
    clock = sinon.useFakeTimers({
      now: new Date(0),
      shouldAdvanceTime: false,
    });
  });

  afterEach(() => {
    document.body.removeChild(element);
    clock.restore();
  });

  it('initializes', () => {
    assert.instanceOf(element, ChopsTimestamp);
  });

  it('changing timestamp changes date', async () => {
    const timestamp = 1548808276;
    element.timestamp = String(timestamp);

    await element.updateComplete;

    assert.include(element.shadowRoot.textContent,
        FORMATTER.format(new Date(timestamp * 1000)));
  });

  it('parses ISO dates', async () => {
    const timestamp = '2016-11-11';
    element.timestamp = timestamp;

    await element.updateComplete;

    assert.include(element.shadowRoot.textContent,
        FORMATTER.format(new Date(timestamp)));
  });

  it('invalid timestamp format', () => {
    expect(() => {
      element._parseTimestamp('random string');
    }).to.throw('Timestamp is in an invalid format.');
  });

  it('short time renders shorter time', async () => {
    element.short = true;
    element.timestamp = '5';

    await element.updateComplete;

    assert.include(element.shadowRoot.textContent,
        `just now`);

    element.timestamp = '60';

    await element.updateComplete;

    assert.include(element.shadowRoot.textContent,
        `a minute from now`);

    const timestamp = 1548808276;
    element.timestamp = String(timestamp);

    await element.updateComplete;

    assert.include(element.shadowRoot.textContent,
        SHORT_FORMATTER.format(timestamp * 1000));
  });
});
