X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/9b29a65b9f9f02b338445c12b5d08b292f797c1c..25216cc7acedc987c26a159f0b640210c0ef101e:/src/store/search-bar/search-bar-actions.test.ts diff --git a/src/store/search-bar/search-bar-actions.test.ts b/src/store/search-bar/search-bar-actions.test.ts index ea290b4d..d14f3f14 100644 --- a/src/store/search-bar/search-bar-actions.test.ts +++ b/src/store/search-bar/search-bar-actions.test.ts @@ -2,87 +2,24 @@ // // SPDX-License-Identifier: AGPL-3.0 -import { getAdvancedDataFromQuery, getQueryFromAdvancedData, parseSearchQuery } from "~/store/search-bar/search-bar-actions"; -import { ResourceKind } from "~/models/resource"; +import { getAdvancedDataFromQuery, getQueryFromAdvancedData } from "store/search-bar/search-bar-actions"; +import { ResourceKind } from "models/resource"; describe('search-bar-actions', () => { - describe('parseSearchQuery', () => { - it('should correctly parse query #1', () => { - const q = 'val0 is:trashed val1'; - const r = parseSearchQuery(q); - expect(r.hasKeywords).toBeTruthy(); - expect(r.values).toEqual(['val0', 'val1']); - expect(r.properties).toEqual({ - is: ['trashed'] - }); - }); - - it('should correctly parse query #2 (value with keyword should be ignored)', () => { - const q = 'val0 is:from:trashed val1'; - const r = parseSearchQuery(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'] - }); - }); - }); - describe('getAdvancedDataFromQuery', () => { it('should correctly build advanced data record from query #1', () => { - const r = getAdvancedDataFromQuery('val0 has:filesize:100mb val2 has:user:daniel is:starred val2 val0 is:trashed'); + const r = getAdvancedDataFromQuery('val0 has:"file size":"100mb" val2 has:"user":"daniel" is:starred val2 val0'); expect(r).toEqual({ searchValue: 'val0 val2', type: undefined, cluster: undefined, projectUuid: undefined, - inTrash: true, - dateFrom: undefined, - dateTo: undefined, + inTrash: false, + pastVersions: false, + dateFrom: '', + dateTo: '', properties: [{ - key: 'filesize', + key: 'file size', value: '100mb' }, { key: 'user', @@ -94,15 +31,16 @@ describe('search-bar-actions', () => { }); it('should correctly build advanced data record from query #2', () => { - const r = getAdvancedDataFromQuery('document from:2017-08-01 pdf has:filesize:101mb is:trashed type:arvados#collection cluster:c97qx'); + const r = getAdvancedDataFromQuery('document from:2017-08-01 pdf has:"filesize":"101mb" is:trashed type:arvados#collection cluster:c97qx is:pastVersion'); expect(r).toEqual({ searchValue: 'document pdf', type: ResourceKind.COLLECTION, cluster: 'c97qx', projectUuid: undefined, inTrash: true, + pastVersions: true, dateFrom: '2017-08-01', - dateTo: undefined, + dateTo: '', properties: [{ key: 'filesize', value: '101mb' @@ -121,16 +59,127 @@ describe('search-bar-actions', () => { cluster: 'c97qx', projectUuid: undefined, inTrash: true, + pastVersions: false, dateFrom: '2017-08-01', dateTo: '', - properties: [{ - key: 'filesize', - value: '101mb' - }], + properties: [ + { key: 'file size', value: '101mb' }, + { key: 'Species', value: 'Human' }, + { key: 'Species', value: 'Canine' }, + ], saveQuery: false, queryName: '' }); - expect(q).toBe('document pdf type:arvados#collection cluster:c97qx is:trashed from:2017-08-01 has:filesize:101mb'); + expect(q).toBe('document pdf type:arvados#collection cluster:c97qx is:trashed from:2017-08-01 has:"file size":"101mb" has:"Species":"Human" has:"Species":"Canine"'); + }); + + it('should build query from advanced data #2', () => { + const q = getQueryFromAdvancedData({ + searchValue: 'document pdf', + type: ResourceKind.COLLECTION, + cluster: 'c97qx', + projectUuid: undefined, + inTrash: false, + pastVersions: true, + dateFrom: '2017-08-01', + dateTo: '', + properties: [ + { key: 'file size', value: '101mb' }, + { key: 'Species', value: 'Human' }, + { key: 'Species', value: 'Canine' }, + ], + saveQuery: false, + queryName: '' + }); + expect(q).toBe('document pdf type:arvados#collection cluster:c97qx is:pastVersion from:2017-08-01 has:"file size":"101mb" has:"Species":"Human" has:"Species":"Canine"'); + }); + + it('should add has:"key":"value" expression to query from same property key', () => { + const searchValue = 'document pdf has:"file size":"101mb" has:"Species":"Canine"'; + const prevData = { + searchValue, + type: undefined, + cluster: undefined, + projectUuid: undefined, + inTrash: false, + pastVersions: false, + dateFrom: '', + dateTo: '', + properties: [ + { key: 'file size', value: '101mb' }, + { key: 'Species', value: 'Canine' }, + ], + saveQuery: false, + queryName: '' + }; + const currData = { + ...prevData, + properties: [ + { key: 'file size', value: '101mb' }, + { key: 'Species', value: 'Canine' }, + { key: 'Species', value: 'Human' }, + ], + }; + const q = getQueryFromAdvancedData(currData, prevData); + expect(q).toBe('document pdf has:"file size":"101mb" has:"Species":"Canine" has:"Species":"Human"'); + }); + + it('should add has:"keyID":"valueID" expression to query when necessary', () => { + const searchValue = 'document pdf has:"file size":"101mb"'; + const prevData = { + searchValue, + type: undefined, + cluster: undefined, + projectUuid: undefined, + inTrash: false, + pastVersions: false, + dateFrom: '', + dateTo: '', + properties: [ + { key: 'file size', value: '101mb' }, + ], + saveQuery: false, + queryName: '' + }; + const currData = { + ...prevData, + properties: [ + { key: 'file size', value: '101mb' }, + { key: 'Species', keyID: 'IDTAGSPECIES', value: 'Human', valueID: 'IDVALHUMAN'}, + ], + }; + const q = getQueryFromAdvancedData(currData, prevData); + expect(q).toBe('document pdf has:"file size":"101mb" has:"IDTAGSPECIES":"IDVALHUMAN"'); + }); + + it('should remove has:"key":"value" expression from query', () => { + const searchValue = 'document pdf has:"file size":"101mb" has:"Species":"Human" has:"Species":"Canine"'; + const prevData = { + searchValue, + type: undefined, + cluster: undefined, + projectUuid: undefined, + inTrash: false, + pastVersions: false, + dateFrom: '', + dateTo: '', + properties: [ + { key: 'file size', value: '101mb' }, + { key: 'Species', value: 'Canine' }, + { key: 'Species', value: 'Human' }, + ], + saveQuery: false, + queryName: '' + }; + const currData = { + ...prevData, + properties: [ + { key: 'file size', value: '101mb' }, + { key: 'Species', value: 'Canine' }, + ], + }; + const q = getQueryFromAdvancedData(currData, prevData); + expect(q).toBe('document pdf has:"file size":"101mb" has:"Species":"Canine"'); }); }); });