mirror of
https://github.com/stefanpejcic/openpanel
synced 2025-06-26 18:28:26 +00:00
149 lines
3.8 KiB
TypeScript
149 lines
3.8 KiB
TypeScript
import { RequestQueryBuilder, QuerySort } from "@nestjsx/crud-request";
|
|
import { CrudFilters, CrudSorting } from "@refinedev/core";
|
|
import { handleFilter, generateSort, handleSort } from "../../src/utils";
|
|
|
|
describe("handleSort", () => {
|
|
it("should not modify the query if no sorters are provided", () => {
|
|
let query = RequestQueryBuilder.create();
|
|
const initialQuery = query.query();
|
|
|
|
const sorters: CrudSorting = [];
|
|
|
|
query = handleSort(query, sorters);
|
|
|
|
expect(query.query()).toEqual(initialQuery);
|
|
});
|
|
|
|
it("should add sortBy to the query if sorters are provided", () => {
|
|
let query = RequestQueryBuilder.create();
|
|
|
|
const sorters: CrudSorting = [
|
|
{
|
|
field: "field1",
|
|
order: "asc",
|
|
},
|
|
{
|
|
field: "field2",
|
|
order: "desc",
|
|
},
|
|
];
|
|
|
|
query = handleSort(query, sorters);
|
|
|
|
const expectedSortBy = "sort[0]=field1,ASC&sort[1]=field2,DESC";
|
|
expect(decodeURIComponent(query.query())).toEqual(expectedSortBy);
|
|
});
|
|
|
|
it("should ignore invalid sort entries", () => {
|
|
let query = RequestQueryBuilder.create();
|
|
|
|
const sorters: CrudSorting = [
|
|
{
|
|
field: "field1",
|
|
order: "asc",
|
|
},
|
|
{
|
|
field: "",
|
|
order: "desc",
|
|
},
|
|
];
|
|
|
|
query = handleSort(query, sorters);
|
|
|
|
const expectedSortBy = "sort[0]=field1,ASC";
|
|
expect(decodeURIComponent(query.query())).toEqual(expectedSortBy);
|
|
});
|
|
|
|
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",
|
|
},
|
|
];
|
|
|
|
query = handleSort(query, sorters);
|
|
query = handleFilter(query, filters);
|
|
|
|
const expectedQuery =
|
|
'sort[0]=name,ASC&s={"$and":[{"age":{"$gte":18}},{"email":{"$eq":"john"}}]}';
|
|
|
|
expect(decodeURIComponent(query.query())).toEqual(expectedQuery);
|
|
});
|
|
});
|
|
|
|
describe("generateSort", () => {
|
|
it("should return undefined when no sorting is provided", () => {
|
|
expect(generateSort()).toBeUndefined();
|
|
});
|
|
|
|
it("should generate an array of sort objects when sorting is provided", () => {
|
|
const sort: CrudSorting = [
|
|
{
|
|
field: "field1",
|
|
order: "asc",
|
|
},
|
|
{
|
|
field: "field2",
|
|
order: "desc",
|
|
},
|
|
];
|
|
|
|
const expectedSort: QuerySort[] = [
|
|
{
|
|
field: "field1",
|
|
order: "ASC",
|
|
},
|
|
{
|
|
field: "field2",
|
|
order: "DESC",
|
|
},
|
|
];
|
|
|
|
expect(generateSort(sort)).toEqual(expectedSort);
|
|
});
|
|
|
|
it("should ignore invalid sort entries", () => {
|
|
const sort: CrudSorting = [
|
|
{
|
|
field: "field1",
|
|
order: "asc",
|
|
},
|
|
{
|
|
field: "",
|
|
order: "desc",
|
|
},
|
|
];
|
|
|
|
const expectedSort: QuerySort[] = [
|
|
{
|
|
field: "field1",
|
|
order: "ASC",
|
|
},
|
|
];
|
|
|
|
expect(generateSort(sort)).toEqual(expectedSort);
|
|
});
|
|
|
|
it("should return undefined when array is empty", () => {
|
|
const sort: CrudSorting = [];
|
|
|
|
expect(generateSort(sort)).toBeUndefined();
|
|
});
|
|
});
|