Merge branch '17426-plug-ins' refs #17426
[arvados-workbench2.git] / src / store / resource-type-filters / resource-type-filters.test.ts
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import { getInitialResourceTypeFilters, serializeResourceTypeFilters, ObjectTypeFilter, CollectionTypeFilter, ProcessTypeFilter, GroupTypeFilter } from './resource-type-filters';
6 import { ResourceKind } from '~/models/resource';
7 import { deselectNode } from '~/models/tree';
8 import { pipe } from 'lodash/fp';
9
10 describe("serializeResourceTypeFilters", () => {
11     it("should serialize all filters", () => {
12         const filters = getInitialResourceTypeFilters();
13         const serializedFilters = serializeResourceTypeFilters(filters);
14         expect(serializedFilters)
15             .toEqual(`["uuid","is_a",["${ResourceKind.PROJECT}","${ResourceKind.PROCESS}","${ResourceKind.COLLECTION}"]]`);
16     });
17
18     it("should serialize all but collection filters", () => {
19         const filters = deselectNode(ObjectTypeFilter.COLLECTION)(getInitialResourceTypeFilters());
20         const serializedFilters = serializeResourceTypeFilters(filters);
21         expect(serializedFilters)
22             .toEqual(`["uuid","is_a",["${ResourceKind.PROJECT}","${ResourceKind.PROCESS}"]]`);
23     });
24
25     it("should serialize output collections and projects", () => {
26         const filters = pipe(
27             () => getInitialResourceTypeFilters(),
28             deselectNode(ObjectTypeFilter.PROCESS),
29             deselectNode(CollectionTypeFilter.GENERAL_COLLECTION),
30             deselectNode(CollectionTypeFilter.LOG_COLLECTION),
31         )();
32
33         const serializedFilters = serializeResourceTypeFilters(filters);
34         expect(serializedFilters)
35             .toEqual(`["uuid","is_a",["${ResourceKind.PROJECT}","${ResourceKind.COLLECTION}"]],["collections.properties.type","in",["output"]]`);
36     });
37
38     it("should serialize general and log collections", () => {
39         const filters = pipe(
40             () => getInitialResourceTypeFilters(),
41             deselectNode(ObjectTypeFilter.PROJECT),
42             deselectNode(ObjectTypeFilter.PROCESS),
43             deselectNode(CollectionTypeFilter.OUTPUT_COLLECTION)
44         )();
45
46         const serializedFilters = serializeResourceTypeFilters(filters);
47         expect(serializedFilters)
48             .toEqual(`["uuid","is_a",["${ResourceKind.COLLECTION}"]],["collections.properties.type","not in",["output"]]`);
49     });
50
51     it("should serialize only main processes", () => {
52         const filters = pipe(
53             () => getInitialResourceTypeFilters(),
54             deselectNode(ObjectTypeFilter.PROJECT),
55             deselectNode(ProcessTypeFilter.CHILD_PROCESS),
56             deselectNode(ObjectTypeFilter.COLLECTION)
57         )();
58
59         const serializedFilters = serializeResourceTypeFilters(filters);
60         expect(serializedFilters)
61             .toEqual(`["uuid","is_a",["${ResourceKind.PROCESS}"]],["container_requests.requesting_container_uuid","=",null]`);
62     });
63
64     it("should serialize only child processes", () => {
65         const filters = pipe(
66             () => getInitialResourceTypeFilters(),
67             deselectNode(ObjectTypeFilter.PROJECT),
68             deselectNode(ProcessTypeFilter.MAIN_PROCESS),
69             deselectNode(ObjectTypeFilter.COLLECTION)
70         )();
71
72         const serializedFilters = serializeResourceTypeFilters(filters);
73         expect(serializedFilters)
74             .toEqual(`["uuid","is_a",["${ResourceKind.PROCESS}"]],["container_requests.requesting_container_uuid","!=",null]`);
75     });
76
77     it("should serialize all project types", () => {
78         const filters = pipe(
79             () => getInitialResourceTypeFilters(),
80             deselectNode(ObjectTypeFilter.PROCESS),
81             deselectNode(ObjectTypeFilter.COLLECTION),
82         )();
83
84         const serializedFilters = serializeResourceTypeFilters(filters);
85         expect(serializedFilters)
86             .toEqual(`["uuid","is_a",["${ResourceKind.GROUP}"]]`);
87     });
88
89     it("should serialize filter groups", () => {
90         const filters = pipe(
91             () => getInitialResourceTypeFilters(),
92             deselectNode(GroupTypeFilter.PROJECT)
93             deselectNode(ObjectTypeFilter.PROCESS),
94             deselectNode(ObjectTypeFilter.COLLECTION),
95         )();
96
97         const serializedFilters = serializeResourceTypeFilters(filters);
98         expect(serializedFilters)
99             .toEqual(`["uuid","is_a",["${ResourceKind.GROUP}"]],["groups.group_class","=","filter"]`);
100     });
101
102     it("should serialize projects (normal)", () => {
103         const filters = pipe(
104             () => getInitialResourceTypeFilters(),
105             deselectNode(GroupTypeFilter.FILTER_GROUP)
106             deselectNode(ObjectTypeFilter.PROCESS),
107             deselectNode(ObjectTypeFilter.COLLECTION),
108         )();
109
110         const serializedFilters = serializeResourceTypeFilters(filters);
111         expect(serializedFilters)
112             .toEqual(`["uuid","is_a",["${ResourceKind.GROUP}"]],["groups.group_class","=","project"]`);
113     });
114
115 });