Ghost/test/unit/helpers/concat.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

99 lines
3.3 KiB
JavaScript

const should = require('should');
const helpers = require('../../../core/frontend/helpers');
const handlebars = require('../../../core/frontend/services/theme-engine/engine').handlebars;
const configUtils = require('../../utils/configUtils');
let defaultGlobals;
function compile(templateString) {
const template = handlebars.compile(templateString);
template.with = (locals = {}, globals) => {
globals = globals || defaultGlobals;
return template(locals, globals);
};
return template;
}
describe('{{concat}} helper', function () {
before(function () {
handlebars.registerHelper('concat', helpers.concat);
handlebars.registerHelper('url', helpers.url);
configUtils.config.set('url', 'https://siteurl.com');
defaultGlobals = {
data: {
site: {
url: configUtils.config.get('url')
}
}
};
});
it('can correctly concat nothing', function () {
compile('{{concat}}')
.with({})
.should.eql('');
});
it('can correctly concat things that resolve to empty', function () {
compile('{{concat tag.slug slug}}')
.with({tag: {}})
.should.eql('');
});
it('can concat simple strings', function () {
compile('{{concat "hello" "world"}}')
.with({})
.should.eql('helloworld');
});
it('can concat simple strings with a custom separator', function () {
compile('{{concat "hello" "world" separator=" "}}')
.with({})
.should.eql('hello world');
});
it('can concat strings and numbers', function () {
compile('{{concat "abcd" 1234}}')
.with({})
.should.eql('abcd1234');
});
it('can concat strings and global variables', function () {
compile('{{concat @site.url "?my=param"}}')
.with({})
.should.eql('https://siteurl.com?my=param');
});
it('can concat strings and local variables', function () {
compile('{{concat tag.slug "?my=param"}}')
.with({tag: {slug: 'my-tag'}})
.should.eql('my-tag?my=param');
});
it('can concat strings from custom helpers (SafeStrings)', function () {
compile('{{concat (url) "?my=param"}}')
// Simulate a post - using a draft to prove url helper gets called
// because published posts get their urls from a cache that we don't have access to, so we just get 404
.with({title: 'My Draft Post', slug: 'my-post', html: '<p>My Post</p>', uuid: '1234'})
.should.eql('/p/1234/?my=param');
});
it('can concat mixed args', function () {
compile('{{concat @site.url (url) "?slug=" slug}}')
// Simulate a post - using a draft to prove url helper gets called
// because published posts get their urls from a cache that we don't have access to, so we just get 404
.with({title: 'My Draft Post', slug: 'my-post', html: '<p>My Post</p>', uuid: '1234'})
.should.eql('https://siteurl.com/p/1234/?slug=my-post');
});
it('will output object Object for sill args', function () {
compile('{{concat @site "?my=param"}}')
.with({})
.should.eql('[object Object]?my=param');
});
});