21700: Install Bundler system-wide in Rails postinst
[arvados.git] / services / workbench2 / src / services / api / filter-builder.test.ts
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import { FilterBuilder } from "./filter-builder";
6
7 describe("FilterBuilder", () => {
8
9     let filters: FilterBuilder;
10
11     beforeEach(() => {
12         filters = new FilterBuilder();
13     });
14
15     it("should add 'equal' rule (string)", () => {
16         expect(
17             filters.addEqual("etag", "etagValue").getFilters()
18         ).toEqual(`["etag","=","etagValue"]`);
19     });
20
21     it("should add 'equal' rule (boolean)", () => {
22         expect(
23             filters.addEqual("is_trashed", true).getFilters()
24         ).toEqual(`["is_trashed","=",true]`);
25     });
26
27     it("should add 'like' rule", () => {
28         expect(
29             filters.addLike("etag", "etagValue").getFilters()
30         ).toEqual(`["etag","like","%etagValue%"]`);
31     });
32
33     it("should add 'ilike' rule", () => {
34         expect(
35             filters.addILike("etag", "etagValue").getFilters()
36         ).toEqual(`["etag","ilike","%etagValue%"]`);
37     });
38
39     it("should add 'contains' rule", () => {
40         expect(
41             filters.addContains("properties.someProp", "someValue").getFilters()
42         ).toEqual(`["properties.someProp","contains","someValue"]`);
43     });
44
45     it("should add 'is_a' rule", () => {
46         expect(
47             filters.addIsA("etag", "etagValue").getFilters()
48         ).toEqual(`["etag","is_a","etagValue"]`);
49     });
50
51     it("should add 'is_a' rule for set", () => {
52         expect(
53             filters.addIsA("etag", ["etagValue1", "etagValue2"]).getFilters()
54         ).toEqual(`["etag","is_a",["etagValue1","etagValue2"]]`);
55     });
56
57     it("should add 'in' rule", () => {
58         expect(
59             filters.addIn("etag", "etagValue").getFilters()
60         ).toEqual(`["etag","in","etagValue"]`);
61     });
62
63     it("should add 'in' rule for set", () => {
64         expect(
65             filters.addIn("etag", ["etagValue1", "etagValue2"]).getFilters()
66         ).toEqual(`["etag","in",["etagValue1","etagValue2"]]`);
67     });
68
69     it("should add 'not in' rule for set", () => {
70         expect(
71             filters.addNotIn("etag", ["etagValue1", "etagValue2"]).getFilters()
72         ).toEqual(`["etag","not in",["etagValue1","etagValue2"]]`);
73     });
74
75     it("should add multiple rules", () => {
76         expect(
77             filters
78                 .addIn("etag", ["etagValue1", "etagValue2"])
79                 .addEqual("href", "hrefValue")
80                 .getFilters()
81         ).toEqual(`["etag","in",["etagValue1","etagValue2"]],["href","=","hrefValue"]`);
82     });
83
84     it("should add attribute prefix", () => {
85         expect(new FilterBuilder()
86             .addIn("etag", ["etagValue1", "etagValue2"], "myPrefix")
87             .getFilters())
88             .toEqual(`["myPrefix.etag","in",["etagValue1","etagValue2"]]`);
89     });
90
91     it('should add full text search', () => {
92         expect(
93             new FilterBuilder()
94                 .addFullTextSearch('my custom search')
95                 .getFilters()
96         ).toEqual(`["any","ilike","%my%"],["any","ilike","%custom%"],["any","ilike","%search%"]`);
97     });
98 });