UNPKG

steplix-query-filters

Version:

Steplix Query Filter is a module for parsing filters in string to object.

304 lines (227 loc) 11.9 kB
'use strict'; const { Parser, Mappers } = require('../core/steplix'); describe('Parser', () => { describe('#parse', () => { it('should return object with key "active", "description" and "deleted_at"', done => { const parser = new Parser(); const result = parser.parse('active eq 1,description li %casa,deleted_at is null'); expect(result).to.be.a('object'); expect(result).to.have.property('active').to.have.property('eq').equal('1'); expect(result).to.have.property('description').to.have.property('li').equal('%casa'); expect(result).to.have.property('deleted_at').to.have.property('is').equal('null'); done(); }); it('should return object when option "separator" is modified', done => { const parser = new Parser({ separator: '---' }); const result = parser.parse('active eq 1---description li %casa'); expect(result).to.be.a('object'); expect(result).to.have.property('active').to.have.property('eq').equal('1'); expect(result).to.have.property('description').to.have.property('li').equal('%casa'); done(); }); it('should return object when option "key" is modified', done => { const parser = new Parser({ key: '[A-Za-z_]+' }); const result = parser.parse('active eq 1,description_01 li %casa'); expect(result).to.be.a('object'); expect(result).to.have.property('active').to.have.property('eq').equal('1'); expect(result).to.not.have.property('description_01'); done(); }); it('should return object when option "value" is modified', done => { const parser = new Parser({ value: '\\\d+' // eslint-disable-line no-useless-escape }); const result = parser.parse('active eq 1,description li %casa'); expect(result).to.be.a('object'); expect(result).to.have.property('active').to.have.property('eq').equal('1'); expect(result).to.not.have.property('description_01'); done(); }); it('should return object when option "operators" is modified', done => { const parser = new Parser({ operators: Parser.defaults.operators.concat(['my-operator']) }); const result = parser.parse('active eq 1,description my-operator %casa'); expect(result).to.be.a('object'); expect(result).to.have.property('active').to.have.property('eq').equal('1'); expect(result).to.have.property('description').to.have.property('my-operator').equal('%casa'); done(); }); it('should return object when option "operatorPrefix" is modified', done => { const parser = new Parser({ operatorPrefix: '-' }); const result = parser.parse('active-eq 1,description-li %casa'); expect(result).to.be.a('object'); expect(result).to.have.property('active').to.have.property('eq').equal('1'); expect(result).to.have.property('description').to.have.property('li').equal('%casa'); done(); }); it('should return object when option "operatorSuffix" is modified', done => { const parser = new Parser({ operatorSuffix: '-' }); const result = parser.parse('active eq-1,description li-%casa'); expect(result).to.be.a('object'); expect(result).to.have.property('active').to.have.property('eq').equal('1'); expect(result).to.have.property('description').to.have.property('li').equal('%casa'); done(); }); it('should return object when option "mapKey" is modified', done => { const parser = new Parser({ mapKey: key => `${key}_modified` }); const result = parser.parse('active eq 1,description li %casa'); expect(result).to.be.a('object'); expect(result).to.have.property('active_modified').to.have.property('eq').equal('1'); expect(result).to.have.property('description_modified').to.have.property('li').equal('%casa'); done(); }); it('should return object when option "mapKeyParse" is modified', done => { const parser = new Parser({ mapKeyParse: key => `${key}_modified` }); const result = parser.parse('active eq 1,description li %casa'); expect(result).to.be.a('object'); expect(result).to.have.property('active_modified').to.have.property('eq').equal('1'); expect(result).to.have.property('description_modified').to.have.property('li').equal('%casa'); done(); }); it('should return object when option "mapValue" is modified', done => { const parser = new Parser({ mapValue: value => `${value}_modified` }); const result = parser.parse('active eq 1,description li %casa'); expect(result).to.be.a('object'); expect(result).to.have.property('active').to.have.property('eq').equal('1_modified'); expect(result).to.have.property('description').to.have.property('li').equal('%casa_modified'); done(); }); it('should return object when option "mapValueParse" is modified', done => { const parser = new Parser({ mapValueParse: value => `${value}_modified` }); const result = parser.parse('active eq 1,description li %casa'); expect(result).to.be.a('object'); expect(result).to.have.property('active').to.have.property('eq').equal('1_modified'); expect(result).to.have.property('description').to.have.property('li').equal('%casa_modified'); done(); }); it('should return object when option "mapOperator" is modified', done => { const parser = new Parser({ mapOperator: Mappers.SQL }); const result = parser.parse('active eq 1,description li %casa'); expect(result).to.be.a('object'); expect(result).to.have.property('active').to.have.property('=').equal('1'); expect(result).to.have.property('description').to.have.property('LIKE').equal('%casa'); done(); }); it('should return undefined when not has any filter', done => { const parser = new Parser(); const result = parser.parse('active-not-working eq 1,description-not-working li %casa'); expect(result).to.be.a('undefined'); done(); }); }); describe('#format', () => { it('should return string with key "active", "description" and "deleted_at"', done => { const parser = new Parser(); const result = parser.format({ active: { eq: 1 }, description: { li: '%casa' }, deleted_at: { is: 'null' } }); expect(result).to.be.a('string').equal('active eq 1,description li %casa,deleted_at is null'); done(); }); it('should return string when option "separator" is modified', done => { const parser = new Parser({ separator: '---' }); const result = parser.format({ active: { eq: 1 }, description: { li: '%casa' } }); expect(result).to.be.a('string').equal('active eq 1---description li %casa'); done(); }); it('should return string when option "key" is modified', done => { const parser = new Parser({ key: '[A-Za-z_]+' }); const result = parser.format({ active: { eq: 1 }, description_01: { li: '%casa' } }); expect(result).to.be.a('string').equal('active eq 1'); done(); }); it('should return string when option "value" is modified', done => { const parser = new Parser({ value: '\\\d+' // eslint-disable-line no-useless-escape }); const result = parser.format({ active: { eq: 1 }, description: { li: '%casa' } }); expect(result).to.be.a('string').equal('active eq 1'); done(); }); it('should return string when option "operators" is modified', done => { const parser = new Parser({ operators: Parser.defaults.operators.concat(['my-operator']) }); const result = parser.format({ active: { eq: 1 }, description: { 'my-operator': '%casa' } }); expect(result).to.be.a('string').equal('active eq 1,description my-operator %casa'); done(); }); it('should return string when option "operatorPrefix" is modified', done => { const parser = new Parser({ operatorPrefix: '-' }); const result = parser.format({ active: { eq: 1 }, description: { li: '%casa' } }); expect(result).to.be.a('string').equal('active-eq 1,description-li %casa'); done(); }); it('should return string when option "operatorSuffix" is modified', done => { const parser = new Parser({ operatorSuffix: '-' }); const result = parser.format({ active: { eq: 1 }, description: { li: '%casa' } }); expect(result).to.be.a('string').equal('active eq-1,description li-%casa'); done(); }); it('should return string when option "mapKey" is modified', done => { const parser = new Parser({ mapKey: key => `${key}_modified` }); const result = parser.format({ active: { eq: 1 }, description: { li: '%casa' } }); expect(result).to.be.a('string').equal('active_modified eq 1,description_modified li %casa'); done(); }); it('should return string when option "mapKeyFormat" is modified', done => { const parser = new Parser({ mapKeyFormat: key => `${key}_modified` }); const result = parser.format({ active: { eq: 1 }, description: { li: '%casa' } }); expect(result).to.be.a('string').equal('active_modified eq 1,description_modified li %casa'); done(); }); it('should return string when option "mapValue" is modified', done => { const parser = new Parser({ mapValue: value => `${value}_modified` }); const result = parser.format({ active: { eq: 1 }, description: { li: '%casa' } }); expect(result).to.be.a('string').equal('active eq 1_modified,description li %casa_modified'); done(); }); it('should return string when option "mapValueFormat" is modified', done => { const parser = new Parser({ mapValueFormat: value => `${value}_modified` }); const result = parser.format({ active: { eq: 1 }, description: { li: '%casa' } }); expect(result).to.be.a('string').equal('active eq 1_modified,description li %casa_modified'); done(); }); it('should return string when option "mapOperator" is modified', done => { const parser = new Parser({ mapOperator: Mappers.SQL }); const result = parser.format({ active: { '=': 1 }, description: { LIKE: '%casa' } }); expect(result).to.be.a('string').equal('active ee 1,description li %casa'); done(); }); }); });