diff --git a/src/__tests__/query-tests.ts b/src/__tests__/query-tests.ts new file mode 100644 index 0000000..fc2fdec --- /dev/null +++ b/src/__tests__/query-tests.ts @@ -0,0 +1,52 @@ +import { Query } from '../query' + +describe('The Query class', () => { + const stringQuery = + "foo bar 'lorem ipsum' -baz dolor \"sit amet\" -'quoted exclusion'" + + it('should correctly parse string queries', () => { + // Act + const query = new Query(stringQuery) + + // Assert + const segments = query.segments.map(s => s.value) + expect(segments).toHaveLength(5) + expect(segments).toContain('foo') + expect(segments).toContain('bar') + expect(segments).toContain('lorem ipsum') + expect(segments).toContain('dolor') + expect(segments).toContain('sit amet') + + const exclusions = query.exclusions.map(s => s.value) + expect(exclusions).toHaveLength(2) + expect(exclusions).toContain('baz') + expect(exclusions).toContain('quoted exclusion') + }) + + it('should mark quoted segments & exclusions as "exact"', () => { + // Act + const query = new Query(stringQuery) + + // Assert + expect(query.segments.filter(s => s.exact)).toHaveLength(2) + expect( + query.segments.find(o => o.value === 'lorem ipsum')!.exact, + ).toBeTruthy() + expect(query.segments.find(o => o.value === 'sit amet')!.exact).toBeTruthy() + + expect(query.exclusions.filter(s => s.exact)).toHaveLength(1) + expect( + query.exclusions.find(o => o.value === 'quoted exclusion')!.exact, + ).toBeTruthy() + }) + + describe('.getExactTerms()', () => { + it('should an array of strings containg "exact" values', () => { + // Act + const query = new Query(stringQuery) + + // Assert + expect(query.getExactTerms()).toEqual(['lorem ipsum', 'sit amet']) + }) + }) +})