payload 0.20.8-beta.0 → 1.0.4

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.
Files changed (89) hide show
  1. package/CHANGELOG.md +607 -852
  2. package/components/styles.css +1 -1
  3. package/dist/admin/components/elements/Banner/index.scss +1 -0
  4. package/dist/admin/components/elements/ColumnSelector/index.scss +4 -7
  5. package/dist/admin/components/elements/Eyebrow/index.scss +4 -0
  6. package/dist/admin/components/elements/Nav/index.js +2 -2
  7. package/dist/admin/components/elements/Pill/index.scss +1 -0
  8. package/dist/admin/components/elements/ReactSelect/index.js +2 -2
  9. package/dist/admin/components/elements/ReactSelect/types.d.ts +1 -0
  10. package/dist/admin/components/forms/field-types/Array/Array.js +1 -1
  11. package/dist/admin/components/forms/field-types/Blocks/Blocks.js +1 -1
  12. package/dist/admin/components/forms/field-types/Checkbox/index.js +1 -1
  13. package/dist/admin/components/forms/field-types/Code/Code.js +1 -1
  14. package/dist/admin/components/forms/field-types/DateTime/index.js +1 -1
  15. package/dist/admin/components/forms/field-types/Email/index.js +2 -2
  16. package/dist/admin/components/forms/field-types/Group/index.js +1 -1
  17. package/dist/admin/components/forms/field-types/HiddenInput/index.js +1 -1
  18. package/dist/admin/components/forms/field-types/Number/index.js +2 -2
  19. package/dist/admin/components/forms/field-types/Password/index.js +2 -2
  20. package/dist/admin/components/forms/field-types/Point/index.js +4 -4
  21. package/dist/admin/components/forms/field-types/RadioGroup/Input.js +1 -1
  22. package/dist/admin/components/forms/field-types/Relationship/index.js +1 -1
  23. package/dist/admin/components/forms/field-types/RichText/RichText.js +2 -2
  24. package/dist/admin/components/forms/field-types/RichText/elements/upload/Element/EditModal/index.js +3 -3
  25. package/dist/admin/components/forms/field-types/RichText/elements/upload/Element/EditModal/index.scss +1 -15
  26. package/dist/admin/components/forms/field-types/RichText/elements/upload/Element/index.scss +12 -1
  27. package/dist/admin/components/forms/field-types/RichText/index.scss +7 -0
  28. package/dist/admin/components/forms/field-types/Select/Input.d.ts +1 -0
  29. package/dist/admin/components/forms/field-types/Select/Input.js +4 -4
  30. package/dist/admin/components/forms/field-types/Select/index.js +6 -3
  31. package/dist/admin/components/forms/field-types/Tabs/index.scss +3 -4
  32. package/dist/admin/components/forms/field-types/Text/Input.js +2 -2
  33. package/dist/admin/components/forms/field-types/Textarea/Input.js +2 -2
  34. package/dist/admin/components/forms/field-types/Upload/Input.js +1 -1
  35. package/dist/admin/components/forms/field-types/Upload/index.scss +1 -1
  36. package/dist/admin/components/views/Global/Default.js +1 -1
  37. package/dist/admin/components/views/Version/RenderFieldsToDiff/fields/Iterable/index.js +2 -2
  38. package/dist/admin/components/views/Version/RenderFieldsToDiff/fields/styles.d.ts +1 -0
  39. package/dist/admin/components/views/Version/RenderFieldsToDiff/fields/styles.js +1 -0
  40. package/dist/admin/components/views/Version/Version.js +1 -1
  41. package/dist/admin/scss/type.scss +1 -1
  42. package/dist/collections/operations/local/restoreVersion.d.ts +0 -1
  43. package/dist/collections/operations/local/restoreVersion.js +2 -3
  44. package/dist/fields/config/schema.js +4 -1
  45. package/dist/fields/config/types.d.ts +3 -0
  46. package/dist/fields/config/types.js +1 -1
  47. package/dist/fields/hooks/beforeChange/promise.js +3 -3
  48. package/dist/globals/operations/local/restoreVersion.d.ts +2 -0
  49. package/dist/globals/operations/local/restoreVersion.js +6 -3
  50. package/dist/index.js +1 -1
  51. package/dist/mongoose/buildSchema.js +2 -3
  52. package/dist/webpack/getBaseConfig.js +2 -6
  53. package/docs/admin/overview.mdx +4 -0
  54. package/docs/authentication/config.mdx +49 -18
  55. package/docs/fields/select.mdx +40 -22
  56. package/docs/fields/tabs.mdx +64 -2
  57. package/package.json +7 -12
  58. package/dist/auth/auth.spec.d.ts +0 -1
  59. package/dist/auth/auth.spec.js +0 -198
  60. package/dist/collections/graphql/resolvers/resolvers.spec.d.ts +0 -1
  61. package/dist/collections/graphql/resolvers/resolvers.spec.js +0 -360
  62. package/dist/collections/operations/local/local.spec.d.ts +0 -1
  63. package/dist/collections/operations/local/local.spec.js +0 -196
  64. package/dist/collections/tests/collections.spec.d.ts +0 -1
  65. package/dist/collections/tests/collections.spec.js +0 -736
  66. package/dist/collections/tests/defaultValue.spec.d.ts +0 -1
  67. package/dist/collections/tests/defaultValue.spec.js +0 -95
  68. package/dist/collections/tests/endpoints.spec.d.ts +0 -1
  69. package/dist/collections/tests/endpoints.spec.js +0 -71
  70. package/dist/collections/tests/hooks.spec.d.ts +0 -1
  71. package/dist/collections/tests/hooks.spec.js +0 -156
  72. package/dist/collections/tests/pointField.spec.d.ts +0 -1
  73. package/dist/collections/tests/pointField.spec.js +0 -219
  74. package/dist/collections/tests/relationships.spec.d.ts +0 -1
  75. package/dist/collections/tests/relationships.spec.js +0 -194
  76. package/dist/express/middleware/errorHandler.spec.d.ts +0 -1
  77. package/dist/express/middleware/errorHandler.spec.js +0 -91
  78. package/dist/globals/requestHandlers/globals.spec.d.ts +0 -4
  79. package/dist/globals/requestHandlers/globals.spec.js +0 -174
  80. package/dist/preferences/graphql/resolvers.spec.d.ts +0 -1
  81. package/dist/preferences/graphql/resolvers.spec.js +0 -115
  82. package/dist/versions/tests/collections-graphql.spec.d.ts +0 -1
  83. package/dist/versions/tests/collections-graphql.spec.js +0 -141
  84. package/dist/versions/tests/collections-rest.spec.d.ts +0 -1
  85. package/dist/versions/tests/collections-rest.spec.js +0 -148
  86. package/dist/versions/tests/globals-graphql.spec.d.ts +0 -1
  87. package/dist/versions/tests/globals-graphql.spec.js +0 -157
  88. package/dist/versions/tests/globals-rest.spec.d.ts +0 -1
  89. package/dist/versions/tests/globals-rest.spec.js +0 -151
@@ -1,141 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- /**
7
- * @jest-environment node
8
- */
9
- const graphql_request_1 = require("graphql-request");
10
- const load_1 = __importDefault(require("../../config/load"));
11
- const testCredentials_1 = require("../../mongoose/testCredentials");
12
- require('isomorphic-fetch');
13
- const config = (0, load_1.default)();
14
- const url = `${config.serverURL}${config.routes.api}${config.routes.graphQL}`;
15
- let client;
16
- let token;
17
- let postID;
18
- let versionID;
19
- describe('Collections GrahpQL Version Resolvers', () => {
20
- const title = 'autosave title';
21
- beforeAll(async (done) => {
22
- const login = `
23
- mutation {
24
- loginAdmin(
25
- email: "${testCredentials_1.email}",
26
- password: "${testCredentials_1.password}"
27
- ) {
28
- token
29
- }
30
- }`;
31
- const response = await (0, graphql_request_1.request)(url, login);
32
- token = response.loginAdmin.token;
33
- client = new graphql_request_1.GraphQLClient(url, { headers: { Authorization: `JWT ${token}` } });
34
- done();
35
- });
36
- describe('Create', () => {
37
- it('should allow a new autosavePost to be created with draft status', async () => {
38
- const description = 'autosave description';
39
- const query = `mutation {
40
- createAutosavePost(data: {title: "${title}", description: "${description}"}) {
41
- id
42
- title
43
- description
44
- createdAt
45
- updatedAt
46
- _status
47
- }
48
- }`;
49
- const response = await client.request(query);
50
- const data = response.createAutosavePost;
51
- postID = data.id;
52
- expect(data._status).toStrictEqual('draft');
53
- });
54
- });
55
- describe('Read', () => {
56
- const updatedTitle = 'updated title';
57
- beforeAll(async (done) => {
58
- // modify the post to create a new version
59
- // language=graphQL
60
- const update = `mutation {
61
- updateAutosavePost(id: "${postID}", data: {title: "${updatedTitle}"}) {
62
- title
63
- }
64
- }`;
65
- await client.request(update);
66
- // language=graphQL
67
- const query = `query {
68
- versionsAutosavePosts(where: { parent: { equals: "${postID}" } }) {
69
- docs {
70
- id
71
- }
72
- }
73
- }`;
74
- const response = await client.request(query);
75
- versionID = response.versionsAutosavePosts.docs[0].id;
76
- done();
77
- });
78
- it('should allow read of versions by version id', async () => {
79
- const query = `query {
80
- versionAutosavePost(id: "${versionID}") {
81
- id
82
- parent {
83
- id
84
- }
85
- version {
86
- title
87
- }
88
- }
89
- }`;
90
- const response = await client.request(query);
91
- const data = response.versionAutosavePost;
92
- versionID = data.id;
93
- expect(data.id).toBeDefined();
94
- expect(data.parent.id).toStrictEqual(postID);
95
- expect(data.version.title).toStrictEqual(title);
96
- });
97
- it('should allow read of versions by querying version content', async () => {
98
- // language=graphQL
99
- const query = `query {
100
- versionsAutosavePosts(where: { version__title: {equals: "${title}" } }) {
101
- docs {
102
- id
103
- parent {
104
- id
105
- }
106
- version {
107
- title
108
- }
109
- }
110
- }
111
- }`;
112
- const response = await client.request(query);
113
- const data = response.versionsAutosavePosts;
114
- const doc = data.docs[0];
115
- versionID = doc.id;
116
- expect(doc.id).toBeDefined();
117
- expect(doc.parent.id).toStrictEqual(postID);
118
- expect(doc.version.title).toStrictEqual(title);
119
- });
120
- });
121
- describe('Restore', () => {
122
- it('should allow a version to be restored', async () => {
123
- // update a versionsPost
124
- const restore = `mutation {
125
- restoreVersionAutosavePost(id: "${versionID}") {
126
- title
127
- }
128
- }`;
129
- await client.request(restore);
130
- const query = `query {
131
- AutosavePost(id: "${postID}") {
132
- title
133
- }
134
- }`;
135
- const response = await client.request(query);
136
- const data = response.AutosavePost;
137
- expect(data.title).toStrictEqual(title);
138
- });
139
- });
140
- });
141
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbnMtZ3JhcGhxbC5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3ZlcnNpb25zL3Rlc3RzL2NvbGxlY3Rpb25zLWdyYXBocWwuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBOztHQUVHO0FBQ0gscURBQXlEO0FBQ3pELDZEQUEwQztBQUMxQyxvRUFBaUU7QUFFakUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFFNUIsTUFBTSxNQUFNLEdBQUcsSUFBQSxjQUFTLEdBQUUsQ0FBQztBQUUzQixNQUFNLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUU5RSxJQUFJLE1BQU0sQ0FBQztBQUNYLElBQUksS0FBSyxDQUFDO0FBQ1YsSUFBSSxNQUFNLENBQUM7QUFDWCxJQUFJLFNBQVMsQ0FBQztBQUVkLFFBQVEsQ0FBQyx1Q0FBdUMsRUFBRSxHQUFHLEVBQUU7SUFDckQsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUM7SUFFL0IsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUN2QixNQUFNLEtBQUssR0FBRzs7O29CQUdFLHVCQUFLO3VCQUNGLDBCQUFROzs7O1FBSXZCLENBQUM7UUFFTCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUEseUJBQU8sRUFBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFM0MsS0FBSyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO1FBRWxDLE1BQU0sR0FBRyxJQUFJLCtCQUFhLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsYUFBYSxFQUFFLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFaEYsSUFBSSxFQUFFLENBQUM7SUFDVCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO1FBQ3RCLEVBQUUsQ0FBQyxpRUFBaUUsRUFBRSxLQUFLLElBQUksRUFBRTtZQUMvRSxNQUFNLFdBQVcsR0FBRyxzQkFBc0IsQ0FBQztZQUUzQyxNQUFNLEtBQUssR0FBRzs4Q0FDMEIsS0FBSyxvQkFBb0IsV0FBVzs7Ozs7Ozs7UUFRMUUsQ0FBQztZQUVILE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU3QyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsa0JBQWtCLENBQUM7WUFDekMsTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7WUFFakIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO1FBQ3BCLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQztRQUVyQyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ3ZCLDBDQUEwQztZQUMxQyxtQkFBbUI7WUFDbkIsTUFBTSxNQUFNLEdBQUc7a0NBQ2EsTUFBTSxxQkFBcUIsWUFBWTs7O1FBR2pFLENBQUM7WUFDSCxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFN0IsbUJBQW1CO1lBQ25CLE1BQU0sS0FBSyxHQUFHOzhEQUMwQyxNQUFNOzs7OztRQUs1RCxDQUFDO1lBRUgsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRTdDLFNBQVMsR0FBRyxRQUFRLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN0RCxJQUFJLEVBQUUsQ0FBQztRQUNULENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDZDQUE2QyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzNELE1BQU0sS0FBSyxHQUFHO21DQUNlLFNBQVM7Ozs7Ozs7OztRQVNwQyxDQUFDO1lBRUgsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRTdDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQztZQUMxQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUVwQixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3QyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsMkRBQTJELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDekUsbUJBQW1CO1lBQ25CLE1BQU0sS0FBSyxHQUFHO3FFQUNpRCxLQUFLOzs7Ozs7Ozs7OztRQVdsRSxDQUFDO1lBRUgsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRTdDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQztZQUM1QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLFNBQVMsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBRW5CLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDN0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7UUFDdkIsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3JELHdCQUF3QjtZQUN4QixNQUFNLE9BQU8sR0FBRzswQ0FDb0IsU0FBUzs7O1FBRzNDLENBQUM7WUFFSCxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFOUIsTUFBTSxLQUFLLEdBQUc7NEJBQ1EsTUFBTTs7O1FBRzFCLENBQUM7WUFFSCxNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0MsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQztZQUNuQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMifQ==
@@ -1 +0,0 @@
1
- export {};
@@ -1,148 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const load_1 = __importDefault(require("../../config/load"));
7
- const testCredentials_1 = require("../../mongoose/testCredentials");
8
- require('isomorphic-fetch');
9
- const { serverURL: url } = (0, load_1.default)();
10
- let token = null;
11
- let headers = null;
12
- let postID;
13
- let versionID;
14
- describe('Collection Versions - REST', () => {
15
- beforeAll(async (done) => {
16
- const response = await fetch(`${url}/api/admins/login`, {
17
- body: JSON.stringify({
18
- email: testCredentials_1.email,
19
- password: testCredentials_1.password,
20
- }),
21
- headers: {
22
- 'Content-Type': 'application/json',
23
- },
24
- method: 'post',
25
- });
26
- const data = await response.json();
27
- ({ token } = data);
28
- headers = {
29
- Authorization: `JWT ${token}`,
30
- 'Content-Type': 'application/json',
31
- };
32
- const post = await fetch(`${url}/api/autosave-posts`, {
33
- body: JSON.stringify({
34
- title: 'Here is an autosave post in EN',
35
- description: '345j23o4ifj34jf54g',
36
- }),
37
- headers,
38
- method: 'post',
39
- }).then((res) => res.json());
40
- postID = post.doc.id;
41
- done();
42
- });
43
- describe('Create', () => {
44
- it('should allow a new version to be created', async () => {
45
- const title2 = 'Here is an updated post title in EN';
46
- const updatedPost = await fetch(`${url}/api/autosave-posts/${postID}`, {
47
- body: JSON.stringify({
48
- title: title2,
49
- }),
50
- headers,
51
- method: 'put',
52
- }).then((res) => res.json());
53
- const versions = await fetch(`${url}/api/autosave-posts/versions`, {
54
- headers,
55
- }).then((res) => res.json());
56
- versionID = versions.docs[0].id;
57
- expect(updatedPost.doc.title).toBe(title2);
58
- expect(updatedPost.doc._status).toStrictEqual('draft');
59
- expect(versionID).toBeDefined();
60
- });
61
- it('should allow a version to be retrieved by ID', async () => {
62
- const version = await fetch(`${url}/api/autosave-posts/versions/${versionID}`, {
63
- headers,
64
- }).then((res) => res.json());
65
- expect(version.id).toStrictEqual(versionID);
66
- });
67
- it('should allow a version to save locales properly', async () => {
68
- const englishTitle = 'Title in EN';
69
- const spanishTitle = 'Title in ES';
70
- await fetch(`${url}/api/autosave-posts/${postID}`, {
71
- body: JSON.stringify({
72
- title: englishTitle,
73
- }),
74
- headers,
75
- method: 'put',
76
- }).then((res) => res.json());
77
- const updatedPostES = await fetch(`${url}/api/autosave-posts/${postID}?locale=es`, {
78
- body: JSON.stringify({
79
- title: spanishTitle,
80
- }),
81
- headers,
82
- method: 'put',
83
- }).then((res) => res.json());
84
- expect(updatedPostES.doc.title).toBe(spanishTitle);
85
- const newEnglishTitle = 'New title in EN';
86
- await fetch(`${url}/api/autosave-posts/${postID}`, {
87
- body: JSON.stringify({
88
- title: newEnglishTitle,
89
- }),
90
- headers,
91
- method: 'put',
92
- }).then((res) => res.json());
93
- const versions = await fetch(`${url}/api/autosave-posts/versions?locale=all`, {
94
- headers,
95
- }).then((res) => res.json());
96
- expect(versions.docs[0].version.title.en).toStrictEqual(englishTitle);
97
- expect(versions.docs[0].version.title.es).toStrictEqual(spanishTitle);
98
- });
99
- });
100
- describe('Restore', () => {
101
- it('should allow a version to be restored', async () => {
102
- const title2 = 'Here is an updated post title in EN';
103
- const updatedPost = await fetch(`${url}/api/autosave-posts/${postID}`, {
104
- body: JSON.stringify({
105
- title: title2,
106
- }),
107
- headers,
108
- method: 'put',
109
- }).then((res) => res.json());
110
- expect(updatedPost.doc.title).toBe(title2);
111
- const versions = await fetch(`${url}/api/autosave-posts/versions`, {
112
- headers,
113
- }).then((res) => res.json());
114
- versionID = versions.docs[0].id;
115
- const restore = await fetch(`${url}/api/autosave-posts/versions/${versionID}`, {
116
- headers,
117
- method: 'post',
118
- }).then((res) => res.json());
119
- expect(restore.message).toBeDefined();
120
- expect(restore.doc.title).toBeDefined();
121
- const restoredPost = await fetch(`${url}/api/autosave-posts/${postID}?draft=true`, {
122
- headers,
123
- }).then((res) => res.json());
124
- expect(restoredPost.title).toBe(restore.doc.title);
125
- });
126
- });
127
- describe('Draft Access Control', () => {
128
- it('should prevent a draft from being publicly readable', async () => {
129
- const badAttempt = await fetch(`${url}/api/autosave-posts/${postID}`);
130
- expect(badAttempt.status).toBe(404);
131
- });
132
- it('should prevent an authenticated user from retrieving drafts without asking', async () => {
133
- const badAttempt = await fetch(`${url}/api/autosave-posts/${postID}`, {
134
- headers: {
135
- 'Content-Type': 'application/json',
136
- },
137
- });
138
- expect(badAttempt.status).toBe(404);
139
- });
140
- it('should allow an authenticated user to explicitly retrieve draft', async () => {
141
- const badAttempt = await fetch(`${url}/api/autosave-posts/${postID}?draft=true`, {
142
- headers,
143
- });
144
- expect(badAttempt.status).toBe(200);
145
- });
146
- });
147
- });
148
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbnMtcmVzdC5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3ZlcnNpb25zL3Rlc3RzL2NvbGxlY3Rpb25zLXJlc3Quc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZEQUEwQztBQUMxQyxvRUFBaUU7QUFFakUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFFNUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFBLGNBQVMsR0FBRSxDQUFDO0FBRXZDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztBQUNqQixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDbkIsSUFBSSxNQUFNLENBQUM7QUFDWCxJQUFJLFNBQVMsQ0FBQztBQUVkLFFBQVEsQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7SUFDMUMsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUN2QixNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLEdBQUcsbUJBQW1CLEVBQUU7WUFDdEQsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQ25CLEtBQUssRUFBTCx1QkFBSztnQkFDTCxRQUFRLEVBQVIsMEJBQVE7YUFDVCxDQUFDO1lBQ0YsT0FBTyxFQUFFO2dCQUNQLGNBQWMsRUFBRSxrQkFBa0I7YUFDbkM7WUFDRCxNQUFNLEVBQUUsTUFBTTtTQUNmLENBQUMsQ0FBQztRQUVILE1BQU0sSUFBSSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRW5DLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUVuQixPQUFPLEdBQUc7WUFDUixhQUFhLEVBQUUsT0FBTyxLQUFLLEVBQUU7WUFDN0IsY0FBYyxFQUFFLGtCQUFrQjtTQUNuQyxDQUFDO1FBRUYsTUFBTSxJQUFJLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FB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
@@ -1 +0,0 @@
1
- export {};
@@ -1,157 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- /**
7
- * @jest-environment node
8
- */
9
- const graphql_request_1 = require("graphql-request");
10
- const load_1 = __importDefault(require("../../config/load"));
11
- const testCredentials_1 = require("../../mongoose/testCredentials");
12
- require('isomorphic-fetch');
13
- const config = (0, load_1.default)();
14
- const url = `${config.serverURL}${config.routes.api}${config.routes.graphQL}`;
15
- let client;
16
- let token;
17
- let versionID;
18
- describe('Global Versions - GraphQL', () => {
19
- const title = 'Global Blocks Title';
20
- beforeAll(async (done) => {
21
- // language=graphql
22
- const login = `
23
- mutation {
24
- loginAdmin(
25
- email: "${testCredentials_1.email}",
26
- password: "${testCredentials_1.password}"
27
- ) {
28
- token
29
- }
30
- }`;
31
- const response = await (0, graphql_request_1.request)(url, login);
32
- token = response.loginAdmin.token;
33
- client = new graphql_request_1.GraphQLClient(url, { headers: { Authorization: `JWT ${token}` } });
34
- // language=graphql
35
- const query = `mutation {
36
- updateBlocksGlobal(data: {
37
- title: "${title}"
38
- blocks: [{ quote: "Test quote", color: "red", blockName: "Some block title", blockType: "quote"}]
39
- }) {
40
- _status
41
- title
42
- blocks {
43
- __typename
44
- ... on Quote {
45
- quote
46
- color
47
- }
48
- }
49
- }
50
- }`;
51
- await client.request(query);
52
- done();
53
- });
54
- describe('Create', () => {
55
- it('should allow a new BlocksGlobal to be created with draft status', async () => {
56
- const updatedTitle = 'updated global title';
57
- // language=graphql
58
- const query = `mutation {
59
- updateBlocksGlobal(data: {
60
- title: "${updatedTitle}"
61
- }) {
62
- _status
63
- title
64
- }
65
- }`;
66
- await client.request(query);
67
- const response = await client.request(query);
68
- const data = response.updateBlocksGlobal;
69
- expect(data._status).toStrictEqual('draft');
70
- expect(data.title).toStrictEqual(updatedTitle);
71
- });
72
- });
73
- describe('should allow a version to be retrieved', () => {
74
- beforeAll(async (done) => {
75
- const updatedTitle = 'updated global title';
76
- // language=graphql
77
- const update = `mutation {
78
- updateBlocksGlobal(draft: true, data: {
79
- title: "${updatedTitle}"
80
- }) {
81
- _status
82
- title
83
- }
84
- }`;
85
- await client.request(update);
86
- // language=graphQL
87
- const query = `query {
88
- versionsBlocksGlobal(where: { version__title: { equals: "${title}" } }) {
89
- docs {
90
- id
91
- version {
92
- title
93
- }
94
- }
95
- }
96
- }`;
97
- const response = await client.request(query);
98
- versionID = response.versionsBlocksGlobal.docs[0].id;
99
- done();
100
- });
101
- it('should allow read of versions by version id', async () => {
102
- // language=graphql
103
- const query = `query {
104
- versionBlocksGlobal(id: "${versionID}") {
105
- id
106
- version {
107
- title
108
- }
109
- }
110
- }`;
111
- const response = await client.request(query);
112
- const data = response.versionBlocksGlobal;
113
- versionID = data.id;
114
- expect(data.id).toBeDefined();
115
- expect(data.version.title).toStrictEqual(title);
116
- });
117
- it('should allow read of versions by querying version content', async () => {
118
- // language=graphQL
119
- const query = `query {
120
- versionsBlocksGlobal(where: { version__title: {equals: "${title}" } }) {
121
- docs {
122
- id
123
- version {
124
- title
125
- }
126
- }
127
- }
128
- }`;
129
- const response = await client.request(query);
130
- const data = response.versionsBlocksGlobal;
131
- const doc = data.docs[0];
132
- versionID = doc.id;
133
- expect(doc.id).toBeDefined();
134
- expect(doc.version.title).toStrictEqual(title);
135
- });
136
- });
137
- describe('Restore', () => {
138
- it('should allow a version to be restored', async () => {
139
- // language=graphql
140
- const restore = `mutation {
141
- restoreVersionBlocksGlobal(id: "${versionID}") {
142
- title
143
- }
144
- }`;
145
- await client.request(restore);
146
- const query = `query {
147
- BlocksGlobal {
148
- title
149
- }
150
- }`;
151
- const response = await client.request(query);
152
- const data = response.BlocksGlobal;
153
- expect(data.title).toStrictEqual(title);
154
- });
155
- });
156
- });
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFscy1ncmFwaHFsLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdmVyc2lvbnMvdGVzdHMvZ2xvYmFscy1ncmFwaHFsLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7R0FFRztBQUNILHFEQUF5RDtBQUN6RCw2REFBMEM7QUFDMUMsb0VBQWlFO0FBRWpFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBRTVCLE1BQU0sTUFBTSxHQUFHLElBQUEsY0FBUyxHQUFFLENBQUM7QUFFM0IsTUFBTSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7QUFFOUUsSUFBSSxNQUFNLENBQUM7QUFDWCxJQUFJLEtBQUssQ0FBQztBQUNWLElBQUksU0FBUyxDQUFDO0FBRWQsUUFBUSxDQUFDLDJCQUEyQixFQUFFLEdBQUcsRUFBRTtJQUN6QyxNQUFNLEtBQUssR0FBRyxxQkFBcUIsQ0FBQztJQUNwQyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO1FBQ3ZCLG1CQUFtQjtRQUNuQixNQUFNLEtBQUssR0FBRzs7O29CQUdFLHVCQUFLO3VCQUNGLDBCQUFROzs7O1FBSXZCLENBQUM7UUFFTCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUEseUJBQU8sRUFBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFM0MsS0FBSyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO1FBRWxDLE1BQU0sR0FBRyxJQUFJLCtCQUFhLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsYUFBYSxFQUFFLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFaEYsbUJBQW1CO1FBQ25CLE1BQU0sS0FBSyxHQUFHOztrQkFFQSxLQUFL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
@@ -1 +0,0 @@
1
- export {};
@@ -1,151 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const load_1 = __importDefault(require("../../config/load"));
7
- const testCredentials_1 = require("../../mongoose/testCredentials");
8
- require('isomorphic-fetch');
9
- const { serverURL: url } = (0, load_1.default)();
10
- let token = null;
11
- let headers = null;
12
- let versionID;
13
- describe('Global Versions - REST', () => {
14
- beforeAll(async (done) => {
15
- const response = await fetch(`${url}/api/admins/login`, {
16
- body: JSON.stringify({
17
- email: testCredentials_1.email,
18
- password: testCredentials_1.password,
19
- }),
20
- headers: {
21
- 'Content-Type': 'application/json',
22
- },
23
- method: 'post',
24
- });
25
- const data = await response.json();
26
- ({ token } = data);
27
- headers = {
28
- Authorization: `JWT ${token}`,
29
- 'Content-Type': 'application/json',
30
- };
31
- await fetch(`${url}/api/globals/blocks-global`, {
32
- body: JSON.stringify({
33
- title: 'Test Global',
34
- blocks: [
35
- {
36
- blockType: 'quote',
37
- quote: 'This is a global that will be published',
38
- color: 'red',
39
- },
40
- ],
41
- }),
42
- headers,
43
- method: 'post',
44
- }).then((res) => res.json());
45
- done();
46
- });
47
- describe('Create', () => {
48
- it('should allow a new version to be created', async () => {
49
- const title2 = 'Here is an updated global title in EN';
50
- const updatedPost = await fetch(`${url}/api/globals/blocks-global`, {
51
- body: JSON.stringify({
52
- title: title2,
53
- }),
54
- headers,
55
- method: 'post',
56
- }).then((res) => res.json());
57
- expect(updatedPost.result.title).toBe(title2);
58
- expect(updatedPost.result._status).toStrictEqual('draft');
59
- const versions = await fetch(`${url}/api/globals/blocks-global/versions`, {
60
- headers,
61
- }).then((res) => res.json());
62
- versionID = versions.docs[0].id;
63
- });
64
- it('should allow a version to be retrieved by ID', async () => {
65
- const version = await fetch(`${url}/api/globals/blocks-global/versions/${versionID}`, {
66
- headers,
67
- }).then((res) => res.json());
68
- expect(version.id).toStrictEqual(versionID);
69
- });
70
- it('should allow a version to save locales properly', async () => {
71
- const englishTitle = 'Title in EN';
72
- const spanishTitle = 'Title in ES';
73
- await fetch(`${url}/api/globals/blocks-global`, {
74
- body: JSON.stringify({
75
- title: englishTitle,
76
- }),
77
- headers,
78
- method: 'post',
79
- }).then((res) => res.json());
80
- const updatedPostES = await fetch(`${url}/api/globals/blocks-global?locale=es`, {
81
- body: JSON.stringify({
82
- title: spanishTitle,
83
- }),
84
- headers,
85
- method: 'post',
86
- }).then((res) => res.json());
87
- expect(updatedPostES.result.title).toBe(spanishTitle);
88
- const newEnglishTitle = 'New title in EN';
89
- await fetch(`${url}/api/globals/blocks-global`, {
90
- body: JSON.stringify({
91
- title: newEnglishTitle,
92
- }),
93
- headers,
94
- method: 'post',
95
- }).then((res) => res.json());
96
- const versions = await fetch(`${url}/api/globals/blocks-global/versions?locale=all`, {
97
- headers,
98
- }).then((res) => res.json());
99
- expect(versions.docs[0].version.title.en).toStrictEqual(newEnglishTitle);
100
- expect(versions.docs[0].version.title.es).toStrictEqual(spanishTitle);
101
- });
102
- });
103
- describe('Restore', () => {
104
- it('should allow a version to be restored', async () => {
105
- const title2 = 'Here is an updated post title in EN';
106
- const updatedPost = await fetch(`${url}/api/globals/blocks-global`, {
107
- body: JSON.stringify({
108
- title: title2,
109
- }),
110
- headers,
111
- method: 'post',
112
- }).then((res) => res.json());
113
- expect(updatedPost.result.title).toBe(title2);
114
- const versions = await fetch(`${url}/api/globals/blocks-global/versions`, {
115
- headers,
116
- }).then((res) => res.json());
117
- versionID = versions.docs[0].id;
118
- const restore = await fetch(`${url}/api/globals/blocks-global/versions/${versionID}`, {
119
- headers,
120
- method: 'post',
121
- }).then((res) => res.json());
122
- expect(restore.message).toBeDefined();
123
- expect(restore.doc.title).toBeDefined();
124
- const restoredPost = await fetch(`${url}/api/globals/blocks-global?draft=true`, {
125
- headers,
126
- }).then((res) => res.json());
127
- expect(restoredPost.title).toBe(restore.doc.title);
128
- });
129
- });
130
- // describe('Draft Access Control', () => {
131
- // it('should prevent a draft from being publicly readable', async () => {
132
- // const badAttempt = await fetch(`${url}/api/autosave-posts/${postID}`);
133
- // expect(badAttempt.status).toBe(404);
134
- // });
135
- // it('should prevent an authenticated user from retrieving drafts without asking', async () => {
136
- // const badAttempt = await fetch(`${url}/api/autosave-posts/${postID}`, {
137
- // headers: {
138
- // 'Content-Type': 'application/json',
139
- // },
140
- // });
141
- // expect(badAttempt.status).toBe(404);
142
- // });
143
- // it('should allow an authenticated user to explicitly retrieve draft', async () => {
144
- // const badAttempt = await fetch(`${url}/api/autosave-posts/${postID}?draft=true`, {
145
- // headers,
146
- // });
147
- // expect(badAttempt.status).toBe(200);
148
- // });
149
- // });
150
- });
151
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFscy1yZXN0LnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdmVyc2lvbnMvdGVzdHMvZ2xvYmFscy1yZXN0LnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2REFBMEM7QUFDMUMsb0VBQWlFO0FBRWpFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBRTVCLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBQSxjQUFTLEdBQUUsQ0FBQztBQUV2QyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDakIsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ25CLElBQUksU0FBUyxDQUFDO0FBRWQsUUFBUSxDQUFDLHdCQUF3QixFQUFFLEdBQUcsRUFBRTtJQUN0QyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO1FBQ3ZCLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsR0FBRyxtQkFBbUIsRUFBRTtZQUN0RCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDbkIsS0FBSyxFQUFMLHVCQUFLO2dCQUNMLFFBQVEsRUFBUiwwQkFBUTthQUNULENBQUM7WUFDRixPQUFPLEVBQUU7Z0JBQ1AsY0FBYyxFQUFFLGtCQUFrQjthQUNuQztZQUNELE1BQU0sRUFBRSxNQUFNO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxJQUFJLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFbkMsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBRW5CLE9BQU8sR0FBRztZQUNSLGFBQWEsRUFBRSxPQUFPLEtBQUssRUFBRTtZQUM3QixjQUFjLEVBQUUsa0JBQWtCO1NBQ25DLENBQUM7UUFFRixNQUFNLEtBQUssQ0FBQyxHQUFHLEdBQUcsNEJBQTRCLEVBQUU7WUFDOUMsSUFBSSxFQUFFLElBQUksQ0FB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