15781: Fixes property removal on the advanced search editor.
[arvados-workbench2.git] / src / store / search-bar / search-bar-actions.test.ts
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import { getAdvancedDataFromQuery, getQueryFromAdvancedData } from "~/store/search-bar/search-bar-actions";
6 import { ResourceKind } from "~/models/resource";
7
8 describe('search-bar-actions', () => {
9     describe('getAdvancedDataFromQuery', () => {
10         it('should correctly build advanced data record from query #1', () => {
11             const r = getAdvancedDataFromQuery('val0 has:"file size":"100mb" val2 has:"user":"daniel" is:starred val2 val0 is:trashed');
12             expect(r).toEqual({
13                 searchValue: 'val0 val2',
14                 type: undefined,
15                 cluster: undefined,
16                 projectUuid: undefined,
17                 inTrash: true,
18                 dateFrom: '',
19                 dateTo: '',
20                 properties: [{
21                     key: 'file size',
22                     value: '100mb'
23                 }, {
24                     key: 'user',
25                     value: 'daniel'
26                 }],
27                 saveQuery: false,
28                 queryName: ''
29             });
30         });
31
32         it('should correctly build advanced data record from query #2', () => {
33             const r = getAdvancedDataFromQuery('document from:2017-08-01 pdf has:"filesize":"101mb" is:trashed type:arvados#collection cluster:c97qx');
34             expect(r).toEqual({
35                 searchValue: 'document pdf',
36                 type: ResourceKind.COLLECTION,
37                 cluster: 'c97qx',
38                 projectUuid: undefined,
39                 inTrash: true,
40                 dateFrom: '2017-08-01',
41                 dateTo: '',
42                 properties: [{
43                     key: 'filesize',
44                     value: '101mb'
45                 }],
46                 saveQuery: false,
47                 queryName: ''
48             });
49         });
50     });
51
52     describe('getQueryFromAdvancedData', () => {
53         it('should build query from advanced data', () => {
54             const q = getQueryFromAdvancedData({
55                 searchValue: 'document pdf',
56                 type: ResourceKind.COLLECTION,
57                 cluster: 'c97qx',
58                 projectUuid: undefined,
59                 inTrash: true,
60                 dateFrom: '2017-08-01',
61                 dateTo: '',
62                 properties: [
63                     { key: 'file size', value: '101mb' },
64                     { key: 'Species', value: 'Human' },
65                     { key: 'Species', value: 'Canine' },
66                 ],
67                 saveQuery: false,
68                 queryName: ''
69             });
70             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"');
71         });
72
73         it('should add has:"key":"value" expression to query from same property key', () => {
74             const searchValue = 'document pdf has:"file size":"101mb" has:"Species":"Canine"';
75             const prevData = {
76                 searchValue,
77                 type: undefined,
78                 cluster: undefined,
79                 projectUuid: undefined,
80                 inTrash: false,
81                 dateFrom: '',
82                 dateTo: '',
83                 properties: [
84                     { key: 'file size', value: '101mb' },
85                     { key: 'Species', value: 'Canine' },
86                 ],
87                 saveQuery: false,
88                 queryName: ''
89             };
90             const currData = {
91                 ...prevData,
92                 properties: [
93                     { key: 'file size', value: '101mb' },
94                     { key: 'Species', value: 'Canine' },
95                     { key: 'Species', value: 'Human' },
96                 ],
97             };
98             const q = getQueryFromAdvancedData(currData, prevData);
99             expect(q).toBe('document pdf has:"file size":"101mb" has:"Species":"Canine" has:"Species":"Human"');
100         });
101
102         it('should add has:"keyID":"valueID" expression to query when necessary', () => {
103             const searchValue = 'document pdf has:"file size":"101mb"';
104             const prevData = {
105                 searchValue,
106                 type: undefined,
107                 cluster: undefined,
108                 projectUuid: undefined,
109                 inTrash: false,
110                 dateFrom: '',
111                 dateTo: '',
112                 properties: [
113                     { key: 'file size', value: '101mb' },
114                 ],
115                 saveQuery: false,
116                 queryName: ''
117             };
118             const currData = {
119                 ...prevData,
120                 properties: [
121                     { key: 'file size', value: '101mb' },
122                     { key: 'Species', keyID: 'IDTAGSPECIES', value: 'Human', valueID: 'IDVALHUMAN'},
123                 ],
124             };
125             const q = getQueryFromAdvancedData(currData, prevData);
126             expect(q).toBe('document pdf has:"file size":"101mb" has:"IDTAGSPECIES":"IDVALHUMAN"');
127         });
128
129         it('should remove has:"key":"value" expression from query', () => {
130             const searchValue = 'document pdf has:"file size":"101mb" has:"Species":"Human" has:"Species":"Canine"';
131             const prevData = {
132                 searchValue,
133                 type: undefined,
134                 cluster: undefined,
135                 projectUuid: undefined,
136                 inTrash: false,
137                 dateFrom: '',
138                 dateTo: '',
139                 properties: [
140                     { key: 'file size', value: '101mb' },
141                     { key: 'Species', value: 'Canine' },
142                     { key: 'Species', value: 'Human' },
143                 ],
144                 saveQuery: false,
145                 queryName: ''
146             };
147             const currData = {
148                 ...prevData,
149                 properties: [
150                     { key: 'file size', value: '101mb' },
151                     { key: 'Species', value: 'Canine' },
152                 ],
153             };
154             const q = getQueryFromAdvancedData(currData, prevData);
155             expect(q).toBe('document pdf has:"file size":"101mb" has:"Species":"Canine"');
156         });
157     });
158 });