payload 0.15.1 → 0.15.2

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 (30) hide show
  1. package/.eslintrc.js +6 -0
  2. package/CHANGELOG.md +7 -0
  3. package/dist/admin/components/elements/elements.spec.d.ts +1 -0
  4. package/dist/admin/components/elements/elements.spec.js +12 -0
  5. package/dist/auth/auth.spec.d.ts +1 -0
  6. package/dist/auth/auth.spec.js +198 -0
  7. package/dist/collections/graphql/resolvers/resolvers.spec.d.ts +1 -0
  8. package/dist/collections/graphql/resolvers/resolvers.spec.js +360 -0
  9. package/dist/collections/operations/local/local.spec.d.ts +1 -0
  10. package/dist/collections/operations/local/local.spec.js +175 -0
  11. package/dist/collections/tests/collections.spec.d.ts +1 -0
  12. package/dist/collections/tests/collections.spec.js +725 -0
  13. package/dist/collections/tests/hooks.spec.d.ts +1 -0
  14. package/dist/collections/tests/hooks.spec.js +152 -0
  15. package/dist/collections/tests/pointField.spec.d.ts +1 -0
  16. package/dist/collections/tests/pointField.spec.js +208 -0
  17. package/dist/collections/tests/relationships.spec.d.ts +1 -0
  18. package/dist/collections/tests/relationships.spec.js +174 -0
  19. package/dist/collections/tests/uploads.spec.d.ts +1 -0
  20. package/dist/collections/tests/uploads.spec.js +328 -0
  21. package/dist/errors/errors.spec.d.ts +1 -0
  22. package/dist/errors/errors.spec.js +29 -0
  23. package/dist/express/middleware/errorHandler.spec.d.ts +1 -0
  24. package/dist/express/middleware/errorHandler.spec.js +91 -0
  25. package/dist/globals/requestHandlers/globals.spec.d.ts +4 -0
  26. package/dist/globals/requestHandlers/globals.spec.js +161 -0
  27. package/dist/preferences/graphql/resolvers.spec.d.ts +1 -0
  28. package/dist/preferences/graphql/resolvers.spec.js +115 -0
  29. package/dist/versions/drafts/appendVersionToQueryKey.js +8 -5
  30. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,152 @@
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
+ describe('Collections - REST', () => {
13
+ beforeAll(async (done) => {
14
+ const response = await fetch(`${url}/api/admins/login`, {
15
+ body: JSON.stringify({
16
+ email: testCredentials_1.email,
17
+ password: testCredentials_1.password,
18
+ }),
19
+ headers: {
20
+ 'Content-Type': 'application/json',
21
+ },
22
+ method: 'post',
23
+ });
24
+ const data = await response.json();
25
+ ({ token } = data);
26
+ headers = {
27
+ Authorization: `JWT ${token}`,
28
+ 'Content-Type': 'application/json',
29
+ };
30
+ done();
31
+ });
32
+ describe('Hooks', () => {
33
+ describe('Before', () => {
34
+ it('beforeChange', async () => {
35
+ const response = await fetch(`${url}/api/hooks`, {
36
+ body: JSON.stringify({
37
+ title: 'title 1',
38
+ description: 'Original',
39
+ priority: 1,
40
+ }),
41
+ headers: {
42
+ ...headers,
43
+ hook: 'beforeChange', // Used by hook
44
+ },
45
+ method: 'post',
46
+ });
47
+ const data = await response.json();
48
+ expect(response.status).toBe(201);
49
+ expect(data.doc.description).toStrictEqual('Original-beforeChangeSuffix');
50
+ });
51
+ it('beforeDelete', async () => {
52
+ const createResponse = await fetch(`${url}/api/hooks`, {
53
+ body: JSON.stringify({
54
+ title: 'title 2',
55
+ description: 'Original',
56
+ priority: 1,
57
+ }),
58
+ headers,
59
+ method: 'post',
60
+ });
61
+ const createData = await createResponse.json();
62
+ const { id } = createData.doc;
63
+ const response = await fetch(`${url}/api/hooks/${id}`, {
64
+ headers: {
65
+ ...headers,
66
+ hook: 'beforeDelete', // Used by hook
67
+ },
68
+ method: 'delete',
69
+ });
70
+ const data = await response.json();
71
+ expect(response.status).toBe(200);
72
+ // Intentionally afterDeleteHook - beforeDelete hook is setting header in order to trigger afterDelete hook
73
+ expect(data.afterDeleteHook).toStrictEqual(true);
74
+ });
75
+ });
76
+ describe('After', () => {
77
+ it('afterRead', async () => {
78
+ const response = await fetch(`${url}/api/hooks`, {
79
+ body: JSON.stringify({
80
+ title: 'title 3',
81
+ description: 'afterRead',
82
+ priority: 1,
83
+ }),
84
+ headers: {
85
+ ...headers,
86
+ hook: 'afterRead', // Used by hook
87
+ },
88
+ method: 'post',
89
+ });
90
+ const data = await response.json();
91
+ const getResponse = await fetch(`${url}/api/hooks/${data.doc.id}`);
92
+ const getResponseData = await getResponse.json();
93
+ expect(getResponse.status).toBe(200);
94
+ expect(getResponseData.afterReadHook).toStrictEqual(true);
95
+ });
96
+ it('afterChange', async () => {
97
+ const createResponse = await fetch(`${url}/api/hooks`, {
98
+ body: JSON.stringify({
99
+ title: 'title 4',
100
+ description: 'Original',
101
+ priority: 1,
102
+ }),
103
+ headers,
104
+ method: 'post',
105
+ });
106
+ const createData = await createResponse.json();
107
+ const { id } = createData.doc;
108
+ const response = await fetch(`${url}/api/hooks/${id}`, {
109
+ body: JSON.stringify({
110
+ description: 'afterChange',
111
+ }),
112
+ headers: {
113
+ ...headers,
114
+ hook: 'afterChange', // Used by hook
115
+ },
116
+ method: 'put',
117
+ });
118
+ const data = await response.json();
119
+ expect(response.status).toBe(200);
120
+ expect(data.doc.afterChangeHook).toStrictEqual(true);
121
+ });
122
+ it('afterDelete', async () => {
123
+ const createResponse = await fetch(`${url}/api/hooks`, {
124
+ body: JSON.stringify({
125
+ title: 'title 5',
126
+ description: 'Original',
127
+ priority: 1,
128
+ }),
129
+ headers: {
130
+ Authorization: `JWT ${token}`,
131
+ 'Content-Type': 'application/json',
132
+ },
133
+ method: 'post',
134
+ });
135
+ const createData = await createResponse.json();
136
+ const { id } = createData.doc;
137
+ const response = await fetch(`${url}/api/hooks/${id}`, {
138
+ headers: {
139
+ Authorization: `JWT ${token}`,
140
+ 'Content-Type': 'application/json',
141
+ hook: 'afterDelete', // Used by hook
142
+ },
143
+ method: 'delete',
144
+ });
145
+ const data = await response.json();
146
+ expect(response.status).toBe(200);
147
+ expect(data.afterDeleteHook).toStrictEqual(true);
148
+ });
149
+ });
150
+ });
151
+ });
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9va3Muc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb2xsZWN0aW9ucy90ZXN0cy9ob29rcy5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkRBQTBDO0FBQzFDLG9FQUFpRTtBQUVqRSxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUU1QixNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUEsY0FBUyxHQUFFLENBQUM7QUFFdkMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztBQUVuQixRQUFRLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFO0lBQ2xDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDdkIsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxHQUFHLG1CQUFtQixFQUFFO1lBQ3RELElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUNuQixLQUFLLEVBQUwsdUJBQUs7Z0JBQ0wsUUFBUSxFQUFSLDBCQUFRO2FBQ1QsQ0FBQztZQUNGLE9BQU8sRUFBRTtnQkFDUCxjQUFjLEVBQUUsa0JBQWtCO2FBQ25DO1lBQ0QsTUFBTSxFQUFFLE1BQU07U0FDZixDQUFDLENBQUM7UUFFSCxNQUFNLElBQUksR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVuQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDbkIsT0FBTyxHQUFHO1lBQ1IsYUFBYSxFQUFFLE9BQU8sS0FBSyxFQUFFO1lBQzdCLGNBQWMsRUFBRSxrQkFBa0I7U0FDbkMsQ0FBQztRQUVGLElBQUksRUFBRSxDQUFDO0lBQ1QsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtRQUNyQixRQUFRLENBQUMsUUFBUSxF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
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,208 @@
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 graphql_request_1 = require("graphql-request");
7
+ const load_1 = __importDefault(require("../../config/load"));
8
+ const testCredentials_1 = require("../../mongoose/testCredentials");
9
+ require('isomorphic-fetch');
10
+ const { serverURL, routes } = (0, load_1.default)();
11
+ let token = null;
12
+ let headers = null;
13
+ describe('GeoJSON', () => {
14
+ beforeAll(async (done) => {
15
+ const response = await fetch(`${serverURL}/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
+ done();
32
+ });
33
+ describe('Point Field - REST', () => {
34
+ const location = [10, 20];
35
+ const localizedPoint = [30, 40];
36
+ const group = { point: [15, 25] };
37
+ let doc;
38
+ beforeAll(async (done) => {
39
+ const create = await fetch(`${serverURL}/api/geolocation`, {
40
+ body: JSON.stringify({ location, localizedPoint, group }),
41
+ headers,
42
+ method: 'post',
43
+ });
44
+ ({ doc } = await create.json());
45
+ done();
46
+ });
47
+ it('should create and read collections with points', async () => {
48
+ expect(doc.id).toBeDefined();
49
+ expect(doc.location).toStrictEqual(location);
50
+ expect(doc.localizedPoint).toStrictEqual(localizedPoint);
51
+ });
52
+ it('should query where near point', async () => {
53
+ const [lng, lat] = location;
54
+ const hitResponse = await fetch(`${serverURL}/api/geolocation?where[location][near]=${lng + 0.01},${lat + 0.01},10000`, {
55
+ headers,
56
+ method: 'get',
57
+ });
58
+ const hitData = await hitResponse.json();
59
+ const hitDocs = hitData.docs;
60
+ const missResponse = await fetch(`${serverURL}/api/geolocation?where[location][near]=-${lng},-${lat},5000`, {
61
+ headers,
62
+ method: 'get',
63
+ });
64
+ const missData = await missResponse.json();
65
+ const missDocs = missData.docs;
66
+ expect(hitDocs).toHaveLength(1);
67
+ expect(missDocs).toHaveLength(0);
68
+ });
69
+ it('should query where near localized point', async () => {
70
+ const [lng, lat] = localizedPoint;
71
+ const hitResponse = await fetch(`${serverURL}/api/geolocation?where[localizedPoint][near]=${lng + 0.01},${lat + 0.01},10000`, {
72
+ headers,
73
+ method: 'get',
74
+ });
75
+ const hitData = await hitResponse.json();
76
+ const hitDocs = hitData.docs;
77
+ const missResponse = await fetch(`${serverURL}/api/geolocation?where[localizedPoint][near]=-${lng},-${lat},5000`, {
78
+ headers,
79
+ method: 'get',
80
+ });
81
+ const missData = await missResponse.json();
82
+ const missDocs = missData.docs;
83
+ expect(hitDocs).toHaveLength(1);
84
+ expect(missDocs).toHaveLength(0);
85
+ });
86
+ it('should query near a nested point', async () => {
87
+ const [x, y] = group.point;
88
+ const hitResponse = await fetch(`${serverURL}/api/geolocation?where[group.point][near]=${x + 0.01},${y + 0.01},10000`, {
89
+ headers,
90
+ method: 'get',
91
+ });
92
+ const hitData = await hitResponse.json();
93
+ const hitDocs = hitData.docs;
94
+ const missResponse = await fetch(`${serverURL}/api/geolocation?where[group.point][near]=-${x},-${y},5000`, {
95
+ headers,
96
+ method: 'get',
97
+ });
98
+ const missData = await missResponse.json();
99
+ const missDocs = missData.docs;
100
+ expect(hitDocs).toHaveLength(1);
101
+ expect(missDocs).toHaveLength(0);
102
+ });
103
+ });
104
+ describe('Point Field - GraphQL', () => {
105
+ const url = `${serverURL}${routes.api}${routes.graphQL}`;
106
+ let client = null;
107
+ const location = [50, 60];
108
+ const localizedPoint = [70, 80];
109
+ const group = { point: [50.5, 60.5] };
110
+ let doc;
111
+ beforeAll(async (done) => {
112
+ client = new graphql_request_1.GraphQLClient(url, { headers: { Authorization: `JWT ${token}` } });
113
+ // language=graphQL
114
+ const query = `mutation {
115
+ createGeolocation (
116
+ data: {
117
+ location: [${location[0]}, ${location[1]}],
118
+ localizedPoint: [${localizedPoint[0]}, ${localizedPoint[1]}],
119
+ group: {
120
+ point: [${group.point[0]}, ${group.point[1]}]
121
+ }
122
+ }
123
+ ) {
124
+ id
125
+ location
126
+ localizedPoint
127
+ }
128
+ }`;
129
+ const response = await client.request(query);
130
+ const { id } = response.createGeolocation;
131
+ // language=graphQL
132
+ const readQuery = `query {
133
+ Geolocation(id: "${id}") {
134
+ id
135
+ location
136
+ localizedPoint
137
+ }
138
+ }`;
139
+ const readResponse = await client.request(readQuery);
140
+ doc = readResponse.Geolocation;
141
+ done();
142
+ });
143
+ it('should create and read collections with points', async () => {
144
+ expect(doc.id).toBeDefined();
145
+ expect(doc.location).toStrictEqual(location);
146
+ expect(doc.localizedPoint).toStrictEqual(localizedPoint);
147
+ });
148
+ it('should query where near point', async () => {
149
+ const [lng, lat] = location;
150
+ // language=graphQL
151
+ const hitQuery = `query getGeos {
152
+ Geolocations(where: { location: { near: [${lng + 0.01},${lat + 0.01},10000]}}) {
153
+ docs {
154
+ id
155
+ location
156
+ localizedPoint
157
+ }
158
+ }
159
+ }`;
160
+ const hitResponse = await client.request(hitQuery);
161
+ const hitDocs = hitResponse.Geolocations.docs;
162
+ const missQuery = `query getGeos {
163
+ Geolocations(where: { location: { near: [${-lng},${-lat},10000]}}) {
164
+ docs {
165
+ id
166
+ location
167
+ localizedPoint
168
+ }
169
+ }
170
+ }`;
171
+ const missResponse = await client.request(missQuery);
172
+ const missDocs = missResponse.Geolocations.docs;
173
+ expect(hitDocs).toHaveLength(1);
174
+ expect(missDocs).toHaveLength(0);
175
+ });
176
+ it('should query where near a point in a group', async () => {
177
+ const [x, y] = group.point;
178
+ // language=graphQL
179
+ const hitQuery = `query getGeos {
180
+ Geolocations(where: { group__point: { near: [${x + 0.01},${y + 0.01},10000]}}) {
181
+ docs {
182
+ id
183
+ group {
184
+ point
185
+ }
186
+ }
187
+ }
188
+ }`;
189
+ const hitResponse = await client.request(hitQuery);
190
+ const hitDocs = hitResponse.Geolocations.docs;
191
+ const missQuery = `query getGeos {
192
+ Geolocations(where: { group__point: { near: [${-x},${-y},10000]}}) {
193
+ docs {
194
+ id
195
+ group {
196
+ point
197
+ }
198
+ }
199
+ }
200
+ }`;
201
+ const missResponse = await client.request(missQuery);
202
+ const missDocs = missResponse.Geolocations.docs;
203
+ expect(hitDocs).toHaveLength(1);
204
+ expect(missDocs).toHaveLength(0);
205
+ });
206
+ });
207
+ });
208
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pbnRGaWVsZC5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbGxlY3Rpb25zL3Rlc3RzL3BvaW50RmllbGQuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHFEQUFnRDtBQUNoRCw2REFBMEM7QUFDMUMsb0VBQWlFO0FBRWpFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBRTVCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBQSxjQUFTLEdBQUUsQ0FBQztBQUUxQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDakIsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBRW5CLFFBQVEsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO0lBQ3ZCLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDdkIsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxTQUFTLG1CQUFtQixFQUFFO1lBQzVELElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUNuQixLQUFLLEVBQUwsdUJBQUs7Z0JBQ0wsUUFBUSxFQUFSLDBCQUFRO2FBQ1QsQ0FBQztZQUNGLE9BQU8sRUFBRTtnQkFDUCxjQUFjLEVBQUUsa0JBQWtCO2FBQ25DO1lBQ0QsTUFBTSxFQUFFLE1BQU07U0FDZixDQUFDLENBQUM7UUFFSCxNQUFNLElBQUksR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVuQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDbkIsT0FBTyxHQUFHO1lBQ1IsYUFBYSxFQUFFLE9BQU8sS0FBSyxFQUFFO1lBQzdCLGNBQWMsRUFBRSxrQkFBa0I7U0FDbkMsQ0FBQztRQUVGLElBQUksRUFBRSxDQUFDO0lBQ1QsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFF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
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,174 @@
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
+ describe('Collections - REST', () => {
13
+ beforeAll(async (done) => {
14
+ const response = await fetch(`${url}/api/admins/login`, {
15
+ body: JSON.stringify({
16
+ email: testCredentials_1.email,
17
+ password: testCredentials_1.password,
18
+ }),
19
+ headers: {
20
+ 'Content-Type': 'application/json',
21
+ },
22
+ method: 'post',
23
+ });
24
+ const data = await response.json();
25
+ ({ token } = data);
26
+ headers = {
27
+ Authorization: `JWT ${token}`,
28
+ 'Content-Type': 'application/json',
29
+ };
30
+ done();
31
+ });
32
+ describe('Relationships', () => {
33
+ let documentA;
34
+ let documentB;
35
+ let strictAccessDoc;
36
+ beforeAll(async (done) => {
37
+ const strictAccessRes = await fetch(`${url}/api/strict-access`, {
38
+ body: JSON.stringify({
39
+ address: '123 Test Lane',
40
+ city: 'Grand Rapids',
41
+ state: 'MI',
42
+ zip: 49504,
43
+ }),
44
+ headers,
45
+ method: 'post',
46
+ });
47
+ const strictAccessJSON = await strictAccessRes.json();
48
+ strictAccessDoc = strictAccessJSON.doc;
49
+ // create document a
50
+ const createA = await fetch(`${url}/api/relationship-a`, {
51
+ body: JSON.stringify({}),
52
+ headers,
53
+ method: 'post',
54
+ });
55
+ const createAData = await createA.json();
56
+ // create document b, related to a
57
+ const createB = await fetch(`${url}/api/relationship-b`, {
58
+ body: JSON.stringify({
59
+ post: [createAData.doc.id],
60
+ strictAccess: strictAccessDoc.id,
61
+ }),
62
+ headers,
63
+ method: 'post',
64
+ });
65
+ // update a to relate to b
66
+ const createBData = await createB.json();
67
+ documentB = createBData.doc;
68
+ const updateA = await fetch(`${url}/api/relationship-a/${createAData.doc.id}`, {
69
+ body: JSON.stringify({
70
+ post: documentB.id,
71
+ postMaxDepth: documentB.id,
72
+ }),
73
+ headers,
74
+ method: 'put',
75
+ });
76
+ const updateAData = await updateA.json();
77
+ documentA = updateAData.doc;
78
+ done();
79
+ });
80
+ it('should create and read collections with relationships', async () => {
81
+ expect(documentA.post).toBeDefined();
82
+ expect(documentB.post).toHaveLength(1);
83
+ });
84
+ it('should prevent an unauthorized population of strict access', async () => {
85
+ const response = await fetch(`${url}/api/relationship-b/${documentB.id}`);
86
+ const data = await response.json();
87
+ expect(data.strictAccess).toBeNull();
88
+ });
89
+ it('should populate strict access when authorized', async () => {
90
+ const response = await fetch(`${url}/api/relationship-b/${documentB.id}`, {
91
+ headers,
92
+ });
93
+ const data = await response.json();
94
+ expect(typeof data.strictAccess).toBe('object');
95
+ });
96
+ it('should use depth to limit the number of relationships returned', async () => {
97
+ const response = await fetch(`${url}/api/relationship-a?depth=3`, {
98
+ headers,
99
+ method: 'get',
100
+ });
101
+ const data = await response.json();
102
+ const [doc] = data.docs;
103
+ expect(doc.id).toBe(documentA.id);
104
+ let nested = doc.post;
105
+ expect(nested.id).toBe(documentB.id);
106
+ [nested] = nested.post;
107
+ expect(nested.id).toBe(documentA.id);
108
+ nested = nested.post;
109
+ expect(nested.id).toBe(documentB.id);
110
+ [nested] = nested.post;
111
+ expect(nested).not.toHaveProperty('post');
112
+ expect(nested).toBe(documentA.id);
113
+ });
114
+ it('should respect max depth at the field level', async () => {
115
+ const response = await fetch(`${url}/api/relationship-a?depth=1`, {
116
+ headers,
117
+ method: 'get',
118
+ });
119
+ const data = await response.json();
120
+ const [doc] = data.docs;
121
+ // asserts postMaxDepth is not populated
122
+ expect(doc.postMaxDepth).toBe(documentB.id);
123
+ expect(doc.postMaxDepth).not.toHaveProperty('post');
124
+ });
125
+ it('should allow a custom id relation', async () => {
126
+ const customID = {
127
+ id: 30,
128
+ name: 'custom',
129
+ };
130
+ const newCustomID = await fetch(`${url}/api/custom-id`, {
131
+ headers,
132
+ body: JSON.stringify(customID),
133
+ method: 'post',
134
+ });
135
+ const custom = await newCustomID.json();
136
+ const response = await fetch(`${url}/api/relationship-a/${documentA.id}`, {
137
+ headers,
138
+ body: JSON.stringify({
139
+ ...documentA,
140
+ post: documentB.id,
141
+ customID: [custom.doc.id],
142
+ }),
143
+ method: 'put',
144
+ });
145
+ const { doc } = await response.json();
146
+ expect(doc.customID[0].id).toBe(customID.id);
147
+ });
148
+ it('should allow a custom id relation and parse the id type', async () => {
149
+ const customID = {
150
+ id: '40',
151
+ name: 'custom',
152
+ };
153
+ const newCustomID = await fetch(`${url}/api/custom-id`, {
154
+ headers,
155
+ body: JSON.stringify(customID),
156
+ method: 'post',
157
+ });
158
+ const custom = await newCustomID.json();
159
+ const response = await fetch(`${url}/api/relationship-a/${documentA.id}`, {
160
+ headers,
161
+ body: JSON.stringify({
162
+ ...documentA,
163
+ post: documentB.id,
164
+ customID: [custom.doc.id],
165
+ }),
166
+ method: 'put',
167
+ });
168
+ const { doc } = await response.json();
169
+ expect(custom.doc.id).toBe(parseFloat(customID.id));
170
+ expect(doc.customID[0].id).toBe(parseFloat(customID.id));
171
+ });
172
+ });
173
+ });
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsYXRpb25zaGlwcy5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbGxlY3Rpb25zL3Rlc3RzL3JlbGF0aW9uc2hpcHMuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZEQUEwQztBQUMxQyxvRUFBaUU7QUFFakUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFFNUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFBLGNBQVMsR0FBRSxDQUFDO0FBRXZDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztBQUNqQixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFFbkIsUUFBUSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRTtJQUNsQyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO1FBQ3ZCLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsR0FBRyxtQkFBbUIsRUFBRTtZQUN0RCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDbkIsS0FBSyxFQUFMLHVCQUFLO2dCQUNMLFFBQVEsRUFBUiwwQkFBUTthQUNULENBQUM7WUFDRixPQUFPLEVBQUU7Z0JBQ1AsY0FBYyxFQUFFLGtCQUFrQjthQUNuQztZQUNELE1BQU0sRUFBRSxNQUFNO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxJQUFJLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFbkMsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ25CLE9BQU8sR0FBRztZQUNSLGFBQWEsRUFBRSxPQUFPLEtBQUssRUFBRTtZQUM3QixjQUFjLEVBQUUsa0JBQWtCO1NBQ25DLENBQUM7UUFFRixJQUFJLEVBQUUsQ0FBQztJQUNULENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUU7UUFDN0Is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
@@ -0,0 +1 @@
1
+ export {};