259 lines
9.2 KiB
TypeScript
259 lines
9.2 KiB
TypeScript
import gql from "graphql-tag";
|
|
|
|
import dataProvider from "../../src/index";
|
|
import client from "../gqlClient";
|
|
|
|
import "./index.mock";
|
|
|
|
describe("getList", () => {
|
|
describe("gql", () => {
|
|
it("correct response for query", async () => {
|
|
const { data, total } = await dataProvider(client).getList<{
|
|
id: string;
|
|
status: string;
|
|
category: { id: string };
|
|
}>({
|
|
resource: "blog_posts",
|
|
pagination: {
|
|
current: 2,
|
|
pageSize: 5,
|
|
mode: "server",
|
|
},
|
|
filters: [
|
|
{ field: "id", operator: "lt", value: 500 },
|
|
{ field: "status", operator: "eq", value: "PUBLISHED" },
|
|
{ field: "category.id", operator: "eq", value: 1 },
|
|
],
|
|
sorters: [{ field: "id", order: "desc" }],
|
|
meta: {
|
|
gqlQuery: gql`
|
|
query BlogPostsList(
|
|
$paging: OffsetPaging!
|
|
$filter: BlogPostFilter
|
|
$sorting: [BlogPostSort!]!
|
|
) {
|
|
blogPosts(
|
|
paging: $paging
|
|
filter: $filter
|
|
sorting: $sorting
|
|
) {
|
|
nodes {
|
|
id
|
|
status
|
|
category {
|
|
id
|
|
}
|
|
}
|
|
totalCount
|
|
}
|
|
}
|
|
`,
|
|
},
|
|
});
|
|
|
|
expect(total).toBe(13);
|
|
expect(data.length).toBe(5);
|
|
expect(+data[0].id).toBeGreaterThan(+data[1].id);
|
|
data.forEach((item) => expect(item.status).toBe("PUBLISHED"));
|
|
data.forEach((item) => expect(item.category.id).toBe("1"));
|
|
});
|
|
});
|
|
|
|
describe("fields (legacy)", () => {
|
|
it("correct response", async () => {
|
|
const { data, total } = await dataProvider(client).getList({
|
|
resource: "blog_posts",
|
|
meta: {
|
|
fields: ["id", "title"],
|
|
},
|
|
});
|
|
|
|
data.forEach((item) => {
|
|
expect(item).toHaveProperty("id");
|
|
expect(item).toHaveProperty("title");
|
|
});
|
|
|
|
expect(total).toBeGreaterThan(0);
|
|
});
|
|
|
|
describe("sorters", () => {
|
|
describe("single sorter", () => {
|
|
it("should return sorted data", async () => {
|
|
const { data } = await dataProvider(client).getList({
|
|
resource: "blog_posts",
|
|
meta: {
|
|
fields: ["id"],
|
|
},
|
|
sorters: [{ field: "id", order: "desc" }],
|
|
});
|
|
|
|
expect(Number(data[0]["id"])).toBeGreaterThan(
|
|
Number(data[1]["id"]),
|
|
);
|
|
});
|
|
});
|
|
|
|
describe("multiple sorters", () => {
|
|
it("should return sorted data", async () => {
|
|
const { data } = await dataProvider(client).getList({
|
|
resource: "blog_posts",
|
|
meta: {
|
|
fields: ["id", "status"],
|
|
},
|
|
sorters: [
|
|
{ field: "status", order: "asc" },
|
|
{ field: "id", order: "desc" },
|
|
],
|
|
});
|
|
|
|
expect(Number(data[0]["id"])).toBeGreaterThan(
|
|
Number(data[1]["id"]),
|
|
);
|
|
|
|
data.forEach((item) => {
|
|
expect(item["status"]).toBe("DRAFT");
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("pagination", () => {
|
|
describe("server mode", () => {
|
|
it("should return paginated results", async () => {
|
|
const { data, total } = await dataProvider(client).getList({
|
|
resource: "blog_posts",
|
|
meta: {
|
|
fields: ["id"],
|
|
},
|
|
pagination: {
|
|
current: 2,
|
|
mode: "server",
|
|
pageSize: 10,
|
|
},
|
|
});
|
|
|
|
expect(data.length).toBe(10);
|
|
expect(data[0].id).toBe("11");
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("filters", () => {
|
|
describe("single filter", () => {
|
|
it("should return filtered data", async () => {
|
|
const { data, total } = await dataProvider(client).getList({
|
|
resource: "blog_posts",
|
|
filters: [
|
|
{
|
|
field: "id",
|
|
operator: "eq",
|
|
value: "1",
|
|
},
|
|
],
|
|
meta: {
|
|
fields: ["id", "title"],
|
|
},
|
|
});
|
|
|
|
expect(data[0]["id"]).toBe("1");
|
|
expect(total).toBe(1);
|
|
});
|
|
});
|
|
|
|
describe("multiple filters", () => {
|
|
it("should return filtered data", async () => {
|
|
const { data, total } = await dataProvider(client).getList({
|
|
resource: "blog_posts",
|
|
filters: [
|
|
{ field: "id", operator: "lt", value: 10 },
|
|
{ field: "status", operator: "eq", value: "DRAFT" },
|
|
],
|
|
meta: {
|
|
fields: ["id", "status"],
|
|
},
|
|
});
|
|
|
|
data.forEach((item) => {
|
|
expect(Number(item["id"])).toBeLessThan(10);
|
|
expect(item["status"]).toBe("DRAFT");
|
|
});
|
|
});
|
|
|
|
describe("and operator", () => {
|
|
it("should return filtered data", async () => {
|
|
const { data } = await dataProvider(client).getList({
|
|
resource: "blog_posts",
|
|
filters: [
|
|
{
|
|
operator: "and",
|
|
value: [
|
|
{
|
|
field: "id",
|
|
operator: "lt",
|
|
value: 10,
|
|
},
|
|
{
|
|
field: "status",
|
|
operator: "eq",
|
|
value: "DRAFT",
|
|
},
|
|
],
|
|
},
|
|
],
|
|
meta: {
|
|
fields: ["id", "status"],
|
|
},
|
|
});
|
|
|
|
expect(data.length).toBe(2);
|
|
expect(data[0]["id"]).toBe("4");
|
|
expect(data[0].status).toBe("DRAFT");
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
it("correct sorting response", async () => {
|
|
const { data } = await dataProvider(client).getList({
|
|
resource: "blog_posts",
|
|
sorters: [
|
|
{
|
|
field: "id",
|
|
order: "asc",
|
|
},
|
|
],
|
|
meta: {
|
|
fields: ["id", "title"],
|
|
},
|
|
});
|
|
|
|
expect(data[0]["id"]).toBe("1");
|
|
expect(data[0]["title"]).toBe("Corporis unde mollitia laudantium.");
|
|
});
|
|
|
|
it("correct filter and sort response", async () => {
|
|
const response = await dataProvider(client).getList({
|
|
resource: "blog_posts",
|
|
filters: [
|
|
{
|
|
field: "category.id",
|
|
operator: "eq",
|
|
value: "8",
|
|
},
|
|
],
|
|
sorters: [
|
|
{
|
|
field: "title",
|
|
order: "asc",
|
|
},
|
|
],
|
|
meta: {
|
|
fields: ["id", "title", { category: ["id", "title"] }],
|
|
},
|
|
});
|
|
|
|
expect(response.data[0]["id"]).toBe("413");
|
|
expect(response.data[0]["category"].title).toBe("et");
|
|
});
|
|
});
|
|
});
|