19069: Fix tests
[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, buildProcessStatusFilters, ProcessStatusFilter } from './resource-type-filters';
6 import { ResourceKind } from 'models/resource';
7 import { deselectNode } from 'models/tree';
8 import { pipe } from 'lodash/fp';
9 import { FilterBuilder } from 'services/api/filter-builder';
10
11 describe("buildProcessStatusFilters", () => {
12     [
13         [ProcessStatusFilter.ALL, ""],
14         [ProcessStatusFilter.ONHOLD, `["state","!=","Final"],["priority","=","0"],["container.state","in",["Queued","Locked"]]`],
15         [ProcessStatusFilter.COMPLETED, `["container.state","=","Complete"],["container.exit_code","=","0"]`],
16         [ProcessStatusFilter.FAILED, `["container.state","=","Complete"],["container.exit_code","!=","0"]`],
17         [ProcessStatusFilter.QUEUED, `["container.state","=","Queued"],["priority","!=","0"]`],
18         [ProcessStatusFilter.CANCELLED, `["container.state","=","Cancelled"]`],
19         [ProcessStatusFilter.RUNNING, `["container.state","=","Running"]`],
20     ].forEach(([status, expected]) => {
21         it(`can filter "${status}" processes`, () => {
22             const filters = buildProcessStatusFilters(new FilterBuilder(), status);
23             expect(filters.getFilters())
24                 .toEqual(expected);
25         })
26     });
27 });
28
29 describe("serializeResourceTypeFilters", () => {
30     it("should serialize all filters", () => {
31         const filters = getInitialResourceTypeFilters();
32         const serializedFilters = serializeResourceTypeFilters(filters);
33         expect(serializedFilters)
34             .toEqual(`["uuid","is_a",["${ResourceKind.PROJECT}","${ResourceKind.PROCESS}","${ResourceKind.COLLECTION}"]]`);
35     });
36
37     it("should serialize all but collection filters", () => {
38         const filters = deselectNode(ObjectTypeFilter.COLLECTION)(getInitialResourceTypeFilters());
39         const serializedFilters = serializeResourceTypeFilters(filters);
40         expect(serializedFilters)
41             .toEqual(`["uuid","is_a",["${ResourceKind.PROJECT}","${ResourceKind.PROCESS}"]]`);
42     });
43
44     it("should serialize output collections and projects", () => {
45         const filters = pipe(
46             () => getInitialResourceTypeFilters(),
47             deselectNode(ObjectTypeFilter.PROCESS),
48             deselectNode(CollectionTypeFilter.GENERAL_COLLECTION),
49             deselectNode(CollectionTypeFilter.LOG_COLLECTION),
50         )();
51
52         const serializedFilters = serializeResourceTypeFilters(filters);
53         expect(serializedFilters)
54             .toEqual(`["uuid","is_a",["${ResourceKind.PROJECT}","${ResourceKind.COLLECTION}"]],["collections.properties.type","in",["output"]]`);
55     });
56
57     it("should serialize general and log collections", () => {
58         const filters = pipe(
59             () => getInitialResourceTypeFilters(),
60             deselectNode(ObjectTypeFilter.PROJECT),
61             deselectNode(ObjectTypeFilter.PROCESS),
62             deselectNode(CollectionTypeFilter.OUTPUT_COLLECTION)
63         )();
64
65         const serializedFilters = serializeResourceTypeFilters(filters);
66         expect(serializedFilters)
67             .toEqual(`["uuid","is_a",["${ResourceKind.COLLECTION}"]],["collections.properties.type","not in",["output"]]`);
68     });
69
70     it("should serialize only main processes", () => {
71         const filters = pipe(
72             () => getInitialResourceTypeFilters(),
73             deselectNode(ObjectTypeFilter.PROJECT),
74             deselectNode(ProcessTypeFilter.CHILD_PROCESS),
75             deselectNode(ObjectTypeFilter.COLLECTION)
76         )();
77
78         const serializedFilters = serializeResourceTypeFilters(filters);
79         expect(serializedFilters)
80             .toEqual(`["uuid","is_a",["${ResourceKind.PROCESS}"]],["container_requests.requesting_container_uuid","=",null]`);
81     });
82
83     it("should serialize only child processes", () => {
84         const filters = pipe(
85             () => getInitialResourceTypeFilters(),
86             deselectNode(ObjectTypeFilter.PROJECT),
87             deselectNode(ProcessTypeFilter.MAIN_PROCESS),
88             deselectNode(ObjectTypeFilter.COLLECTION)
89         )();
90
91         const serializedFilters = serializeResourceTypeFilters(filters);
92         expect(serializedFilters)
93             .toEqual(`["uuid","is_a",["${ResourceKind.PROCESS}"]],["container_requests.requesting_container_uuid","!=",null]`);
94     });
95
96     it("should serialize all project types", () => {
97         const filters = pipe(
98             () => getInitialResourceTypeFilters(),
99             deselectNode(ObjectTypeFilter.PROCESS),
100             deselectNode(ObjectTypeFilter.COLLECTION),
101         )();
102
103         const serializedFilters = serializeResourceTypeFilters(filters);
104         expect(serializedFilters)
105             .toEqual(`["uuid","is_a",["${ResourceKind.GROUP}"]]`);
106     });
107
108     it("should serialize filter groups", () => {
109         const filters = pipe(
110             () => getInitialResourceTypeFilters(),
111             deselectNode(GroupTypeFilter.PROJECT),
112             deselectNode(ObjectTypeFilter.PROCESS),
113             deselectNode(ObjectTypeFilter.COLLECTION),
114         )();
115
116         const serializedFilters = serializeResourceTypeFilters(filters);
117         expect(serializedFilters)
118             .toEqual(`["uuid","is_a",["${ResourceKind.GROUP}"]],["groups.group_class","=","filter"]`);
119     });
120
121     it("should serialize projects (normal)", () => {
122         const filters = pipe(
123             () => getInitialResourceTypeFilters(),
124             deselectNode(GroupTypeFilter.FILTER_GROUP),
125             deselectNode(ObjectTypeFilter.PROCESS),
126             deselectNode(ObjectTypeFilter.COLLECTION),
127         )();
128
129         const serializedFilters = serializeResourceTypeFilters(filters);
130         expect(serializedFilters)
131             .toEqual(`["uuid","is_a",["${ResourceKind.GROUP}"]],["groups.group_class","=","project"]`);
132     });
133
134 });