1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
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';
11 describe("buildProcessStatusFilters", () => {
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())
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}"]]`);
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}"]]`);
44 it("should serialize output collections and projects", () => {
46 () => getInitialResourceTypeFilters(),
47 deselectNode(ObjectTypeFilter.PROCESS),
48 deselectNode(CollectionTypeFilter.GENERAL_COLLECTION),
49 deselectNode(CollectionTypeFilter.LOG_COLLECTION),
52 const serializedFilters = serializeResourceTypeFilters(filters);
53 expect(serializedFilters)
54 .toEqual(`["uuid","is_a",["${ResourceKind.PROJECT}","${ResourceKind.COLLECTION}"]],["collections.properties.type","in",["output"]]`);
57 it("should serialize general and log collections", () => {
59 () => getInitialResourceTypeFilters(),
60 deselectNode(ObjectTypeFilter.PROJECT),
61 deselectNode(ObjectTypeFilter.PROCESS),
62 deselectNode(CollectionTypeFilter.OUTPUT_COLLECTION)
65 const serializedFilters = serializeResourceTypeFilters(filters);
66 expect(serializedFilters)
67 .toEqual(`["uuid","is_a",["${ResourceKind.COLLECTION}"]],["collections.properties.type","not in",["output"]]`);
70 it("should serialize only main processes", () => {
72 () => getInitialResourceTypeFilters(),
73 deselectNode(ObjectTypeFilter.PROJECT),
74 deselectNode(ProcessTypeFilter.CHILD_PROCESS),
75 deselectNode(ObjectTypeFilter.COLLECTION)
78 const serializedFilters = serializeResourceTypeFilters(filters);
79 expect(serializedFilters)
80 .toEqual(`["uuid","is_a",["${ResourceKind.PROCESS}"]],["container_requests.requesting_container_uuid","=",null]`);
83 it("should serialize only child processes", () => {
85 () => getInitialResourceTypeFilters(),
86 deselectNode(ObjectTypeFilter.PROJECT),
87 deselectNode(ProcessTypeFilter.MAIN_PROCESS),
88 deselectNode(ObjectTypeFilter.COLLECTION)
91 const serializedFilters = serializeResourceTypeFilters(filters);
92 expect(serializedFilters)
93 .toEqual(`["uuid","is_a",["${ResourceKind.PROCESS}"]],["container_requests.requesting_container_uuid","!=",null]`);
96 it("should serialize all project types", () => {
98 () => getInitialResourceTypeFilters(),
99 deselectNode(ObjectTypeFilter.PROCESS),
100 deselectNode(ObjectTypeFilter.COLLECTION),
103 const serializedFilters = serializeResourceTypeFilters(filters);
104 expect(serializedFilters)
105 .toEqual(`["uuid","is_a",["${ResourceKind.GROUP}"]]`);
108 it("should serialize filter groups", () => {
109 const filters = pipe(
110 () => getInitialResourceTypeFilters(),
111 deselectNode(GroupTypeFilter.PROJECT),
112 deselectNode(ObjectTypeFilter.PROCESS),
113 deselectNode(ObjectTypeFilter.COLLECTION),
116 const serializedFilters = serializeResourceTypeFilters(filters);
117 expect(serializedFilters)
118 .toEqual(`["uuid","is_a",["${ResourceKind.GROUP}"]],["groups.group_class","=","filter"]`);
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),
129 const serializedFilters = serializeResourceTypeFilters(filters);
130 expect(serializedFilters)
131 .toEqual(`["uuid","is_a",["${ResourceKind.GROUP}"]],["groups.group_class","=","project"]`);