16718: Adds option to search for collection's past versions.
[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                 pastVersions: false,
19                 dateFrom: '',
20                 dateTo: '',
21                 properties: [{
22                     key: 'file size',
23                     value: '100mb'
24                 }, {
25                     key: 'user',
26                     value: 'daniel'
27                 }],
28                 saveQuery: false,
29                 queryName: ''
30             });
31         });
32
33         it('should correctly build advanced data record from query #2', () => {
34             const r = getAdvancedDataFromQuery('document from:2017-08-01 pdf has:"filesize":"101mb" is:trashed type:arvados#collection cluster:c97qx');
35             expect(r).toEqual({
36                 searchValue: 'document pdf',
37                 type: ResourceKind.COLLECTION,
38                 cluster: 'c97qx',
39                 projectUuid: undefined,
40                 inTrash: true,
41                 pastVersions: false,
42                 dateFrom: '2017-08-01',
43                 dateTo: '',
44                 properties: [{
45                     key: 'filesize',
46                     value: '101mb'
47                 }],
48                 saveQuery: false,
49                 queryName: ''
50             });
51         });
52     });
53
54     describe('getQueryFromAdvancedData', () => {
55         it('should build query from advanced data', () => {
56             const q = getQueryFromAdvancedData({
57                 searchValue: 'document pdf',
58                 type: ResourceKind.COLLECTION,
59                 cluster: 'c97qx',
60                 projectUuid: undefined,
61                 inTrash: true,
62                 pastVersions: false,
63                 dateFrom: '2017-08-01',
64                 dateTo: '',
65                 properties: [
66                     { key: 'file size', value: '101mb' },
67                     { key: 'Species', value: 'Human' },
68                     { key: 'Species', value: 'Canine' },
69                 ],
70                 saveQuery: false,
71                 queryName: ''
72             });
73             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"');
74         });
75
76         it('should add has:"key":"value" expression to query from same property key', () => {
77             const searchValue = 'document pdf has:"file size":"101mb" has:"Species":"Canine"';
78             const prevData = {
79                 searchValue,
80                 type: undefined,
81                 cluster: undefined,
82                 projectUuid: undefined,
83                 inTrash: false,
84                 pastVersions: false,
85                 dateFrom: '',
86                 dateTo: '',
87                 properties: [
88                     { key: 'file size', value: '101mb' },
89                     { key: 'Species', value: 'Canine' },
90                 ],
91                 saveQuery: false,
92                 queryName: ''
93             };
94             const currData = {
95                 ...prevData,
96                 properties: [
97                     { key: 'file size', value: '101mb' },
98                     { key: 'Species', value: 'Canine' },
99                     { key: 'Species', value: 'Human' },
100                 ],
101             };
102             const q = getQueryFromAdvancedData(currData, prevData);
103             expect(q).toBe('document pdf has:"file size":"101mb" has:"Species":"Canine" has:"Species":"Human"');
104         });
105
106         it('should add has:"keyID":"valueID" expression to query when necessary', () => {
107             const searchValue = 'document pdf has:"file size":"101mb"';
108             const prevData = {
109                 searchValue,
110                 type: undefined,
111                 cluster: undefined,
112                 projectUuid: undefined,
113                 inTrash: false,
114                 pastVersions: false,
115                 dateFrom: '',
116                 dateTo: '',
117                 properties: [
118                     { key: 'file size', value: '101mb' },
119                 ],
120                 saveQuery: false,
121                 queryName: ''
122             };
123             const currData = {
124                 ...prevData,
125                 properties: [
126                     { key: 'file size', value: '101mb' },
127                     { key: 'Species', keyID: 'IDTAGSPECIES', value: 'Human', valueID: 'IDVALHUMAN'},
128                 ],
129             };
130             const q = getQueryFromAdvancedData(currData, prevData);
131             expect(q).toBe('document pdf has:"file size":"101mb" has:"IDTAGSPECIES":"IDVALHUMAN"');
132         });
133
134         it('should remove has:"key":"value" expression from query', () => {
135             const searchValue = 'document pdf has:"file size":"101mb" has:"Species":"Human" has:"Species":"Canine"';
136             const prevData = {
137                 searchValue,
138                 type: undefined,
139                 cluster: undefined,
140                 projectUuid: undefined,
141                 inTrash: false,
142                 pastVersions: false,
143                 dateFrom: '',
144                 dateTo: '',
145                 properties: [
146                     { key: 'file size', value: '101mb' },
147                     { key: 'Species', value: 'Canine' },
148                     { key: 'Species', value: 'Human' },
149                 ],
150                 saveQuery: false,
151                 queryName: ''
152             };
153             const currData = {
154                 ...prevData,
155                 properties: [
156                     { key: 'file size', value: '101mb' },
157                     { key: 'Species', value: 'Canine' },
158                 ],
159             };
160             const q = getQueryFromAdvancedData(currData, prevData);
161             expect(q).toBe('document pdf has:"file size":"101mb" has:"Species":"Canine"');
162         });
163     });
164 });