125 lines
4.9 KiB
TypeScript
125 lines
4.9 KiB
TypeScript
import { describe, it, vi, expect } from "vitest";
|
|
|
|
import {
|
|
FormFieldsBaseConfig,
|
|
AttributesBaseConfig,
|
|
} from "../components/react-awesome-query-builder/config/config";
|
|
|
|
vi.mock("../components/react-awesome-query-builder/widgets", () => ({
|
|
default: {},
|
|
}));
|
|
vi.mock("@calcom/ui", () => ({}));
|
|
|
|
const assertCommonStructure = (config: any) => {
|
|
expect(config).toHaveProperty("conjunctions");
|
|
expect(config).toHaveProperty("operators");
|
|
expect(config).toHaveProperty("types");
|
|
expect(config).toHaveProperty("widgets");
|
|
expect(config).toHaveProperty("settings");
|
|
};
|
|
|
|
const assertCommonWidgetTypes = (config: any) => {
|
|
expect(config.widgets).toHaveProperty("text");
|
|
expect(config.widgets).toHaveProperty("textarea");
|
|
expect(config.widgets).toHaveProperty("number");
|
|
expect(config.widgets).toHaveProperty("multiselect");
|
|
expect(config.widgets).toHaveProperty("select");
|
|
expect(config.widgets).toHaveProperty("phone");
|
|
expect(config.widgets).toHaveProperty("email");
|
|
};
|
|
|
|
const assertSelectOperators = (config: any) => {
|
|
expect(config.operators).toHaveProperty("select_any_in");
|
|
expect(config.operators).toHaveProperty("select_not_any_in");
|
|
expect(config.operators).toHaveProperty("select_equals");
|
|
expect(config.operators).toHaveProperty("select_not_equals");
|
|
|
|
// Verify corresponding widgets for select operators
|
|
expect(config.types.select.widgets.multiselect.operators).toContain("select_any_in");
|
|
expect(config.types.select.widgets.multiselect.operators).toContain("select_not_any_in");
|
|
|
|
// Important to verify that select_equals and select_not_equals are not present in multiselect as that might cause multiselect widget operand to show up for these operators
|
|
expect(config.types.select.widgets.multiselect.operators).not.toContain("select_equals");
|
|
expect(config.types.select.widgets.multiselect.operators).not.toContain("select_not_equals");
|
|
|
|
expect(config.types.select.widgets.select.operators).toContain("select_equals");
|
|
expect(config.types.select.widgets.select.operators).toContain("select_not_equals");
|
|
|
|
// Important to verify that select_any_in and select_not_any_in are not present in select as that might cause select widget operand to show up for these operators
|
|
expect(config.types.select.widgets.select.operators).not.toContain("select_any_in");
|
|
expect(config.types.select.widgets.select.operators).not.toContain("select_not_any_in");
|
|
};
|
|
|
|
const assertMaxNesting = (config: any, value: number) => {
|
|
expect(config.settings.maxNesting).toBe(value);
|
|
};
|
|
|
|
describe("Query Builder Config", () => {
|
|
describe("FormFieldsBaseConfig", () => {
|
|
it("should have the correct structure", () => {
|
|
assertCommonStructure(FormFieldsBaseConfig);
|
|
});
|
|
|
|
it("should not support multiselect_some_in and multiselect_not_some_in - because they are not supported in Prisma for reporting(probably)", () => {
|
|
expect(FormFieldsBaseConfig.types.multiselect.widgets.multiselect.operators).not.toContain(
|
|
"multiselect_some_in"
|
|
);
|
|
expect(FormFieldsBaseConfig.types.multiselect.widgets.multiselect.operators).not.toContain(
|
|
"multiselect_not_some_in"
|
|
);
|
|
});
|
|
|
|
it("should support select_any_in, select_not_any_in, select_equals, select_not_equals - Verify both types.widgets and operators", () => {
|
|
assertSelectOperators(FormFieldsBaseConfig);
|
|
});
|
|
|
|
it("should have specific widget types", () => {
|
|
assertCommonWidgetTypes(FormFieldsBaseConfig);
|
|
});
|
|
|
|
it("should have maxNesting set to 1 in settings", () => {
|
|
assertMaxNesting(FormFieldsBaseConfig, 1);
|
|
});
|
|
});
|
|
|
|
describe("AttributesBaseConfig", () => {
|
|
it("should have the correct structure", () => {
|
|
assertCommonStructure(AttributesBaseConfig);
|
|
});
|
|
|
|
it("should support multiselect_some_in and multiselect_not_some_in operators for multiselect", () => {
|
|
expect(AttributesBaseConfig.types.multiselect.widgets.multiselect.operators).toContain(
|
|
"multiselect_some_in"
|
|
);
|
|
expect(AttributesBaseConfig.types.multiselect.widgets.multiselect.operators).toContain(
|
|
"multiselect_not_some_in"
|
|
);
|
|
|
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
// @ts-ignore
|
|
const jsonLogic = AttributesBaseConfig.operators.multiselect_some_in.jsonLogic(
|
|
["A"],
|
|
"multiselect_some_in",
|
|
["A", "B"]
|
|
);
|
|
|
|
// Verifies that it is using some-in implementation
|
|
expect(jsonLogic).toEqual({
|
|
some: [["A"], { in: [{ var: "" }, ["A", "B"]] }],
|
|
});
|
|
});
|
|
|
|
it("should support select_any_in, select_not_any_in, select_equals, select_not_equals - Verify both types.widgets and operators", () => {
|
|
assertSelectOperators(AttributesBaseConfig);
|
|
});
|
|
|
|
it("should have specific widget types", () => {
|
|
assertCommonWidgetTypes(AttributesBaseConfig);
|
|
});
|
|
|
|
it("should have maxNesting set to 1 in settings", () => {
|
|
assertMaxNesting(AttributesBaseConfig, 1);
|
|
});
|
|
});
|
|
});
|