You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
thumbsup/test/themes/helpers/compare.spec.js

110 lines
3.8 KiB
JavaScript

const compare = require('../../../themes/base/helpers/compare')
const handlebars = require('handlebars')
const should = require('should/as-function')
describe('Handlebars helpers: compare', () => {
handlebars.registerHelper('compare', compare)
it('executes the block if the condition is true', () => {
const template = handlebars.compile(`{{#compare value '==' 3}}TRUE{{/compare}}`)
const res = template({value: 3})
should(res).eql('TRUE')
})
it('does not execute the block if the condition is false', () => {
const template = handlebars.compile(`{{#compare value '==' 3}}{{/compare}}`)
const res = template({value: 4})
should(res).eql('')
})
it('executes the {{else}} block if the condition is false', () => {
const template = handlebars.compile(`{{#compare value '==' 3}}TRUE{{else}}FALSE{{/compare}}`)
const res = template({value: 4})
should(res).eql('FALSE')
})
it('defaults to a strict equality', () => {
const template = handlebars.compile(`{{#compare value 3}}TRUE{{/compare}}`)
const res = template({value: 3})
should(res).eql('TRUE')
})
it('throws an error if the operator is not known', () => {
const template = handlebars.compile(`{{#compare value '~~' 3}}TRUE{{/compare}}`)
should(() => {
template({value: 3})
}).throw(/operator/)
})
it('throws an error if there arent enough parameters', () => {
should(() => {
const template = handlebars.compile(`{{#compare value}}TRUE{{/compare}}`)
template({value: 3})
}).throw(/needs 2 parameters/)
})
it('keeps the context when executing the block', () => {
const template = handlebars.compile(`{{#compare value '==' 3}}{{hello}}{{/compare}}`)
const res = template({value: 3, hello: 'world'})
should(res).eql('world')
})
describe('operators', () => {
it('equal', () => {
const template = handlebars.compile(`{{#compare value '==' 3}}TRUE{{/compare}}`)
should(template({value: 3})).eql('TRUE')
should(template({value: '3'})).eql('TRUE')
should(template({value: 4})).eql('')
})
it('strict equal', () => {
const template = handlebars.compile(`{{#compare value '===' 3}}TRUE{{/compare}}`)
should(template({value: 3})).eql('TRUE')
should(template({value: '3'})).eql('')
should(template({value: 4})).eql('')
})
it('different', () => {
const template = handlebars.compile(`{{#compare value '!=' 3}}TRUE{{/compare}}`)
should(template({value: 3})).eql('')
should(template({value: '3'})).eql('')
should(template({value: 4})).eql('TRUE')
})
it('strict different', () => {
const template = handlebars.compile(`{{#compare value '!==' 3}}TRUE{{/compare}}`)
should(template({value: 3})).eql('')
should(template({value: '3'})).eql('TRUE')
should(template({value: 4})).eql('TRUE')
})
it('less than', () => {
const template = handlebars.compile(`{{#compare value '<' 3}}TRUE{{/compare}}`)
should(template({value: 2})).eql('TRUE')
should(template({value: 3})).eql('')
should(template({value: 4})).eql('')
})
it('greater than', () => {
const template = handlebars.compile(`{{#compare value '>' 3}}TRUE{{/compare}}`)
should(template({value: 2})).eql('')
should(template({value: 3})).eql('')
should(template({value: 4})).eql('TRUE')
})
it('less or equal', () => {
const template = handlebars.compile(`{{#compare value '<=' 3}}TRUE{{/compare}}`)
should(template({value: 2})).eql('TRUE')
should(template({value: 3})).eql('TRUE')
should(template({value: 4})).eql('')
})
it('greater or equal', () => {
const template = handlebars.compile(`{{#compare value '>=' 3}}TRUE{{/compare}}`)
should(template({value: 2})).eql('')
should(template({value: 3})).eql('TRUE')
should(template({value: 4})).eql('TRUE')
})
})
})