- it('should correctly parse query #2 (value with keyword should be ignored)', () => {
- const q = 'val0 is:from:trashed val1';
- const r = parseQuery(q);
- expect(r.hasKeywords).toBeTruthy();
- expect(r.values).toEqual(['val0', 'val1']);
- expect(r.properties).toEqual({
- from: 'trashed'
+ it('should correctly parse query #3 (many keywords)', () => {
+ const q = 'val0 is:trashed val2 from:2017-04-01 val1';
+ const r = parseSearchQuery(q);
+ expect(r.hasKeywords).toBeTruthy();
+ expect(r.values).toEqual(['val0', 'val2', 'val1']);
+ expect(r.properties).toEqual({
+ is: ['trashed'],
+ from: ['2017-04-01']
+ });
+ });
+
+ it('should correctly parse query #4 (no duplicated values)', () => {
+ const q = 'val0 is:trashed val2 val2 val0';
+ const r = parseSearchQuery(q);
+ expect(r.hasKeywords).toBeTruthy();
+ expect(r.values).toEqual(['val0', 'val2']);
+ expect(r.properties).toEqual({
+ is: ['trashed']
+ });
+ });
+
+ it('should correctly parse query #5 (properties)', () => {
+ const q = 'val0 has:filesize:100mb val2 val2 val0';
+ const r = parseSearchQuery(q);
+ expect(r.hasKeywords).toBeTruthy();
+ expect(r.values).toEqual(['val0', 'val2']);
+ expect(r.properties).toEqual({
+ 'has': ['filesize:100mb']
+ });
+ });
+
+ it('should correctly parse query #6 (multiple properties, multiple is)', () => {
+ const q = 'val0 has:filesize:100mb val2 has:user:daniel is:starred val2 val0 is:trashed';
+ const r = parseSearchQuery(q);
+ expect(r.hasKeywords).toBeTruthy();
+ expect(r.values).toEqual(['val0', 'val2']);
+ expect(r.properties).toEqual({
+ 'has': ['filesize:100mb', 'user:daniel'],
+ 'is': ['starred', 'trashed']
+ });