mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-30 14:22:07 +03:00
8f8fcfc8bb
refs https://github.com/TryGhost/Ghost/issues/11965 - updated the `{{gh-format-post-time}}` helper that is used in editor status and in post settings menu email sub-menu for displaying email sent time
133 lines
4.9 KiB
JavaScript
133 lines
4.9 KiB
JavaScript
import hbs from 'htmlbars-inline-precompile';
|
|
import moment from 'moment';
|
|
import sinon from 'sinon';
|
|
import {describe, it} from 'mocha';
|
|
import {expect} from 'chai';
|
|
import {render} from '@ember/test-helpers';
|
|
import {setupRenderingTest} from 'ember-mocha';
|
|
|
|
// because why not?
|
|
const timezoneForTest = 'Iceland';
|
|
|
|
describe('Integration: Helper: gh-format-post-time', function () {
|
|
setupRenderingTest();
|
|
|
|
let sandbox = sinon.createSandbox();
|
|
|
|
beforeEach(function () {
|
|
let settings = this.owner.lookup('service:settings');
|
|
settings.content = {};
|
|
settings.set('timezone', timezoneForTest);
|
|
});
|
|
|
|
afterEach(function () {
|
|
sandbox.restore();
|
|
});
|
|
|
|
function setupMockDate({date, utcDate}) {
|
|
let mockDate = moment(date);
|
|
|
|
// compute expectedTime before we override
|
|
let expectedTime = moment.tz(mockDate, timezoneForTest).format('HH:mm');
|
|
|
|
// stub moment.utc to return our provided utcDate
|
|
let utcStub = sandbox.stub(moment, 'utc');
|
|
utcStub.returns(moment(utcDate));
|
|
utcStub.onFirstCall().returns(mockDate);
|
|
|
|
return {expectedTime, mockDate};
|
|
}
|
|
|
|
it('returns basic time difference if post is draft', async function () {
|
|
let mockDate = moment.utc().subtract(1, 'hour');
|
|
this.set('mockDate', mockDate);
|
|
|
|
await render(hbs`{{gh-format-post-time mockDate draft=true}}`);
|
|
expect(this.element).to.have.trimmed.text('an hour ago');
|
|
});
|
|
|
|
it('returns difference if post was published less than 2 minutes ago', async function () {
|
|
let mockDate = moment.utc().subtract(13, 'minutes');
|
|
this.set('mockDate', mockDate);
|
|
|
|
await render(hbs`{{gh-format-post-time mockDate published=true}}`);
|
|
expect(this.element).to.have.trimmed.text('13 minutes ago');
|
|
});
|
|
|
|
it('returns difference if post is scheduled for less than 2 minutes from now', async function () {
|
|
let mockDate = moment.utc().add(13, 'minutes');
|
|
this.set('mockDate', mockDate);
|
|
|
|
await render(hbs`{{gh-format-post-time mockDate scheduled=true}}`);
|
|
expect(this.element).to.have.trimmed.text('in 13 minutes');
|
|
});
|
|
|
|
it('returns correct format if post was published on the same day', async function () {
|
|
// needs to be outside of 12 hours
|
|
let {mockDate, expectedTime} = setupMockDate({
|
|
date: '2017-09-06T06:00:00Z',
|
|
utcDate: '2017-09-06T19:00:00Z'
|
|
});
|
|
this.set('mockDate', mockDate);
|
|
|
|
await render(hbs`{{gh-format-post-time mockDate published=true}}`);
|
|
expect(this.element).to.have.trimmed.text(`${expectedTime} (UTC) Today`);
|
|
});
|
|
|
|
it('returns correct format if post is scheduled for the same day', async function () {
|
|
// needs to be outside of 12 hours
|
|
let {mockDate, expectedTime} = setupMockDate({
|
|
date: '2017-09-06T06:00:00Z',
|
|
utcDate: '2017-09-06T19:00:00Z'
|
|
});
|
|
this.set('mockDate', mockDate);
|
|
|
|
await render(hbs`{{gh-format-post-time mockDate scheduled=true}}`);
|
|
expect(this.element).to.have.trimmed.text(`at ${expectedTime} (UTC) Today`);
|
|
});
|
|
|
|
it('returns correct format if post was published yesterday', async function () {
|
|
let {mockDate, expectedTime} = setupMockDate({
|
|
date: '2017-09-05T16:00:00Z',
|
|
utcDate: '2017-09-06T18:00:00Z'
|
|
});
|
|
this.set('mockDate', mockDate);
|
|
|
|
await render(hbs`{{gh-format-post-time mockDate published=true}}`);
|
|
expect(this.element).to.have.trimmed.text(`${expectedTime} (UTC) Yesterday`);
|
|
});
|
|
|
|
it('returns correct format if post is scheduled for tomorrow', async function () {
|
|
let {mockDate, expectedTime} = setupMockDate({
|
|
date: '2017-09-07T18:00:00Z',
|
|
utcDate: '2017-09-06T16:00:00Z'
|
|
});
|
|
this.set('mockDate', mockDate);
|
|
|
|
await render(hbs`{{gh-format-post-time mockDate scheduled=true}}`);
|
|
expect(this.element).to.have.trimmed.text(`at ${expectedTime} (UTC) Tomorrow`);
|
|
});
|
|
|
|
it('returns correct format if post was published prior to yesterday', async function () {
|
|
let {mockDate} = setupMockDate({
|
|
date: '2017-09-02T16:00:00Z',
|
|
utcDate: '2017-09-06T18:00:00Z'
|
|
});
|
|
this.set('mockDate', mockDate);
|
|
|
|
await render(hbs`{{gh-format-post-time mockDate published=true}}`);
|
|
expect(this.element).to.have.trimmed.text('02 Sep 2017');
|
|
});
|
|
|
|
it('returns correct format if post is scheduled for later than tomorrow', async function () {
|
|
let {mockDate, expectedTime} = setupMockDate({
|
|
date: '2017-09-10T18:00:00Z',
|
|
utcDate: '2017-09-06T16:00:00Z'
|
|
});
|
|
this.set('mockDate', mockDate);
|
|
|
|
await render(hbs`{{gh-format-post-time mockDate scheduled=true}}`);
|
|
expect(this.element).to.have.trimmed.text(`at ${expectedTime} (UTC) on 10 Sep 2017`);
|
|
});
|
|
});
|