import assert from 'assert';

import {
  default as cleanDatePublished,
  cleanDateString,
} from './date-published';

describe('cleanDatePublished(dateString)', () => {
  it('returns a date object', () => {
    const datePublished = cleanDatePublished('published: 1/1/2020');

    assert.equal(
      datePublished,
      new Date('1/1/2020').toISOString()
    );
  });

  it('returns null if date is invalid', () => {
    const datePublished = cleanDatePublished('blargh');

    assert.equal(datePublished, null);
  });
});

describe('cleanDateString(dateString)', () => {
  it('removes "published" text from an datePublished string', () => {
    const datePublished = cleanDateString('published: 1/1/2020');

    assert.equal(datePublished, '1/1/2020');
  });

  it('trims whitespace', () => {
    const datePublished = cleanDateString('    1/1/2020     ');

    assert.equal(datePublished, '1/1/2020');
  });

  it('puts a space b/w a time and am/pm', () => {
    // The JS date parser is forgiving, but
    // it needs am/pm separated from a time
    const date1 = cleanDateString('1/1/2020 8:30am');
    assert.equal(date1, '1/1/2020 8:30 am');

    const date2 = cleanDateString('8:30PM 1/1/2020');
    assert.equal(date2, '8:30 PM   1/1/2020');
  });

  it('cleans the dots from a.m. or p.m.', () => {
    // The JS date parser is forgiving, but
    // it needs a.m./p.m. without dots
    const date1 = cleanDateString('1/1/2020 8:30 a.m.');
    assert.equal(date1, '1/1/2020 8:30 am');
  });

  it('can handle some tough timestamps', () => {
    // The JS date parser is forgiving, but
    // it needs am/pm separated from a time
    const date1 = cleanDateString('This page was last modified on 15 April 2016, at 10:59.');
    assert.equal(date1, '15 Apr 2016 10:59');
  });
});

