test(`${cnNamesMap[cn1]} and ${cnNamesMap[cn2]}`, () => { const qry = parse(muto.where(cnMap[cn1]).and(cnMap[cn2])); expect(qry).toBeInstanceOf(bob.BoolQuery); expect(qry).toEqual( bob.boolQuery().must([cnQryMap[cn1], cnQryMap[cn2]]) ); });
it('calls toString as last resort', () => { const testObj = { toString: () => existsCnStr }; const spy = jest.spyOn(testObj, 'toString'); const qry = parse(testObj); expect(spy).toHaveBeenCalled(); expect(qry).toBeInstanceOf(bob.BoolQuery); expect(qry).toEqual(bob.boolQuery().must(cnQryMap.exists)); });
it('can parse strings', () => { const qry = parse(existsCnStr); expect(qry).toBeInstanceOf(bob.BoolQuery); expect(qry).toEqual(bob.boolQuery().must(cnQryMap.exists)); });
test(`${cnNamesMap[cn1]} or (${cnNamesMap[cn2]} and ${ cnNamesMap[cn3] })`, () => { const qry = parse( muto .where(cnMap[cn1]) .or(muto.where(cnMap[cn2]).and(cnMap[cn3])) ); expect(qry).toBeInstanceOf(bob.BoolQuery); expect(qry).toEqual( bob .boolQuery() .should([ cnQryMap[cn1], bob.boolQuery().must([cnQryMap[cn2], cnQryMap[cn3]]) ]) ); });
expect(qry).toBeInstanceOf(bob.BoolQuery); expect(qry).toEqual(cnQryMap.strNeNotAnalyzed); });
describe('simple condition', () => { conditions.forEach(cn => { test(cnNamesMap[cn], () => { const qry = parse(cnMap[cn]); expect(qry).toBeInstanceOf(bob.BoolQuery); if (cnQryMap[cn] instanceof bob.BoolQuery) { expect(qry).toEqual(cnQryMap[cn]); } else { expect(qry).toEqual(bob.boolQuery().must(cnQryMap[cn])); } }); }); test('string equals for not analyzed field', () => { const qry = parse(cnMap.strEq, ['elasticsearch']); expect(qry).toBeInstanceOf(bob.BoolQuery); expect(qry).toEqual( bob.boolQuery().must(cnQryMap.strEqNotAnalyzed) ); }); test('string not equals for not analyzed field', () => { const qry = parse(cnMap.strNe, ['foo']); expect(qry).toBeInstanceOf(bob.BoolQuery); expect(qry).toEqual(cnQryMap.strNeNotAnalyzed); }); });
test(`${cnNamesMap[cn1]} or ${cnNamesMap[cn2]} or ${ cnNamesMap[cn3] }`, () => { const qry = parse( muto .where(cnMap[cn1]) .or(cnMap[cn2]) .or(cnMap[cn3]) ); expect(qry).toBeInstanceOf(bob.BoolQuery); expect(qry).toEqual( bob .boolQuery() .should([cnQryMap[cn1], cnQryMap[cn2], cnQryMap[cn3]]) ); });
test(`(${cnNamesMap[cn1]} or ${cnNamesMap[cn2]}) and ${ cnNamesMap[cn3] }`, () => { const qry = parse( muto .where(muto.where(cnMap[cn1]).or(cnMap[cn2])) .and(cnMap[cn3]) ); expect(qry).toBeInstanceOf(bob.BoolQuery); expect(qry).toEqual( bob .boolQuery() .must([ bob .boolQuery() .should([cnQryMap[cn1], cnQryMap[cn2]]), cnQryMap[cn3] ]) ); });
test(`${cnNamesMap[cn1]} or ${cnNamesMap[cn2]}`, () => { const qry = parse(muto.where(cnMap[cn1]).or(cnMap[cn2])); expect(qry).toBeInstanceOf(bob.BoolQuery); expect(qry).toEqual( bob.boolQuery().should([cnQryMap[cn1], cnQryMap[cn2]]) ); });
test(`${cnNamesMap[cn1]} and ${cnNamesMap[cn2]} and ${ cnNamesMap[cn3] }`, () => { const qry = parse( muto .where(cnMap[cn1]) .and(cnMap[cn2]) .and(cnMap[cn3]) ); expect(qry).toBeInstanceOf(bob.BoolQuery); expect(qry).toEqual( bob .boolQuery() .must([cnQryMap[cn1], cnQryMap[cn2], cnQryMap[cn3]]) ); });
it('can parse objects with build method', () => { const testObj = { build: () => existsCnStr }; const spy = jest.spyOn(testObj, 'build'); const qry = parse(testObj); expect(spy).toHaveBeenCalled(); expect(qry).toBeInstanceOf(bob.BoolQuery); expect(qry).toEqual(bob.boolQuery().must(cnQryMap.exists)); });
test(`(${cnNamesMap[cn1]} and ${cnNamesMap[cn2]}) or ${ cnNamesMap[cn3] }`, () => { const qry = parse( muto .where(muto.where(cnMap[cn1]).and(cnMap[cn2])) .or(cnMap[cn3]) ); expect(qry).toBeInstanceOf(bob.BoolQuery); expect(qry).toEqual( bob .boolQuery() .should([ bob .boolQuery() .must([cnQryMap[cn1], cnQryMap[cn2]]), cnQryMap[cn3] ]) ); });
test(`${cnNamesMap[cn1]} and (${cnNamesMap[cn2]} or ${ cnNamesMap[cn3] })`, () => { const qry = parse( muto .where(cnMap[cn1]) .and(muto.where(cnMap[cn2]).or(cnMap[cn3])) ); expect(qry).toBeInstanceOf(bob.BoolQuery); expect(qry).toEqual( bob .boolQuery() .must([ cnQryMap[cn1], bob .boolQuery() .should([cnQryMap[cn2], cnQryMap[cn3]]) ]) ); });