--- /dev/null
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+import FilterBuilder from "./filter-builder";
+
+describe("FilterBuilder", () => {
+
+ let filters: FilterBuilder;
+
+ beforeEach(() => {
+ filters = FilterBuilder.create();
+ });
+
+ it("should add 'equal' rule", () => {
+ expect(
+ filters.addEqual("etag", "etagValue").serialize()
+ ).toEqual(`[["etag","=","etagValue"]]`);
+ });
+
+ it("should add 'like' rule", () => {
+ expect(
+ filters.addLike("etag", "etagValue").serialize()
+ ).toEqual(`[["etag","like","%etagValue%"]]`);
+ });
+
+ it("should add 'ilike' rule", () => {
+ expect(
+ filters.addILike("etag", "etagValue").serialize()
+ ).toEqual(`[["etag","ilike","%etagValue%"]]`);
+ });
+
+ it("should add 'is_a' rule", () => {
+ expect(
+ filters.addIsA("etag", "etagValue").serialize()
+ ).toEqual(`[["etag","is_a","etagValue"]]`);
+ });
+
+ it("should add 'is_a' rule for set", () => {
+ expect(
+ filters.addIsA("etag", ["etagValue1", "etagValue2"]).serialize()
+ ).toEqual(`[["etag","is_a",["etagValue1","etagValue2"]]]`);
+ });
+
+ it("should add 'in' rule", () => {
+ expect(
+ filters.addIn("etag", "etagValue").serialize()
+ ).toEqual(`[["etag","in","etagValue"]]`);
+ });
+
+ it("should add 'in' rule for set", () => {
+ expect(
+ filters.addIn("etag", ["etagValue1", "etagValue2"]).serialize()
+ ).toEqual(`[["etag","in",["etagValue1","etagValue2"]]]`);
+ });
+
+ it("should add multiple rules", () => {
+ expect(
+ filters
+ .addIn("etag", ["etagValue1", "etagValue2"])
+ .addEqual("href", "hrefValue")
+ .serialize()
+ ).toEqual(`[["etag","in",["etagValue1","etagValue2"]],["href","=","hrefValue"]]`);
+ });
+
+ it("should concatenate multiple builders", () => {
+ expect(
+ filters
+ .concat(FilterBuilder.create().addIn("etag", ["etagValue1", "etagValue2"]))
+ .concat(FilterBuilder.create().addEqual("href", "hrefValue"))
+ .serialize()
+ ).toEqual(`[["etag","in",["etagValue1","etagValue2"]],["href","=","hrefValue"]]`);
+ });
+
+ it("should add attribute prefix", () => {
+ expect(FilterBuilder
+ .create("myPrefix")
+ .addIn("etag", ["etagValue1", "etagValue2"])
+ .serialize())
+ .toEqual(`[["my_prefix.etag","in",["etagValue1","etagValue2"]]]`);
+ });
+
+
+
+
+});