Ghost/ghost/admin/tests/acceptance/custom-post-templates-test.js
Kevin Ansfield 73daa80b7f Migrate to latest ember, ember-mocha and modern ember testing (#1044)
no issue
- upgrade to latest `ember-source` and related dependencies including `ember-cli`
- upgrade to latest `ember-mocha` and modern ember testing setup
    - https://github.com/emberjs/rfcs/blob/master/text/0268-acceptance-testing-refactor.md
    - switch from using global acceptance test helpers and `native-dom-helpers` to using the new `ember-test-helpers` methods
    - use [`chai-dom`](https://github.com/nathanboktae/chai-dom) assertions where in some places (still a lot of places in the tests that could use these)
- pin `ember-in-viewport` to 3.0.x to work around incompatibilities between different versions used in `ember-light-table`, `ember-infinity`, and `ember-sticky-element`
    - incompatibilities manifested as "Invalid value used as weak map key" errors thrown when using `ember-light-table` (subscribers screen)
- pin `ember-power-datepicker` to unreleased version that contains a move from global acceptance test helpers to modern test helpers
2019-01-02 09:58:55 +00:00

148 lines
5.4 KiB
JavaScript

import ctrlOrCmd from 'ghost-admin/utils/ctrl-or-cmd';
import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
import {authenticateSession} from 'ember-simple-auth/test-support';
import {beforeEach, describe, it} from 'mocha';
import {click, fillIn, find, triggerKeyEvent, visit} from '@ember/test-helpers';
import {expect} from 'chai';
import {setupApplicationTest} from 'ember-mocha';
// keyCodes
const KEY_S = 83;
describe('Acceptance: Custom Post Templates', function () {
let hooks = setupApplicationTest();
setupMirage(hooks);
beforeEach(async function () {
this.server.loadFixtures('settings');
let role = this.server.create('role', {name: 'Administrator'});
this.server.create('user', {roles: [role]});
return await authenticateSession();
});
describe('with custom templates', function () {
beforeEach(function () {
this.server.create('theme', {
active: true,
name: 'example-theme',
package: {
name: 'Example Theme',
version: '0.1'
},
templates: [
{
filename: 'custom-news-bulletin.hbs',
name: 'News Bulletin',
for: ['post', 'page'],
slug: null
},
{
filename: 'custom-big-images.hbs',
name: 'Big Images',
for: ['post', 'page'],
slug: null
},
{
filename: 'post-one.hbs',
name: 'One',
for: ['post'],
slug: 'one'
},
{
filename: 'page-about.hbs',
name: 'About',
for: ['page'],
slug: 'about'
}
]
});
});
it('can change selected template', async function () {
let post = this.server.create('post', {customTemplate: 'custom-news-bulletin.hbs'});
await visit('/editor/1');
await click('[data-test-psm-trigger]');
// template form should be shown
expect(find('[data-test-custom-template-form]')).to.exist;
// custom template should be selected
let select = find('[data-test-select="custom-template"]');
expect(select.value, 'selected value').to.equal('custom-news-bulletin.hbs');
// templates list should contain default and custom templates in alphabetical order
expect(select.options.length).to.equal(3);
expect(select.options.item(0).value, 'default value').to.equal('');
expect(select.options.item(0).text, 'default text').to.equal('Default');
expect(select.options.item(1).value, 'first custom value').to.equal('custom-big-images.hbs');
expect(select.options.item(1).text, 'first custom text').to.equal('Big Images');
expect(select.options.item(2).value, 'second custom value').to.equal('custom-news-bulletin.hbs');
expect(select.options.item(2).text, 'second custom text').to.equal('News Bulletin');
// select the default template
await fillIn(select, '');
// save then check server record
await triggerKeyEvent('.gh-app', 'keydown', KEY_S, {
metaKey: ctrlOrCmd === 'command',
ctrlKey: ctrlOrCmd === 'ctrl'
});
expect(
this.server.db.posts.find(post.id).customTemplate,
'saved custom template'
).to.equal('');
});
it('disables template selector if slug matches slug-based template');
it('doesn\'t query themes endpoint unncessarily', async function () {
// eslint-disable-next-line
let themeRequests = () => {
return this.server.pretender.handledRequests.filter(function (request) {
return request.url.match(/\/themes\//);
});
};
this.server.create('post', {customTemplate: 'custom-news-bulletin.hbs'});
await visit('/editor/1');
await click('[data-test-psm-trigger]');
expect(themeRequests().length, 'after first open').to.equal(1);
await click('[data-test-psm-trigger]'); // hide
await click('[data-test-psm-trigger]'); // show
expect(themeRequests().length, 'after second open').to.equal(1);
});
});
describe('without custom templates', function () {
beforeEach(function () {
this.server.create('theme', {
active: true,
name: 'example-theme',
package: {
name: 'Example Theme',
version: '0.1'
},
templates: []
});
});
it('doesn\'t show template selector', async function () {
this.server.create('post', {customTemplate: 'custom-news-bulletin.hbs'});
await visit('/editor/1');
await click('[data-test-psm-trigger]');
// template form should be shown
expect(find('[data-test-custom-template-form]')).to.not.exist;
});
});
});