@cedarjs/web 6.0.0-canary.2671 → 6.0.0-canary.2673
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +6 -6
- package/dist/apollo/CedarApolloProvider.test.js +0 -38
- package/dist/apollo/fragmentRegistry.test.js +0 -67
- package/dist/cjs/apollo/CedarApolloProvider.test.js +0 -61
- package/dist/cjs/apollo/fragmentRegistry.test.js +0 -90
- package/dist/cjs/components/cell/createCell.test.js +0 -337
- package/dist/cjs/components/cell/createFragmentCell.test.js +0 -225
- package/dist/cjs/components/cell/createSuspendingCell.test.js +0 -96
- package/dist/components/cell/createCell.test.js +0 -314
- package/dist/components/cell/createFragmentCell.test.js +0 -202
- package/dist/components/cell/createSuspendingCell.test.js +0 -73
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cedarjs/web",
|
|
3
|
-
"version": "6.0.0-canary.
|
|
3
|
+
"version": "6.0.0-canary.2673",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/cedarjs/cedar.git",
|
|
@@ -150,7 +150,7 @@
|
|
|
150
150
|
},
|
|
151
151
|
"dependencies": {
|
|
152
152
|
"@apollo/client": "4.2.7",
|
|
153
|
-
"@cedarjs/server-store": "6.0.0-canary.
|
|
153
|
+
"@cedarjs/server-store": "6.0.0-canary.2673",
|
|
154
154
|
"@dr.pogodin/react-helmet": "2.0.4",
|
|
155
155
|
"@whatwg-node/fetch": "0.10.13",
|
|
156
156
|
"apollo-upload-client": "19.0.0",
|
|
@@ -170,9 +170,9 @@
|
|
|
170
170
|
"@babel/core": "^7.26.10",
|
|
171
171
|
"@babel/plugin-transform-runtime": "7.29.7",
|
|
172
172
|
"@babel/runtime": "7.29.7",
|
|
173
|
-
"@cedarjs/auth": "6.0.0-canary.
|
|
174
|
-
"@cedarjs/framework-tools": "6.0.0-canary.
|
|
175
|
-
"@cedarjs/internal": "6.0.0-canary.
|
|
173
|
+
"@cedarjs/auth": "6.0.0-canary.2673",
|
|
174
|
+
"@cedarjs/framework-tools": "6.0.0-canary.2673",
|
|
175
|
+
"@cedarjs/internal": "6.0.0-canary.2673",
|
|
176
176
|
"@rollup/plugin-babel": "6.1.0",
|
|
177
177
|
"@testing-library/dom": "10.4.1",
|
|
178
178
|
"@testing-library/jest-dom": "6.9.1",
|
|
@@ -187,7 +187,7 @@
|
|
|
187
187
|
"react-dom": "19.2.3",
|
|
188
188
|
"tstyche": "5.0.2",
|
|
189
189
|
"typescript": "5.9.3",
|
|
190
|
-
"vitest": "
|
|
190
|
+
"vitest": "4.1.10"
|
|
191
191
|
},
|
|
192
192
|
"peerDependencies": {
|
|
193
193
|
"@cedarjs/auth": "workspace:*",
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { gql } from "@apollo/client";
|
|
3
|
-
import { useQuery } from "@apollo/client/react";
|
|
4
|
-
import { render, screen, waitFor } from "@testing-library/react";
|
|
5
|
-
import { vi, describe, test, expect } from "vitest";
|
|
6
|
-
import { CedarApolloProvider } from "./CedarApolloProvider.js";
|
|
7
|
-
globalThis.RWJS_API_GRAPHQL_URL = "https://example.com/graphql";
|
|
8
|
-
describe("CedarApolloProvider smoke test", () => {
|
|
9
|
-
test("renders children and runs a query through the full link chain", async () => {
|
|
10
|
-
const fetchMock = vi.fn(async () => {
|
|
11
|
-
return new Response(JSON.stringify({ data: { answer: 42 } }), {
|
|
12
|
-
headers: { "content-type": "application/json" }
|
|
13
|
-
});
|
|
14
|
-
});
|
|
15
|
-
vi.stubGlobal("fetch", fetchMock);
|
|
16
|
-
const QUERY = gql`
|
|
17
|
-
query AnswerQuery {
|
|
18
|
-
answer
|
|
19
|
-
}
|
|
20
|
-
`;
|
|
21
|
-
const Consumer = () => {
|
|
22
|
-
const { data, loading, error } = useQuery(QUERY);
|
|
23
|
-
if (error) {
|
|
24
|
-
return /* @__PURE__ */ React.createElement(React.Fragment, null, "error: ", error.message);
|
|
25
|
-
}
|
|
26
|
-
if (loading) {
|
|
27
|
-
return /* @__PURE__ */ React.createElement(React.Fragment, null, "loading");
|
|
28
|
-
}
|
|
29
|
-
return /* @__PURE__ */ React.createElement(React.Fragment, null, "answer: ", data?.answer);
|
|
30
|
-
};
|
|
31
|
-
render(
|
|
32
|
-
/* @__PURE__ */ React.createElement(CedarApolloProvider, null, /* @__PURE__ */ React.createElement(Consumer, null))
|
|
33
|
-
);
|
|
34
|
-
await waitFor(() => screen.getByText("answer: 42"));
|
|
35
|
-
expect(fetchMock).toHaveBeenCalled();
|
|
36
|
-
vi.unstubAllGlobals();
|
|
37
|
-
});
|
|
38
|
-
});
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { ApolloClient, ApolloLink, InMemoryCache, gql } from "@apollo/client";
|
|
3
|
-
import { ApolloProvider } from "@apollo/client/react";
|
|
4
|
-
import { render, screen } from "@testing-library/react";
|
|
5
|
-
import { describe, test } from "vitest";
|
|
6
|
-
import { fragmentRegistry, registerFragment } from "./fragmentRegistry.js";
|
|
7
|
-
const { useRegisteredFragment: useStallFragment } = registerFragment(gql`
|
|
8
|
-
fragment Stall_info on Stall {
|
|
9
|
-
id
|
|
10
|
-
name
|
|
11
|
-
}
|
|
12
|
-
`);
|
|
13
|
-
const { useRegisteredFragment: useFruitFragment } = registerFragment(gql`
|
|
14
|
-
fragment Fruit_info on Fruit {
|
|
15
|
-
id
|
|
16
|
-
name
|
|
17
|
-
isSeedless
|
|
18
|
-
stall {
|
|
19
|
-
...Stall_info
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
`);
|
|
23
|
-
const StallInfo = ({ id }) => {
|
|
24
|
-
const { data: stall, complete } = useStallFragment(id);
|
|
25
|
-
return complete ? /* @__PURE__ */ React.createElement("p", null, "Stall Name: ", stall.name) : /* @__PURE__ */ React.createElement("p", null, "stall incomplete");
|
|
26
|
-
};
|
|
27
|
-
const FruitInfo = ({ id }) => {
|
|
28
|
-
const { data: fruit, complete } = useFruitFragment(id);
|
|
29
|
-
return complete ? /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("h2", null, "Fruit Name: ", fruit.name), /* @__PURE__ */ React.createElement(StallInfo, { id: fruit.stall.id })) : /* @__PURE__ */ React.createElement("div", null, "fruit incomplete");
|
|
30
|
-
};
|
|
31
|
-
describe("registered fragments with nested spreads", () => {
|
|
32
|
-
test("reads complete data back from the cache", async () => {
|
|
33
|
-
const cache = new InMemoryCache({ fragments: fragmentRegistry });
|
|
34
|
-
const client = new ApolloClient({ cache, link: ApolloLink.empty() });
|
|
35
|
-
client.writeQuery({
|
|
36
|
-
query: gql`
|
|
37
|
-
query GetGroceries {
|
|
38
|
-
groceries {
|
|
39
|
-
... on Fruit {
|
|
40
|
-
...Fruit_info
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
`,
|
|
45
|
-
data: {
|
|
46
|
-
groceries: [
|
|
47
|
-
{
|
|
48
|
-
__typename: "Fruit",
|
|
49
|
-
id: "1",
|
|
50
|
-
name: "Strawberries",
|
|
51
|
-
isSeedless: false,
|
|
52
|
-
stall: {
|
|
53
|
-
__typename: "Stall",
|
|
54
|
-
id: "s1",
|
|
55
|
-
name: "Pie Veggies"
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
]
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
render(
|
|
62
|
-
/* @__PURE__ */ React.createElement(ApolloProvider, { client }, /* @__PURE__ */ React.createElement(FruitInfo, { id: "1" }))
|
|
63
|
-
);
|
|
64
|
-
screen.getByText("Fruit Name: Strawberries");
|
|
65
|
-
screen.getByText("Stall Name: Pie Veggies");
|
|
66
|
-
});
|
|
67
|
-
});
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
|
-
var __defProp = Object.defineProperty;
|
|
4
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __copyProps = (to, from, except, desc) => {
|
|
9
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
10
|
-
for (let key of __getOwnPropNames(from))
|
|
11
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
12
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
13
|
-
}
|
|
14
|
-
return to;
|
|
15
|
-
};
|
|
16
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
17
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
18
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
19
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
20
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
21
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
22
|
-
mod
|
|
23
|
-
));
|
|
24
|
-
var import_react = __toESM(require("react"), 1);
|
|
25
|
-
var import_client = require("@apollo/client");
|
|
26
|
-
var import_react2 = require("@apollo/client/react");
|
|
27
|
-
var import_react3 = require("@testing-library/react");
|
|
28
|
-
var import_vitest = require("vitest");
|
|
29
|
-
var import_CedarApolloProvider = require("./CedarApolloProvider.js");
|
|
30
|
-
globalThis.RWJS_API_GRAPHQL_URL = "https://example.com/graphql";
|
|
31
|
-
(0, import_vitest.describe)("CedarApolloProvider smoke test", () => {
|
|
32
|
-
(0, import_vitest.test)("renders children and runs a query through the full link chain", async () => {
|
|
33
|
-
const fetchMock = import_vitest.vi.fn(async () => {
|
|
34
|
-
return new Response(JSON.stringify({ data: { answer: 42 } }), {
|
|
35
|
-
headers: { "content-type": "application/json" }
|
|
36
|
-
});
|
|
37
|
-
});
|
|
38
|
-
import_vitest.vi.stubGlobal("fetch", fetchMock);
|
|
39
|
-
const QUERY = import_client.gql`
|
|
40
|
-
query AnswerQuery {
|
|
41
|
-
answer
|
|
42
|
-
}
|
|
43
|
-
`;
|
|
44
|
-
const Consumer = () => {
|
|
45
|
-
const { data, loading, error } = (0, import_react2.useQuery)(QUERY);
|
|
46
|
-
if (error) {
|
|
47
|
-
return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, "error: ", error.message);
|
|
48
|
-
}
|
|
49
|
-
if (loading) {
|
|
50
|
-
return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, "loading");
|
|
51
|
-
}
|
|
52
|
-
return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, "answer: ", data?.answer);
|
|
53
|
-
};
|
|
54
|
-
(0, import_react3.render)(
|
|
55
|
-
/* @__PURE__ */ import_react.default.createElement(import_CedarApolloProvider.CedarApolloProvider, null, /* @__PURE__ */ import_react.default.createElement(Consumer, null))
|
|
56
|
-
);
|
|
57
|
-
await (0, import_react3.waitFor)(() => import_react3.screen.getByText("answer: 42"));
|
|
58
|
-
(0, import_vitest.expect)(fetchMock).toHaveBeenCalled();
|
|
59
|
-
import_vitest.vi.unstubAllGlobals();
|
|
60
|
-
});
|
|
61
|
-
});
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
|
-
var __defProp = Object.defineProperty;
|
|
4
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __copyProps = (to, from, except, desc) => {
|
|
9
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
10
|
-
for (let key of __getOwnPropNames(from))
|
|
11
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
12
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
13
|
-
}
|
|
14
|
-
return to;
|
|
15
|
-
};
|
|
16
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
17
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
18
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
19
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
20
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
21
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
22
|
-
mod
|
|
23
|
-
));
|
|
24
|
-
var import_react = __toESM(require("react"), 1);
|
|
25
|
-
var import_client = require("@apollo/client");
|
|
26
|
-
var import_react2 = require("@apollo/client/react");
|
|
27
|
-
var import_react3 = require("@testing-library/react");
|
|
28
|
-
var import_vitest = require("vitest");
|
|
29
|
-
var import_fragmentRegistry = require("./fragmentRegistry.js");
|
|
30
|
-
const { useRegisteredFragment: useStallFragment } = (0, import_fragmentRegistry.registerFragment)(import_client.gql`
|
|
31
|
-
fragment Stall_info on Stall {
|
|
32
|
-
id
|
|
33
|
-
name
|
|
34
|
-
}
|
|
35
|
-
`);
|
|
36
|
-
const { useRegisteredFragment: useFruitFragment } = (0, import_fragmentRegistry.registerFragment)(import_client.gql`
|
|
37
|
-
fragment Fruit_info on Fruit {
|
|
38
|
-
id
|
|
39
|
-
name
|
|
40
|
-
isSeedless
|
|
41
|
-
stall {
|
|
42
|
-
...Stall_info
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
`);
|
|
46
|
-
const StallInfo = ({ id }) => {
|
|
47
|
-
const { data: stall, complete } = useStallFragment(id);
|
|
48
|
-
return complete ? /* @__PURE__ */ import_react.default.createElement("p", null, "Stall Name: ", stall.name) : /* @__PURE__ */ import_react.default.createElement("p", null, "stall incomplete");
|
|
49
|
-
};
|
|
50
|
-
const FruitInfo = ({ id }) => {
|
|
51
|
-
const { data: fruit, complete } = useFruitFragment(id);
|
|
52
|
-
return complete ? /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement("h2", null, "Fruit Name: ", fruit.name), /* @__PURE__ */ import_react.default.createElement(StallInfo, { id: fruit.stall.id })) : /* @__PURE__ */ import_react.default.createElement("div", null, "fruit incomplete");
|
|
53
|
-
};
|
|
54
|
-
(0, import_vitest.describe)("registered fragments with nested spreads", () => {
|
|
55
|
-
(0, import_vitest.test)("reads complete data back from the cache", async () => {
|
|
56
|
-
const cache = new import_client.InMemoryCache({ fragments: import_fragmentRegistry.fragmentRegistry });
|
|
57
|
-
const client = new import_client.ApolloClient({ cache, link: import_client.ApolloLink.empty() });
|
|
58
|
-
client.writeQuery({
|
|
59
|
-
query: import_client.gql`
|
|
60
|
-
query GetGroceries {
|
|
61
|
-
groceries {
|
|
62
|
-
... on Fruit {
|
|
63
|
-
...Fruit_info
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
`,
|
|
68
|
-
data: {
|
|
69
|
-
groceries: [
|
|
70
|
-
{
|
|
71
|
-
__typename: "Fruit",
|
|
72
|
-
id: "1",
|
|
73
|
-
name: "Strawberries",
|
|
74
|
-
isSeedless: false,
|
|
75
|
-
stall: {
|
|
76
|
-
__typename: "Stall",
|
|
77
|
-
id: "s1",
|
|
78
|
-
name: "Pie Veggies"
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
]
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
(0, import_react3.render)(
|
|
85
|
-
/* @__PURE__ */ import_react.default.createElement(import_react2.ApolloProvider, { client }, /* @__PURE__ */ import_react.default.createElement(FruitInfo, { id: "1" }))
|
|
86
|
-
);
|
|
87
|
-
import_react3.screen.getByText("Fruit Name: Strawberries");
|
|
88
|
-
import_react3.screen.getByText("Stall Name: Pie Veggies");
|
|
89
|
-
});
|
|
90
|
-
});
|
|
@@ -1,337 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
|
-
var __defProp = Object.defineProperty;
|
|
4
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __copyProps = (to, from, except, desc) => {
|
|
9
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
10
|
-
for (let key of __getOwnPropNames(from))
|
|
11
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
12
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
13
|
-
}
|
|
14
|
-
return to;
|
|
15
|
-
};
|
|
16
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
17
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
18
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
19
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
20
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
21
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
22
|
-
mod
|
|
23
|
-
));
|
|
24
|
-
var import_react = __toESM(require("react"), 1);
|
|
25
|
-
var import_react2 = require("@apollo/client/react");
|
|
26
|
-
var import_react3 = require("@testing-library/react");
|
|
27
|
-
var import_vitest = require("vitest");
|
|
28
|
-
var import_createCell = require("./createCell.js");
|
|
29
|
-
import_vitest.vi.mock("@apollo/client/react", () => ({
|
|
30
|
-
useQuery: import_vitest.vi.fn()
|
|
31
|
-
}));
|
|
32
|
-
const mockUseQuery = import_react2.useQuery;
|
|
33
|
-
(0, import_vitest.describe)("createCell", () => {
|
|
34
|
-
(0, import_vitest.beforeAll)(() => {
|
|
35
|
-
globalThis.RWJS_ENV = {
|
|
36
|
-
RWJS_EXP_STREAMING_SSR: false
|
|
37
|
-
};
|
|
38
|
-
});
|
|
39
|
-
(0, import_vitest.beforeEach)(() => {
|
|
40
|
-
mockUseQuery.mockReset();
|
|
41
|
-
});
|
|
42
|
-
(0, import_vitest.test)("Renders a static Success component", () => {
|
|
43
|
-
const TestCell = (0, import_createCell.createCell)({
|
|
44
|
-
// @ts-expect-error - Purposefully using a plain string here.
|
|
45
|
-
QUERY: "query TestQuery { answer }",
|
|
46
|
-
Success: () => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, "Great success!")
|
|
47
|
-
});
|
|
48
|
-
mockUseQuery.mockImplementation(() => ({ data: {} }));
|
|
49
|
-
(0, import_react3.render)(/* @__PURE__ */ import_react.default.createElement(TestCell, null));
|
|
50
|
-
import_react3.screen.getByText(/^Great success!$/);
|
|
51
|
-
});
|
|
52
|
-
(0, import_vitest.test)("Renders Success with data", () => {
|
|
53
|
-
const TestCell = (0, import_createCell.createCell)({
|
|
54
|
-
// @ts-expect-error - Purposefully using a plain string here.
|
|
55
|
-
QUERY: "query TestQuery { answer }",
|
|
56
|
-
Success: ({ answer }) => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement("dl", null, /* @__PURE__ */ import_react.default.createElement("dt", null, "What's the meaning of life?"), /* @__PURE__ */ import_react.default.createElement("dd", null, answer)))
|
|
57
|
-
});
|
|
58
|
-
mockUseQuery.mockImplementation(() => {
|
|
59
|
-
return { data: { answer: 42 } };
|
|
60
|
-
});
|
|
61
|
-
(0, import_react3.render)(/* @__PURE__ */ import_react.default.createElement(TestCell, null));
|
|
62
|
-
import_react3.screen.getByText(/^What's the meaning of life\?$/);
|
|
63
|
-
import_react3.screen.getByText(/^42$/);
|
|
64
|
-
});
|
|
65
|
-
(0, import_vitest.test)("Renders Success if any of the fields have data (i.e. not just the first)", () => {
|
|
66
|
-
const TestCell = (0, import_createCell.createCell)({
|
|
67
|
-
// @ts-expect-error - Purposefully using a plain string here.
|
|
68
|
-
QUERY: "query TestQuery { users { name } posts { title } }",
|
|
69
|
-
Empty: () => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, "No users or posts"),
|
|
70
|
-
Success: ({ users, posts }) => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement("div", null, users.length > 0 ? /* @__PURE__ */ import_react.default.createElement("ul", null, users.map(({ name }) => /* @__PURE__ */ import_react.default.createElement("li", { key: name }, name))) : "no users"), /* @__PURE__ */ import_react.default.createElement("div", null, posts.length > 0 ? /* @__PURE__ */ import_react.default.createElement("ul", null, posts.map(({ title }) => /* @__PURE__ */ import_react.default.createElement("li", { key: title }, title))) : "no posts"))
|
|
71
|
-
});
|
|
72
|
-
mockUseQuery.mockImplementation(() => {
|
|
73
|
-
return {
|
|
74
|
-
data: {
|
|
75
|
-
users: [],
|
|
76
|
-
posts: [{ title: "bazinga" }, { title: "kittens" }]
|
|
77
|
-
}
|
|
78
|
-
};
|
|
79
|
-
});
|
|
80
|
-
(0, import_react3.render)(/* @__PURE__ */ import_react.default.createElement(TestCell, null));
|
|
81
|
-
import_react3.screen.getByText(/bazinga/);
|
|
82
|
-
import_react3.screen.getByText(/kittens/);
|
|
83
|
-
});
|
|
84
|
-
(0, import_vitest.test)("Renders default Loading when there is no data", () => {
|
|
85
|
-
const TestCell = (0, import_createCell.createCell)({
|
|
86
|
-
// @ts-expect-error - Purposefully using a plain string here.
|
|
87
|
-
QUERY: "query TestQuery { answer }",
|
|
88
|
-
Success: () => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, "Great success!")
|
|
89
|
-
});
|
|
90
|
-
mockUseQuery.mockImplementation(() => ({ loading: true }));
|
|
91
|
-
(0, import_react3.render)(/* @__PURE__ */ import_react.default.createElement(TestCell, null));
|
|
92
|
-
import_react3.screen.getByText(/^Loading...$/);
|
|
93
|
-
});
|
|
94
|
-
(0, import_vitest.test)("Renders custom Loading when there is no data", () => {
|
|
95
|
-
const TestCell = (0, import_createCell.createCell)({
|
|
96
|
-
// @ts-expect-error - Purposefully using a plain string here.
|
|
97
|
-
QUERY: "query TestQuery { answer }",
|
|
98
|
-
Success: () => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, "Great success!"),
|
|
99
|
-
Loading: () => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, "Fetching answer...")
|
|
100
|
-
});
|
|
101
|
-
mockUseQuery.mockImplementation(() => ({ loading: true }));
|
|
102
|
-
(0, import_react3.render)(/* @__PURE__ */ import_react.default.createElement(TestCell, null));
|
|
103
|
-
import_react3.screen.getByText(/^Fetching answer...$/);
|
|
104
|
-
});
|
|
105
|
-
(0, import_vitest.test)("Renders Success even when `loading` is true if there is data", () => {
|
|
106
|
-
const TestCell = (0, import_createCell.createCell)({
|
|
107
|
-
// @ts-expect-error - Purposefully using a plain string here.
|
|
108
|
-
QUERY: "query TestQuery { answer }",
|
|
109
|
-
Success: () => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, "Great success!"),
|
|
110
|
-
Loading: () => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, "Fetching answer...")
|
|
111
|
-
});
|
|
112
|
-
mockUseQuery.mockImplementation(() => ({ loading: true, data: {} }));
|
|
113
|
-
(0, import_react3.render)(/* @__PURE__ */ import_react.default.createElement(TestCell, null));
|
|
114
|
-
import_react3.screen.getByText(/^Great success!$/);
|
|
115
|
-
});
|
|
116
|
-
(0, import_vitest.test)("Renders Empty if available, and data field is null", () => {
|
|
117
|
-
const TestCell = (0, import_createCell.createCell)({
|
|
118
|
-
// @ts-expect-error - Purposefully using a plain string here.
|
|
119
|
-
QUERY: "query TestQuery { answer }",
|
|
120
|
-
Success: () => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, "Great success!"),
|
|
121
|
-
Empty: () => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, "No one knows")
|
|
122
|
-
});
|
|
123
|
-
mockUseQuery.mockImplementation(() => ({
|
|
124
|
-
loading: true,
|
|
125
|
-
data: { answer: null }
|
|
126
|
-
}));
|
|
127
|
-
(0, import_react3.render)(/* @__PURE__ */ import_react.default.createElement(TestCell, null));
|
|
128
|
-
import_react3.screen.getByText(/^No one knows$/);
|
|
129
|
-
});
|
|
130
|
-
(0, import_vitest.test)("Renders Empty if available, and data field is an empty array", () => {
|
|
131
|
-
const TestCell = (0, import_createCell.createCell)({
|
|
132
|
-
// @ts-expect-error - Purposefully using a plain string here.
|
|
133
|
-
QUERY: "query TestQuery { answers }",
|
|
134
|
-
Success: () => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, "Great success!"),
|
|
135
|
-
Empty: () => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, "No one knows")
|
|
136
|
-
});
|
|
137
|
-
mockUseQuery.mockImplementation(() => ({
|
|
138
|
-
loading: true,
|
|
139
|
-
data: { answers: [] }
|
|
140
|
-
}));
|
|
141
|
-
(0, import_react3.render)(/* @__PURE__ */ import_react.default.createElement(TestCell, null));
|
|
142
|
-
import_react3.screen.getByText(/^No one knows$/);
|
|
143
|
-
});
|
|
144
|
-
(0, import_vitest.test)("Renders Success even if data is empty when no Empty is available", () => {
|
|
145
|
-
const TestCell = (0, import_createCell.createCell)({
|
|
146
|
-
// @ts-expect-error - Purposefully using a plain string here.
|
|
147
|
-
QUERY: "query TestQuery { answer }",
|
|
148
|
-
Success: () => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, "Empty success")
|
|
149
|
-
});
|
|
150
|
-
mockUseQuery.mockImplementation(() => ({
|
|
151
|
-
loading: true,
|
|
152
|
-
data: { answer: null }
|
|
153
|
-
}));
|
|
154
|
-
(0, import_react3.render)(/* @__PURE__ */ import_react.default.createElement(TestCell, null));
|
|
155
|
-
import_react3.screen.getByText(/^Empty success$/);
|
|
156
|
-
});
|
|
157
|
-
(0, import_vitest.test)("Allows passing children to Success", () => {
|
|
158
|
-
const TestCell = (0, import_createCell.createCell)({
|
|
159
|
-
// @ts-expect-error - Purposefully using a plain string here.
|
|
160
|
-
QUERY: "query TestQuery { answer }",
|
|
161
|
-
Success: ({ children }) => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, "Look at my beautiful ", children)
|
|
162
|
-
});
|
|
163
|
-
mockUseQuery.mockImplementation(() => ({ data: {} }));
|
|
164
|
-
(0, import_react3.render)(
|
|
165
|
-
/* @__PURE__ */ import_react.default.createElement(TestCell, null, /* @__PURE__ */ import_react.default.createElement("div", null, "\u{1F986}"))
|
|
166
|
-
);
|
|
167
|
-
import_react3.screen.getByText(/^Look at my beautiful$/);
|
|
168
|
-
import_react3.screen.getByText(/^🦆$/);
|
|
169
|
-
});
|
|
170
|
-
(0, import_vitest.test)("Cell props are passed to the query as variables", () => {
|
|
171
|
-
const TestCell = (0, import_createCell.createCell)({
|
|
172
|
-
// @ts-expect-error - Purposefully using a plain string here.
|
|
173
|
-
QUERY: `query Greet($name: String!) {
|
|
174
|
-
greet(name: $name) {
|
|
175
|
-
greeting
|
|
176
|
-
}
|
|
177
|
-
}`,
|
|
178
|
-
Success: ({ greeting }) => /* @__PURE__ */ import_react.default.createElement("p", null, greeting)
|
|
179
|
-
});
|
|
180
|
-
mockUseQuery.mockImplementation((_query, options) => {
|
|
181
|
-
return { data: { greeting: `Hello ${options.variables.name}!` } };
|
|
182
|
-
});
|
|
183
|
-
(0, import_react3.render)(/* @__PURE__ */ import_react.default.createElement(TestCell, { name: "Bob" }));
|
|
184
|
-
import_react3.screen.getByText(/^Hello Bob!$/);
|
|
185
|
-
});
|
|
186
|
-
(0, import_vitest.test)("Allows QUERY to be a function", () => {
|
|
187
|
-
const TestCell = (0, import_createCell.createCell)({
|
|
188
|
-
// @ts-expect-error - Purposefully using a plain string here.
|
|
189
|
-
QUERY: ({ variables }) => {
|
|
190
|
-
if (variables.character === "BEAST") {
|
|
191
|
-
return "query BeastQuery { name }";
|
|
192
|
-
}
|
|
193
|
-
return "query HeroQuery { name }";
|
|
194
|
-
},
|
|
195
|
-
Success: ({ name }) => /* @__PURE__ */ import_react.default.createElement("p", null, "Call me ", name)
|
|
196
|
-
});
|
|
197
|
-
mockUseQuery.mockImplementation((query) => {
|
|
198
|
-
if (query.includes("BeastQuery")) {
|
|
199
|
-
return { data: { name: "Boogeyman" } };
|
|
200
|
-
} else if (query.includes("HeroQuery")) {
|
|
201
|
-
return { data: { name: "Lara Croft" } };
|
|
202
|
-
}
|
|
203
|
-
return { data: { name: "John Doe" } };
|
|
204
|
-
});
|
|
205
|
-
(0, import_react3.render)(
|
|
206
|
-
/* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(TestCell, { character: "BEAST" }), /* @__PURE__ */ import_react.default.createElement(TestCell, { character: "HERO" }))
|
|
207
|
-
);
|
|
208
|
-
import_react3.screen.getByText(/^Call me Boogeyman$/);
|
|
209
|
-
import_react3.screen.getByText(/^Call me Lara Croft$/);
|
|
210
|
-
});
|
|
211
|
-
(0, import_vitest.test)("Renders Failure when there is an error", () => {
|
|
212
|
-
const TestCell = (0, import_createCell.createCell)({
|
|
213
|
-
// @ts-expect-error - Purposefully using a plain string here.
|
|
214
|
-
QUERY: "query TestQuery { answer }",
|
|
215
|
-
Failure: () => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, "Sad face :("),
|
|
216
|
-
Success: () => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, "Great success!"),
|
|
217
|
-
Loading: () => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, "Fetching answer...")
|
|
218
|
-
});
|
|
219
|
-
mockUseQuery.mockImplementation(() => ({ error: true }));
|
|
220
|
-
(0, import_react3.render)(/* @__PURE__ */ import_react.default.createElement(TestCell, null));
|
|
221
|
-
import_react3.screen.getByText(/^Sad face :\($/);
|
|
222
|
-
});
|
|
223
|
-
(0, import_vitest.test)("Passes error to Failure component", () => {
|
|
224
|
-
const TestCell = (0, import_createCell.createCell)({
|
|
225
|
-
// @ts-expect-error - Purposefully using a plain string here.
|
|
226
|
-
QUERY: "query TestQuery { answer }",
|
|
227
|
-
Failure: ({ error }) => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, JSON.stringify(error)),
|
|
228
|
-
Success: () => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, "Great success!"),
|
|
229
|
-
Loading: () => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, "Fetching answer...")
|
|
230
|
-
});
|
|
231
|
-
mockUseQuery.mockImplementation(() => ({
|
|
232
|
-
error: { msg: "System malfunction" }
|
|
233
|
-
}));
|
|
234
|
-
(0, import_react3.render)(/* @__PURE__ */ import_react.default.createElement(TestCell, null));
|
|
235
|
-
import_react3.screen.getByText(/^{"msg":"System malfunction"}$/);
|
|
236
|
-
});
|
|
237
|
-
(0, import_vitest.test)("Passes error and errorCode to Failure component", () => {
|
|
238
|
-
const TestCell = (0, import_createCell.createCell)({
|
|
239
|
-
// @ts-expect-error - Purposefully using a plain string here.
|
|
240
|
-
QUERY: "query TestQuery { answer }",
|
|
241
|
-
Failure: ({ error, errorCode }) => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, JSON.stringify(error), ",code:", errorCode),
|
|
242
|
-
Success: () => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, "Great success!"),
|
|
243
|
-
Loading: () => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, "Fetching answer...")
|
|
244
|
-
});
|
|
245
|
-
mockUseQuery.mockImplementation(() => ({
|
|
246
|
-
error: { msg: "System malfunction" },
|
|
247
|
-
errorCode: "SIMON_SAYS_NO"
|
|
248
|
-
}));
|
|
249
|
-
(0, import_react3.render)(/* @__PURE__ */ import_react.default.createElement(TestCell, null));
|
|
250
|
-
import_react3.screen.getByText(/^{"msg":"System malfunction"},code:SIMON_SAYS_NO$/);
|
|
251
|
-
});
|
|
252
|
-
(0, import_vitest.test)("Passes children to Failure", () => {
|
|
253
|
-
const TestCell = (0, import_createCell.createCell)({
|
|
254
|
-
// @ts-expect-error - Purposefully using a plain string here.
|
|
255
|
-
QUERY: "query TestQuery { answer }",
|
|
256
|
-
Failure: ({ children }) => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, "I'm a failure ", children)
|
|
257
|
-
});
|
|
258
|
-
mockUseQuery.mockImplementation(() => ({ error: {} }));
|
|
259
|
-
(0, import_react3.render)(
|
|
260
|
-
/* @__PURE__ */ import_react.default.createElement(TestCell, null, /* @__PURE__ */ import_react.default.createElement("div", null, "Child"))
|
|
261
|
-
);
|
|
262
|
-
import_react3.screen.getByText(/^I'm a failure$/);
|
|
263
|
-
import_react3.screen.getByText(/^Child$/);
|
|
264
|
-
});
|
|
265
|
-
(0, import_vitest.test)("Throws an error when there is an error if no Failure component exists", () => {
|
|
266
|
-
const TestCell = (0, import_createCell.createCell)({
|
|
267
|
-
// @ts-expect-error - Purposefully using a plain string here.
|
|
268
|
-
QUERY: "query TestQuery { answer }",
|
|
269
|
-
Success: () => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, "Great success!"),
|
|
270
|
-
Loading: () => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, "Fetching answer...")
|
|
271
|
-
});
|
|
272
|
-
mockUseQuery.mockImplementation(() => ({
|
|
273
|
-
error: { message: "200 GraphQL" }
|
|
274
|
-
}));
|
|
275
|
-
const err = console.error;
|
|
276
|
-
console.error = import_vitest.vi.fn();
|
|
277
|
-
let error;
|
|
278
|
-
try {
|
|
279
|
-
(0, import_react3.render)(/* @__PURE__ */ import_react.default.createElement(TestCell, null));
|
|
280
|
-
} catch (e) {
|
|
281
|
-
error = e;
|
|
282
|
-
}
|
|
283
|
-
(0, import_vitest.expect)(error.message).toEqual("200 GraphQL");
|
|
284
|
-
console.error = err;
|
|
285
|
-
});
|
|
286
|
-
(0, import_vitest.test)("Allows overriding of default isDataEmpty", () => {
|
|
287
|
-
const TestCell = (0, import_createCell.createCell)({
|
|
288
|
-
// @ts-expect-error - Purposefully using a plain string here.
|
|
289
|
-
QUERY: "query TestQuery { answer }",
|
|
290
|
-
Success: () => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, "Great success!"),
|
|
291
|
-
Empty: () => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, "Got nothing"),
|
|
292
|
-
isEmpty: () => true
|
|
293
|
-
});
|
|
294
|
-
mockUseQuery.mockImplementation(() => ({
|
|
295
|
-
data: {},
|
|
296
|
-
loading: false
|
|
297
|
-
}));
|
|
298
|
-
(0, import_react3.render)(/* @__PURE__ */ import_react.default.createElement(TestCell, null));
|
|
299
|
-
import_react3.screen.getByText(/^Got nothing$/);
|
|
300
|
-
});
|
|
301
|
-
(0, import_vitest.test)("Allows mixing isDataEmpty with custom logic", () => {
|
|
302
|
-
const TestCell = (0, import_createCell.createCell)({
|
|
303
|
-
// @ts-expect-error - Purposefully using a plain string here.
|
|
304
|
-
QUERY: "query TestQuery { answer }",
|
|
305
|
-
Success: () => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, "Great success!"),
|
|
306
|
-
Empty: () => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, "Got nothing"),
|
|
307
|
-
isEmpty: (data, { isDataEmpty }) => isDataEmpty(data) || data.answer === "0"
|
|
308
|
-
});
|
|
309
|
-
mockUseQuery.mockImplementation(() => ({
|
|
310
|
-
data: { answer: "0" },
|
|
311
|
-
loading: false
|
|
312
|
-
}));
|
|
313
|
-
(0, import_react3.render)(/* @__PURE__ */ import_react.default.createElement(TestCell, null));
|
|
314
|
-
import_react3.screen.getByText(/^Got nothing$/);
|
|
315
|
-
});
|
|
316
|
-
(0, import_vitest.test)("Allows overriding variables in beforeQuery", () => {
|
|
317
|
-
const TestCell = (0, import_createCell.createCell)({
|
|
318
|
-
// @ts-expect-error - Purposefully using a plain string here.
|
|
319
|
-
QUERY: `query Greet($name: String!) {
|
|
320
|
-
greet(name: $name) {
|
|
321
|
-
greeting
|
|
322
|
-
}
|
|
323
|
-
}`,
|
|
324
|
-
Success: ({ greeting }) => /* @__PURE__ */ import_react.default.createElement("p", null, greeting),
|
|
325
|
-
beforeQuery: () => ({
|
|
326
|
-
variables: {
|
|
327
|
-
name: "Bob"
|
|
328
|
-
}
|
|
329
|
-
})
|
|
330
|
-
});
|
|
331
|
-
mockUseQuery.mockImplementation((_query, options) => {
|
|
332
|
-
return { data: { greeting: `Hello ${options.variables.name}!` } };
|
|
333
|
-
});
|
|
334
|
-
(0, import_react3.render)(/* @__PURE__ */ import_react.default.createElement(TestCell, null));
|
|
335
|
-
import_react3.screen.getByText(/^Hello Bob!$/);
|
|
336
|
-
});
|
|
337
|
-
});
|