payload 0.20.7-beta.0 → 0.20.10-beta.0
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/CHANGELOG.md +18 -37
- package/components/styles.css +1 -1
- package/dist/admin/components/elements/ColumnSelector/index.js +1 -1
- package/dist/admin/components/elements/ColumnSelector/index.scss +4 -7
- package/dist/admin/components/elements/Eyebrow/index.scss +4 -0
- package/dist/admin/components/elements/Pill/index.scss +1 -0
- package/dist/admin/components/elements/ReactSelect/index.js +2 -2
- package/dist/admin/components/elements/ReactSelect/types.d.ts +1 -0
- package/dist/admin/components/elements/WhereBuilder/index.js +1 -1
- package/dist/admin/components/forms/field-types/Array/Array.js +1 -1
- package/dist/admin/components/forms/field-types/Array/index.scss +1 -1
- package/dist/admin/components/forms/field-types/Blocks/Blocks.js +1 -1
- package/dist/admin/components/forms/field-types/Blocks/index.scss +1 -1
- package/dist/admin/components/forms/field-types/Group/index.js +3 -0
- package/dist/admin/components/forms/field-types/Group/index.scss +12 -0
- package/dist/admin/components/forms/field-types/RichText/elements/upload/Element/EditModal/index.js +3 -3
- package/dist/admin/components/forms/field-types/RichText/elements/upload/Element/EditModal/index.scss +1 -15
- package/dist/admin/components/forms/field-types/Select/Input.d.ts +1 -0
- package/dist/admin/components/forms/field-types/Select/Input.js +2 -2
- package/dist/admin/components/forms/field-types/Select/index.js +6 -3
- package/dist/admin/components/forms/field-types/Tabs/index.js +17 -15
- package/dist/admin/components/forms/field-types/Tabs/index.scss +3 -4
- package/dist/admin/components/forms/field-types/Tabs/provider.d.ts +8 -0
- package/dist/admin/components/forms/field-types/Tabs/provider.js +7 -0
- package/dist/admin/components/forms/field-types/Upload/index.scss +1 -1
- package/dist/admin/components/views/Version/RenderFieldsToDiff/fields/Iterable/index.js +2 -2
- package/dist/admin/components/views/Version/RenderFieldsToDiff/fields/styles.d.ts +1 -0
- package/dist/admin/components/views/Version/RenderFieldsToDiff/fields/styles.js +1 -0
- package/dist/admin/components/views/Version/Version.js +1 -1
- package/dist/admin/components/views/collections/List/buildColumns.js +1 -1
- package/dist/collections/operations/local/restoreVersion.d.ts +0 -1
- package/dist/collections/operations/local/restoreVersion.js +2 -3
- package/dist/fields/config/schema.js +4 -1
- package/dist/fields/config/types.d.ts +3 -0
- package/dist/fields/config/types.js +1 -1
- package/dist/fields/hooks/beforeChange/promise.js +3 -3
- package/dist/globals/operations/local/restoreVersion.d.ts +2 -0
- package/dist/globals/operations/local/restoreVersion.js +6 -3
- package/dist/index.js +1 -1
- package/dist/mongoose/buildSchema.js +4 -4
- package/dist/{admin/utilities → utilities}/flattenTopLevelFields.d.ts +1 -1
- package/dist/utilities/flattenTopLevelFields.js +33 -0
- package/dist/webpack/getBaseConfig.js +2 -6
- package/docs/fields/select.mdx +40 -22
- package/docs/fields/tabs.mdx +64 -2
- package/package.json +1 -1
- package/dist/admin/utilities/flattenTopLevelFields.js +0 -30
- package/dist/auth/auth.spec.d.ts +0 -1
- package/dist/auth/auth.spec.js +0 -198
- package/dist/versions/tests/collections-graphql.spec.d.ts +0 -1
- package/dist/versions/tests/collections-graphql.spec.js +0 -141
- package/dist/versions/tests/collections-rest.spec.d.ts +0 -1
- package/dist/versions/tests/collections-rest.spec.js +0 -148
- package/dist/versions/tests/globals-graphql.spec.d.ts +0 -1
- package/dist/versions/tests/globals-graphql.spec.js +0 -157
- package/dist/versions/tests/globals-rest.spec.d.ts +0 -1
- package/dist/versions/tests/globals-rest.spec.js +0 -151
package/docs/fields/tabs.mdx
CHANGED
|
@@ -2,8 +2,70 @@
|
|
|
2
2
|
title: Tabs Field
|
|
3
3
|
label: Tabs
|
|
4
4
|
order: 170
|
|
5
|
-
desc: Tabs field
|
|
5
|
+
desc: The Tabs field is a great way to organize complex editing experiences into specific tab-based areas.
|
|
6
6
|
keywords: tabs, fields, config, configuration, documentation, Content Management System, cms, headless, javascript, node, react, express
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
<Banner >
|
|
10
|
+
The Tabs field is presentational-only and only affects the Admin panel. By using it, you can place fields within a nice layout component that separates certain sub-fields by a tabbed interface.
|
|
11
|
+
</Banner>
|
|
12
|
+
|
|
13
|
+

|
|
14
|
+
*Tabs field type used to separate Hero fields from Page Layout*
|
|
15
|
+
|
|
16
|
+
### Config
|
|
17
|
+
|
|
18
|
+
| Option | Description |
|
|
19
|
+
| ---------------- | ----------- |
|
|
20
|
+
| **`tabs`** * | Array of tabs to render within this Tabs field. |
|
|
21
|
+
| **`admin`** | Admin-specific configuration. See the [default field admin config](/docs/fields/overview#admin-config) for more details. |
|
|
22
|
+
|
|
23
|
+
#### Tab-specific Config
|
|
24
|
+
|
|
25
|
+
Each tab has its own required `label` and `fields` array. You can also optionally pass a `description` to render within each individual tab.
|
|
26
|
+
|
|
27
|
+
| Option | Description |
|
|
28
|
+
| ----------------- | ----------- |
|
|
29
|
+
| **`label`** * | The label to render on the tab itself. |
|
|
30
|
+
| **`fields`** * | The fields to render within this tab. |
|
|
31
|
+
| **`description`** | Optionally render a description within this tab to describe the contents of the tab itself. |
|
|
32
|
+
|
|
33
|
+
*\* An asterisk denotes that a property is required.*
|
|
34
|
+
|
|
35
|
+
### Example
|
|
36
|
+
|
|
37
|
+
`collections/ExampleCollection.js`
|
|
38
|
+
```js
|
|
39
|
+
{
|
|
40
|
+
slug: 'example-collection',
|
|
41
|
+
fields: [
|
|
42
|
+
{
|
|
43
|
+
type: 'tabs', // required
|
|
44
|
+
tabs: [ // required
|
|
45
|
+
{
|
|
46
|
+
label: 'Tab One Label', // required
|
|
47
|
+
description: 'This will appear within the tab above the fields.'
|
|
48
|
+
fields: [ // required
|
|
49
|
+
{
|
|
50
|
+
name: 'someTextField',
|
|
51
|
+
type: 'text',
|
|
52
|
+
required: true,
|
|
53
|
+
},
|
|
54
|
+
],
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
label: 'Tab Two Label', // required
|
|
58
|
+
fields: [ // required
|
|
59
|
+
{
|
|
60
|
+
name: 'numberField',
|
|
61
|
+
type: 'number',
|
|
62
|
+
required: true,
|
|
63
|
+
},
|
|
64
|
+
],
|
|
65
|
+
}
|
|
66
|
+
]
|
|
67
|
+
|
|
68
|
+
}
|
|
69
|
+
]
|
|
70
|
+
}
|
|
71
|
+
```
|
package/package.json
CHANGED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { fieldAffectsData, fieldHasSubFields, fieldIsPresentationalOnly } from '../../fields/config/types';
|
|
2
|
-
const flattenFields = (fields, keepPresentationalFields) => {
|
|
3
|
-
return fields.reduce((fieldsToUse, field) => {
|
|
4
|
-
if (fieldAffectsData(field) || (keepPresentationalFields && fieldIsPresentationalOnly(field))) {
|
|
5
|
-
return [
|
|
6
|
-
...fieldsToUse,
|
|
7
|
-
field,
|
|
8
|
-
];
|
|
9
|
-
}
|
|
10
|
-
if (fieldHasSubFields(field)) {
|
|
11
|
-
return [
|
|
12
|
-
...fieldsToUse,
|
|
13
|
-
...flattenFields(field.fields, keepPresentationalFields),
|
|
14
|
-
];
|
|
15
|
-
}
|
|
16
|
-
if (field.type === 'tabs') {
|
|
17
|
-
return [
|
|
18
|
-
...fieldsToUse,
|
|
19
|
-
...field.tabs.reduce((tabFields, tab) => {
|
|
20
|
-
return [
|
|
21
|
-
...tabFields,
|
|
22
|
-
...flattenFields(tab.fields, keepPresentationalFields),
|
|
23
|
-
];
|
|
24
|
-
}, []),
|
|
25
|
-
];
|
|
26
|
-
}
|
|
27
|
-
return fieldsToUse;
|
|
28
|
-
}, []);
|
|
29
|
-
};
|
|
30
|
-
export default flattenFields;
|
package/dist/auth/auth.spec.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/dist/auth/auth.spec.js
DELETED
|
@@ -1,198 +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 mongodb_1 = __importDefault(require("mongodb"));
|
|
7
|
-
const load_1 = __importDefault(require("../config/load"));
|
|
8
|
-
const testCredentials_1 = require("../mongoose/testCredentials");
|
|
9
|
-
require('isomorphic-fetch');
|
|
10
|
-
const { url: mongoURL, port: mongoPort, name: mongoDBName } = testCredentials_1.connection;
|
|
11
|
-
const { serverURL: url } = (0, load_1.default)();
|
|
12
|
-
let token = null;
|
|
13
|
-
describe('Users REST API', () => {
|
|
14
|
-
it('should prevent registering a first user', async () => {
|
|
15
|
-
const response = await fetch(`${url}/api/admins/first-register`, {
|
|
16
|
-
body: JSON.stringify({
|
|
17
|
-
email: 'thisuser@shouldbeprevented.com',
|
|
18
|
-
password: 'get-out',
|
|
19
|
-
}),
|
|
20
|
-
headers: {
|
|
21
|
-
'Content-Type': 'application/json',
|
|
22
|
-
},
|
|
23
|
-
method: 'post',
|
|
24
|
-
});
|
|
25
|
-
expect(response.status).toBe(403);
|
|
26
|
-
});
|
|
27
|
-
it('should login a user successfully', async () => {
|
|
28
|
-
const response = await fetch(`${url}/api/admins/login`, {
|
|
29
|
-
body: JSON.stringify({
|
|
30
|
-
email: testCredentials_1.email,
|
|
31
|
-
password: testCredentials_1.password,
|
|
32
|
-
}),
|
|
33
|
-
headers: {
|
|
34
|
-
'Content-Type': 'application/json',
|
|
35
|
-
},
|
|
36
|
-
method: 'post',
|
|
37
|
-
});
|
|
38
|
-
const data = await response.json();
|
|
39
|
-
expect(response.status).toBe(200);
|
|
40
|
-
expect(data.token).toBeDefined();
|
|
41
|
-
({ token } = data);
|
|
42
|
-
});
|
|
43
|
-
it('should return a logged in user from /me', async () => {
|
|
44
|
-
const response = await fetch(`${url}/api/admins/me`, {
|
|
45
|
-
headers: {
|
|
46
|
-
Authorization: `JWT ${token}`,
|
|
47
|
-
},
|
|
48
|
-
});
|
|
49
|
-
const data = await response.json();
|
|
50
|
-
expect(response.status).toBe(200);
|
|
51
|
-
expect(data.user.email).toBeDefined();
|
|
52
|
-
});
|
|
53
|
-
it('should refresh a token and reset its expiration', async () => {
|
|
54
|
-
const response = await fetch(`${url}/api/admins/refresh-token`, {
|
|
55
|
-
method: 'post',
|
|
56
|
-
headers: {
|
|
57
|
-
Authorization: `JWT ${token}`,
|
|
58
|
-
},
|
|
59
|
-
});
|
|
60
|
-
const data = await response.json();
|
|
61
|
-
expect(response.status).toBe(200);
|
|
62
|
-
expect(data.refreshedToken).toBeDefined();
|
|
63
|
-
token = data.refreshedToken;
|
|
64
|
-
});
|
|
65
|
-
it('should allow forgot-password by email', async () => {
|
|
66
|
-
// TODO: figure out how to spy on payload instance functions
|
|
67
|
-
// const mailSpy = jest.spyOn(payload, 'sendEmail');
|
|
68
|
-
const response = await fetch(`${url}/api/admins/forgot-password`, {
|
|
69
|
-
method: 'post',
|
|
70
|
-
body: JSON.stringify({
|
|
71
|
-
email: testCredentials_1.email,
|
|
72
|
-
}),
|
|
73
|
-
headers: {
|
|
74
|
-
'Content-Type': 'application/json',
|
|
75
|
-
},
|
|
76
|
-
});
|
|
77
|
-
// is not working
|
|
78
|
-
// expect(mailSpy).toHaveBeenCalled();
|
|
79
|
-
expect(response.status).toBe(200);
|
|
80
|
-
});
|
|
81
|
-
it('should allow a user to be created', async () => {
|
|
82
|
-
const response = await fetch(`${url}/api/admins`, {
|
|
83
|
-
body: JSON.stringify({
|
|
84
|
-
email: 'name@test.com',
|
|
85
|
-
password: testCredentials_1.password,
|
|
86
|
-
roles: ['editor'],
|
|
87
|
-
}),
|
|
88
|
-
headers: {
|
|
89
|
-
Authorization: `JWT ${token}`,
|
|
90
|
-
'Content-Type': 'application/json',
|
|
91
|
-
},
|
|
92
|
-
method: 'post',
|
|
93
|
-
});
|
|
94
|
-
const data = await response.json();
|
|
95
|
-
expect(response.status).toBe(201);
|
|
96
|
-
expect(data).toHaveProperty('message');
|
|
97
|
-
expect(data).toHaveProperty('doc');
|
|
98
|
-
const { doc } = data;
|
|
99
|
-
expect(doc).toHaveProperty('email');
|
|
100
|
-
expect(doc).toHaveProperty('createdAt');
|
|
101
|
-
expect(doc).toHaveProperty('roles');
|
|
102
|
-
});
|
|
103
|
-
it('should allow verification of a user', async () => {
|
|
104
|
-
const emailToVerify = 'verify@me.com';
|
|
105
|
-
const response = await fetch(`${url}/api/public-users`, {
|
|
106
|
-
body: JSON.stringify({
|
|
107
|
-
email: emailToVerify,
|
|
108
|
-
password: testCredentials_1.password,
|
|
109
|
-
roles: ['editor'],
|
|
110
|
-
}),
|
|
111
|
-
headers: {
|
|
112
|
-
Authorization: `JWT ${token}`,
|
|
113
|
-
'Content-Type': 'application/json',
|
|
114
|
-
},
|
|
115
|
-
method: 'post',
|
|
116
|
-
});
|
|
117
|
-
expect(response.status).toBe(201);
|
|
118
|
-
const client = await mongodb_1.default.connect(`${mongoURL}:${mongoPort}`, {
|
|
119
|
-
useUnifiedTopology: true,
|
|
120
|
-
});
|
|
121
|
-
const db = client.db(mongoDBName);
|
|
122
|
-
const userResult = await db.collection('public-users').findOne({ email: emailToVerify });
|
|
123
|
-
const { _verified, _verificationToken } = userResult;
|
|
124
|
-
expect(_verified).toBe(false);
|
|
125
|
-
expect(_verificationToken).toBeDefined();
|
|
126
|
-
const verificationResponse = await fetch(`${url}/api/public-users/verify/${_verificationToken}`, {
|
|
127
|
-
headers: {
|
|
128
|
-
'Content-Type': 'application/json',
|
|
129
|
-
},
|
|
130
|
-
method: 'post',
|
|
131
|
-
});
|
|
132
|
-
expect(verificationResponse.status).toBe(200);
|
|
133
|
-
const afterVerifyResult = await db.collection('public-users').findOne({ email: emailToVerify });
|
|
134
|
-
const { _verified: afterVerified, _verificationToken: afterToken } = afterVerifyResult;
|
|
135
|
-
expect(afterVerified).toBe(true);
|
|
136
|
-
expect(afterToken).toBeUndefined();
|
|
137
|
-
});
|
|
138
|
-
describe('Account Locking', () => {
|
|
139
|
-
const userEmail = 'lock@me.com';
|
|
140
|
-
let db;
|
|
141
|
-
beforeAll(async () => {
|
|
142
|
-
const client = await mongodb_1.default.connect(`${mongoURL}:${mongoPort}`);
|
|
143
|
-
db = client.db(mongoDBName);
|
|
144
|
-
});
|
|
145
|
-
it('should lock the user after too many attempts', async () => {
|
|
146
|
-
await fetch(`${url}/api/admins`, {
|
|
147
|
-
body: JSON.stringify({
|
|
148
|
-
email: userEmail,
|
|
149
|
-
password: testCredentials_1.password,
|
|
150
|
-
}),
|
|
151
|
-
headers: {
|
|
152
|
-
Authorization: `JWT ${token}`,
|
|
153
|
-
'Content-Type': 'application/json',
|
|
154
|
-
},
|
|
155
|
-
method: 'post',
|
|
156
|
-
});
|
|
157
|
-
const tryLogin = () => fetch(`${url}/api/admins/login`, {
|
|
158
|
-
body: JSON.stringify({
|
|
159
|
-
email: userEmail,
|
|
160
|
-
password: 'bad',
|
|
161
|
-
}),
|
|
162
|
-
headers: {
|
|
163
|
-
Authorization: `JWT ${token}`,
|
|
164
|
-
'Content-Type': 'application/json',
|
|
165
|
-
},
|
|
166
|
-
method: 'post',
|
|
167
|
-
});
|
|
168
|
-
await tryLogin();
|
|
169
|
-
await tryLogin();
|
|
170
|
-
await tryLogin();
|
|
171
|
-
await tryLogin();
|
|
172
|
-
await tryLogin();
|
|
173
|
-
const userResult = await db.collection('admins').findOne({ email: userEmail });
|
|
174
|
-
const { loginAttempts, lockUntil } = userResult;
|
|
175
|
-
expect(loginAttempts).toBe(5);
|
|
176
|
-
expect(lockUntil).toBeDefined();
|
|
177
|
-
});
|
|
178
|
-
it('should unlock account once lockUntil period is over', async () => {
|
|
179
|
-
await db.collection('admins').findOneAndUpdate({ email: userEmail }, { $set: { lockUntil: Date.now() - (605 * 1000) } });
|
|
180
|
-
await fetch(`${url}/api/admins/login`, {
|
|
181
|
-
body: JSON.stringify({
|
|
182
|
-
email: userEmail,
|
|
183
|
-
password: testCredentials_1.password,
|
|
184
|
-
}),
|
|
185
|
-
headers: {
|
|
186
|
-
Authorization: `JWT ${token}`,
|
|
187
|
-
'Content-Type': 'application/json',
|
|
188
|
-
},
|
|
189
|
-
method: 'post',
|
|
190
|
-
});
|
|
191
|
-
const userResult = await db.collection('admins').findOne({ email: userEmail });
|
|
192
|
-
const { loginAttempts, lockUntil } = userResult;
|
|
193
|
-
expect(loginAttempts).toBe(0);
|
|
194
|
-
expect(lockUntil).toBeUndefined();
|
|
195
|
-
});
|
|
196
|
-
});
|
|
197
|
-
});
|
|
198
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F1dGgvYXV0aC5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsc0RBQWtDO0FBQ2xDLDBEQUF1QztBQUN2QyxpRUFBMEU7QUFFMUUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFFNUIsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEdBQUcsNEJBQVUsQ0FBQztBQUV6RSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUEsY0FBUyxHQUFFLENBQUM7QUFFdkMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBRWpCLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7SUFDOUIsRUFBRSxDQUFDLHlDQUF5QyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3ZELE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsR0FBRyw0QkFBNEIsRUFBRTtZQUMvRCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDbkIsS0FBSyxFQUFFLGdDQUFnQztnQkFDdkMsUUFBUSxFQUFFLFNBQVM7YUFDcEIsQ0FBQztZQUNGLE9BQU8sRUFBRTtnQkFDUCxjQUFjLEVBQUUsa0JBQWtCO2FBQ25DO1lBQ0QsTUFBTSxFQUFFLE1BQU07U0FDZixDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNoRCxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLEdBQUcsbUJBQW1CLEVBQUU7WUFDdEQsSUFBSSxFQUFFLElBQUksQ0FBQyxT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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbnMtZ3JhcGhxbC5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3ZlcnNpb25zL3Rlc3RzL2NvbGxlY3Rpb25zLWdyYXBocWwuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBOztHQUVHO0FBQ0gscURBQXlEO0FBQ3pELDZEQUEwQztBQUMxQyxvRUFBaUU7QUFFakUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFFNUIsTUFBTSxNQUFNLEdBQUcsSUFBQSxjQUFTLEdBQUUsQ0FBQztBQUUzQixNQUFNLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUU5RSxJQUFJLE1BQU0sQ0FBQztBQUNYLElBQUksS0FBSyxDQUFDO0FBQ1YsSUFBSSxNQUFNLENBQUM7QUFDWCxJQUFJLFNBQVMsQ0FBQztBQUVkLFFBQVEsQ0FBQyx1Q0FBdUMsRUFBRSxHQUFHLEVBQUU7SUFDckQsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUM7SUFFL0IsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUN2QixNQUFNLEtBQUssR0FBRzs7O29CQUdFLHVCQUFLO3VCQUNGLDBCQUFROzs7O1FBSXZCLENBQUM7UUFFTCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUEseUJBQU8sRUFBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFM0MsS0FBSyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO1FBRWxDLE1BQU0sR0FBRyxJQUFJLCtCQUFhLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsYUFBYSxFQUFFLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFaEYsSUFBSSxFQUFFLENBQUM7SUFDVCxDQUFD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
|
|
@@ -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 {};
|