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') }) }) })