OpenPanel/packages/nestjs-query/test/custom/index.spec.ts
2024-02-05 10:23:04 +01:00

224 lines
8.2 KiB
TypeScript

import { BaseRecord } from "@refinedev/core";
import dataProvider from "../../src/index";
import client from "../gqlClient";
import "./index.mock";
import gql from "graphql-tag";
describe("custom", () => {
describe("gql", () => {
it("correct get query response", async () => {
const response = await dataProvider(client).custom?.({
url: "",
method: "get",
meta: {
gqlQuery: gql`
query BlogPostAggregate {
blogPostAggregate {
groupBy {
status
}
count {
status
}
}
}
`,
operation: "blogPostAggregate",
fields: [{ groupBy: ["status"], count: ["status"] }],
},
});
expect(response?.data?.["blogPostAggregate"]).toHaveLength(3);
expect(response.data?.["blogPostAggregate"][0].groupBy.status).toBe(
"DRAFT",
);
expect(
response.data?.["blogPostAggregate"][0].count.status,
).toBeDefined();
expect(response.data?.["blogPostAggregate"][1].groupBy.status).toBe(
"PUBLISHED",
);
expect(
response.data?.["blogPostAggregate"][1].count.status,
).toBeDefined();
expect(response.data?.["blogPostAggregate"][2].groupBy.status).toBe(
"REJECTED",
);
expect(
response.data?.["blogPostAggregate"][2].count.status,
).toBeDefined();
});
it("custom graphql query", async () => {
const response = await dataProvider(client).custom<BaseRecord>({
url: "",
method: "get",
meta: {
gqlQuery: gql`
query GetAllBlogPosts(
$sorting: [BlogPostSort!]
$filter: BlogPostFilter!
$paging: OffsetPaging!
) {
sorted: blogPosts(
sorting: $sorting
paging: $paging
) {
nodes {
id
title
createdAt
}
}
filtered: blogPosts(filter: $filter) {
nodes {
id
}
}
}
`,
variables: {
sorting: [{ field: "id", direction: "ASC" }],
filter: { id: { eq: 1 } },
paging: { limit: 2, offset: 0 },
},
},
});
expect(response.data.sorted).toBeDefined();
expect(response.data.filtered).toBeDefined();
expect(+response.data.sorted.nodes[1].id).toBeGreaterThan(
+response.data.sorted.nodes[0].id,
);
expect(response.data.filtered.nodes).toHaveLength(1);
});
it("correct get mutation response", async () => {
const response = await dataProvider(client).custom?.({
url: "",
method: "post",
meta: {
gqlMutation: gql`
mutation UpdateManyBlogPosts(
$input: UpdateManyBlogPostsInput!
) {
updateManyBlogPosts(input: $input) {
updatedCount
}
}
`,
variables: {
input: {
value: {
filter: {
id: { in: ["42"] },
},
update: {
status: "REJECTED",
},
},
type: "UpdateManyBlogPostsInput",
required: true,
},
},
fields: ["updatedCount"],
},
});
expect(response?.data?.["updateManyBlogPosts"].updatedCount).toBe(
1,
);
});
});
describe("fields (legacy)", () => {
it("correct get query response", async () => {
const response = await dataProvider(client).custom?.({
url: "",
method: "get",
meta: {
operation: "blogPostAggregate",
fields: [{ groupBy: ["status"], count: ["status"] }],
},
});
expect(response?.data).toHaveLength(3);
expect(response.data[0].groupBy.status).toBe("DRAFT");
expect(response.data[0].count.status).toBeDefined();
expect(response.data[1].groupBy.status).toBe("PUBLISHED");
expect(response.data[1].count.status).toBeDefined();
expect(response.data[2].groupBy.status).toBe("REJECTED");
expect(response.data[2].count.status).toBeDefined();
});
it("custom graphql query", async () => {
const response = await dataProvider(client).custom<BaseRecord>({
url: "",
method: "get",
meta: {
rawQuery: `
query GetAllBlogPosts(
$sorting: [BlogPostSort!]
$filter: BlogPostFilter!
$paging: OffsetPaging!
) {
sorted: blogPosts(sorting: $sorting, paging: $paging) {
nodes {
id
title
createdAt
}
}
filtered: blogPosts(filter: $filter) {
nodes {
id
}
}
}
`,
variables: {
sorting: [{ field: "id", direction: "ASC" }],
filter: { id: { eq: 1 } },
paging: { limit: 2, offset: 0 },
},
},
});
expect(response.data.sorted).toBeDefined();
expect(response.data.filtered).toBeDefined();
expect(+response.data.sorted.nodes[1].id).toBeGreaterThan(
+response.data.sorted.nodes[0].id,
);
expect(response.data.filtered.nodes).toHaveLength(1);
});
it("correct get mutation response", async () => {
const response = await dataProvider(client).custom?.({
url: "",
method: "post",
meta: {
operation: "updateManyBlogPosts",
variables: {
input: {
value: {
filter: {
id: { in: ["42"] },
},
update: {
status: "REJECTED",
},
},
type: "UpdateManyBlogPostsInput",
required: true,
},
},
fields: ["updatedCount"],
},
});
expect(response?.data.updatedCount).toBe(1);
});
});
});