Ghost/test/unit/helpers/content.test.js
Hannah Wolfe f08a55c21f
Renamed tests to .test.js & updated commands
refs: https://github.com/TryGhost/Team/issues/856
refs: https://github.com/TryGhost/Team/issues/756

- The .test.js extension is better than _spec.js as it's more obvious that it's an extension
- It also meaans we can use the --extension parameter in mocha, which should result in a better default behaviour for `yarn test`
- It also highlights that some of our tests were named incorrectly and were not (and still will not be) run (see https://github.com/TryGhost/Team/issues/856)
- Note: even with this change, `yarn test` is throwing errors, I believe because of this issue https://github.com/TryGhost/Team/issues/756
2021-07-06 20:45:01 +01:00

142 lines
4.3 KiB
JavaScript

const should = require('should');
const hbs = require('../../../core/frontend/services/theme-engine/engine');
const configUtils = require('../../utils/configUtils');
const path = require('path');
const runHelper = data => helpers.navigation.call({}, data);
// Stuff we are testing
const helpers = require('../../../core/frontend/helpers');
describe('{{content}} helper', function () {
before(function (done) {
hbs.express4({partialsDir: [configUtils.config.get('paths').helperTemplates]});
hbs.cachePartials(function () {
done();
});
});
it('renders empty string when null', function () {
const html = null;
const rendered = helpers.content.call({html: html});
should.exist(rendered);
rendered.string.should.equal('');
});
it('can render content', function () {
const html = 'Hello World';
const rendered = helpers.content.call({html: html});
should.exist(rendered);
rendered.string.should.equal(html);
});
it('can truncate html by word', function () {
const html = '<p>Hello <strong>World! It\'s me!</strong></p>';
const rendered = (
helpers.content
.call(
{html: html},
{hash: {words: 2}}
)
);
should.exist(rendered);
rendered.string.should.equal('<p>Hello <strong>World!</strong></p>');
});
it('can truncate html to 0 words', function () {
const html = '<p>Hello <strong>World! It\'s me!</strong></p>';
const rendered = (
helpers.content
.call(
{html: html},
{hash: {words: '0'}}
)
);
should.exist(rendered);
rendered.string.should.equal('');
});
it('can truncate html by character', function () {
const html = '<p>Hello <strong>World! It\'s me!</strong></p>';
const rendered = (
helpers.content
.call(
{html: html},
{hash: {characters: 8}}
)
);
should.exist(rendered);
rendered.string.should.equal('<p>Hello <strong>Wo</strong></p>');
});
});
describe('{{content}} helper with no access', function () {
let optionsData;
before(function (done) {
hbs.express4({partialsDir: [configUtils.config.get('paths').helperTemplates]});
hbs.cachePartials(function () {
done();
});
});
beforeEach(function () {
optionsData = {
data: {
site: {
accent_color: '#abcdef'
}
}
};
});
it('can render default template', function () {
const html = '';
const rendered = helpers.content.call({html: html, access: false}, optionsData);
rendered.string.should.containEql('gh-post-upgrade-cta');
rendered.string.should.containEql('gh-post-upgrade-cta-content');
rendered.string.should.containEql('"background-color: #abcdef"');
should.exist(rendered);
});
it('outputs free content if available via paywall card', function () {
// html will be included when there is free content available
const html = 'Free content';
const rendered = helpers.content.call({html: html, access: false}, optionsData);
rendered.string.should.containEql('Free content');
rendered.string.should.containEql('gh-post-upgrade-cta');
rendered.string.should.containEql('gh-post-upgrade-cta-content');
rendered.string.should.containEql('"background-color: #abcdef"');
});
});
describe('{{content}} helper with custom template', function () {
let optionsData;
before(function (done) {
hbs.express4({partialsDir: [path.resolve(__dirname, './test_tpl')]});
hbs.cachePartials(function () {
done();
});
});
it('can render custom template', function () {
const html = 'Hello World';
const rendered = helpers.content.call({html: html, access: false}, optionsData);
rendered.string.should.not.containEql('gh-post-upgrade-cta');
rendered.string.should.containEql('custom-post-upgrade-cta');
rendered.string.should.containEql('custom-post-upgrade-cta-content');
should.exist(rendered);
});
});