openpanel/packages/nestjsx-crud/test/utils/handleJoin.spec.ts
Stefan Pejcic 8595a9f4e5 back
2024-05-08 19:58:53 +02:00

83 lines
2.3 KiB
TypeScript

import {
RequestQueryBuilder,
QueryJoin,
QueryJoinArr,
} from "@nestjsx/crud-request";
import { handleFilter, handleJoin, handleSort } from "../../src/utils";
import { CrudFilters, CrudSorting } from "@refinedev/core";
describe("handleJoin", () => {
it("should apply join to the query", () => {
let query = RequestQueryBuilder.create();
const join: QueryJoin | QueryJoinArr | (QueryJoin | QueryJoinArr)[] = [
{
field: "profile",
select: ["name", "age"],
},
{
field: "posts",
select: ["title", "content"],
},
];
query = handleJoin(query, join);
expect(decodeURIComponent(query.query())).toEqual(
"join[0]=profile||name,age&join[1]=posts||title,content",
);
});
it("should not apply join if none is provided", () => {
let query = RequestQueryBuilder.create();
query = handleJoin(query);
expect(query.query()).toEqual("");
});
it("should work with complex sort and filter parameters", () => {
let query = RequestQueryBuilder.create();
const sorters: CrudSorting = [
{
field: "name",
order: "asc",
},
];
const filters: CrudFilters = [
{
field: "age",
operator: "gte",
value: 18,
},
{
field: "email",
operator: "eq",
value: "john",
},
];
const join: QueryJoin | QueryJoinArr | (QueryJoin | QueryJoinArr)[] = [
{
field: "profile",
select: ["name", "age"],
},
{
field: "posts",
select: ["title", "content"],
},
];
query = handleJoin(query, join);
query = handleSort(query, sorters);
query = handleFilter(query, filters);
const expectedQuery =
'join[0]=profile||name,age&join[1]=posts||title,content&sort[0]=name,ASC&s={"$and":[{"age":{"$gte":18}},{"email":{"$eq":"john"}}]}';
expect(decodeURIComponent(query.query())).toEqual(expectedQuery);
});
});