15019: Changes joinFilters() to accept variable number of args.
[arvados-workbench2.git] / 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 'is_a' rule", () => {
40         expect(
41             filters.addIsA("etag", "etagValue").getFilters()
42         ).toEqual(`["etag","is_a","etagValue"]`);
43     });
44
45     it("should add 'is_a' rule for set", () => {
46         expect(
47             filters.addIsA("etag", ["etagValue1", "etagValue2"]).getFilters()
48         ).toEqual(`["etag","is_a",["etagValue1","etagValue2"]]`);
49     });
50
51     it("should add 'in' rule", () => {
52         expect(
53             filters.addIn("etag", "etagValue").getFilters()
54         ).toEqual(`["etag","in","etagValue"]`);
55     });
56
57     it("should add 'in' rule for set", () => {
58         expect(
59             filters.addIn("etag", ["etagValue1", "etagValue2"]).getFilters()
60         ).toEqual(`["etag","in",["etagValue1","etagValue2"]]`);
61     });
62
63     it("should add 'not in' rule for set", () => {
64         expect(
65             filters.addNotIn("etag", ["etagValue1", "etagValue2"]).getFilters()
66         ).toEqual(`["etag","not in",["etagValue1","etagValue2"]]`);
67     });
68
69     it("should add multiple rules", () => {
70         expect(
71             filters
72                 .addIn("etag", ["etagValue1", "etagValue2"])
73                 .addEqual("href", "hrefValue")
74                 .getFilters()
75         ).toEqual(`["etag","in",["etagValue1","etagValue2"]],["href","=","hrefValue"]`);
76     });
77
78     it("should add attribute prefix", () => {
79         expect(new FilterBuilder()
80             .addIn("etag", ["etagValue1", "etagValue2"], "myPrefix")
81             .getFilters())
82             .toEqual(`["myPrefix.etag","in",["etagValue1","etagValue2"]]`);
83     });
84
85     it('should add full text search', () => {
86         expect(
87             new FilterBuilder()
88                 .addFullTextSearch('my custom search')
89                 .getFilters()
90         ).toEqual(`["any","ilike","%my%"],["any","ilike","%custom%"],["any","ilike","%search%"]`);
91     });
92 });