Ghost/ghost/admin/tests/acceptance/custom-post-templates-test.js
Steve Larson 8bc653802d
Released new editor (#18422)
Promoted our beta editor to the default editor. Keep an eye on (or subscribe to) https://ghost.org/changelog/ for release announcements with full details.

- moved the beta editor (Lexical-based editor) to the default editor; all pages and posts will now use it
- all mobiledoc (previous editor) posts will remain mobiledoc until opened in the editor at which point will be converted to Lexical on the fly and open in the new editor
2023-10-04 12:22:54 +01:00

148 lines
5.4 KiB
JavaScript

import ctrlOrCmd from 'ghost-admin/utils/ctrl-or-cmd';
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';
import {setupMirage} from 'ember-cli-mirage/test-support';
// keyCodes
const KEY_S = 83;
describe('Acceptance: Custom Post Templates', function () {
let hooks = setupApplicationTest();
setupMirage(hooks);
beforeEach(async function () {
this.server.loadFixtures('settings','configs');
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/post/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/post/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/post/1');
await click('[data-test-psm-trigger]');
// template form should be shown
expect(find('[data-test-custom-template-form]')).to.not.exist;
});
});
});