@appsemble/cli 0.29.11 → 0.30.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 (156) hide show
  1. package/README.md +10 -10
  2. package/commands/app/create.d.ts +1 -1
  3. package/commands/app/create.js +5 -5
  4. package/commands/{team → group}/create.d.ts +3 -3
  5. package/commands/{team → group}/create.js +5 -5
  6. package/commands/{team → group}/delete.d.ts +3 -3
  7. package/commands/{team → group}/delete.js +5 -5
  8. package/commands/{team → group}/index.d.ts +2 -2
  9. package/commands/{team → group}/index.js +4 -4
  10. package/commands/{team → group}/member/delete.d.ts +3 -3
  11. package/commands/{team → group}/member/delete.js +5 -5
  12. package/commands/{team → group}/member/index.d.ts +1 -1
  13. package/commands/{team → group}/member/index.js +1 -3
  14. package/commands/{team → group}/member/invite.d.ts +3 -3
  15. package/commands/{team → group}/member/invite.js +5 -5
  16. package/commands/{team → group}/update.d.ts +3 -3
  17. package/commands/{team → group}/update.js +7 -7
  18. package/commands/migrateAppDefinitions.d.ts +13 -0
  19. package/commands/migrateAppDefinitions.js +73 -0
  20. package/commands/serve.d.ts +1 -1
  21. package/commands/serve.js +16 -16
  22. package/index.js +4 -2
  23. package/lib/app.js +13 -3
  24. package/lib/app.test.js +1266 -1262
  25. package/lib/asset.js +4 -2
  26. package/lib/asset.test.js +70 -67
  27. package/lib/block.test.js +144 -142
  28. package/lib/config.test.js +205 -203
  29. package/lib/createServers.js +3 -1
  30. package/lib/group.d.ts +61 -0
  31. package/lib/group.js +55 -0
  32. package/lib/group.test.js +610 -0
  33. package/lib/organization.test.js +189 -187
  34. package/lib/resource.js +3 -1
  35. package/lib/resource.test.js +322 -320
  36. package/lib/serverImport.d.ts +1 -1
  37. package/package.json +8 -7
  38. package/server/argv.d.ts +4 -4
  39. package/server/argv.js +1 -1
  40. package/server/controllers/apps/actions/index.d.ts +5 -0
  41. package/server/controllers/apps/actions/index.js +6 -0
  42. package/server/controllers/apps/actions/proxyDelete.d.ts +2 -0
  43. package/server/controllers/apps/actions/proxyDelete.js +4 -0
  44. package/server/controllers/apps/actions/proxyGet.d.ts +2 -0
  45. package/server/controllers/apps/actions/proxyGet.js +4 -0
  46. package/server/controllers/apps/actions/proxyPatch.d.ts +2 -0
  47. package/server/controllers/apps/actions/proxyPatch.js +4 -0
  48. package/server/controllers/apps/actions/proxyPost.d.ts +2 -0
  49. package/server/controllers/apps/actions/proxyPost.js +4 -0
  50. package/server/controllers/apps/actions/proxyPut.d.ts +2 -0
  51. package/server/controllers/apps/actions/proxyPut.js +4 -0
  52. package/server/controllers/apps/index.d.ts +2 -0
  53. package/server/controllers/apps/index.js +3 -0
  54. package/server/controllers/apps/members/current/getCurrentAppMember.d.ts +2 -0
  55. package/server/controllers/apps/members/current/getCurrentAppMember.js +4 -0
  56. package/server/controllers/apps/members/current/index.d.ts +1 -0
  57. package/server/controllers/apps/members/current/index.js +2 -0
  58. package/server/controllers/apps/members/index.d.ts +1 -0
  59. package/server/controllers/apps/members/index.js +2 -0
  60. package/server/controllers/common/apps/assets/getAppAssetById.d.ts +2 -0
  61. package/server/controllers/common/apps/assets/getAppAssetById.js +4 -0
  62. package/server/controllers/common/apps/assets/index.d.ts +1 -0
  63. package/server/controllers/common/apps/assets/index.js +2 -0
  64. package/server/controllers/common/apps/groups/getAppGroups.d.ts +2 -0
  65. package/server/controllers/common/apps/groups/getAppGroups.js +4 -0
  66. package/server/controllers/common/apps/groups/index.d.ts +1 -0
  67. package/server/controllers/common/apps/groups/index.js +2 -0
  68. package/server/controllers/common/apps/index.d.ts +5 -0
  69. package/server/controllers/common/apps/index.js +6 -0
  70. package/server/controllers/common/apps/messages/getAppMessages.d.ts +2 -0
  71. package/server/controllers/common/apps/messages/getAppMessages.js +4 -0
  72. package/server/controllers/common/apps/messages/index.d.ts +1 -0
  73. package/server/controllers/common/apps/messages/index.js +2 -0
  74. package/server/controllers/common/apps/resources/countAppResources.d.ts +2 -0
  75. package/server/controllers/common/apps/resources/countAppResources.js +4 -0
  76. package/server/controllers/common/apps/resources/createAppResource.d.ts +2 -0
  77. package/server/controllers/common/apps/resources/createAppResource.js +4 -0
  78. package/server/controllers/common/apps/resources/deleteAppResource.d.ts +2 -0
  79. package/server/controllers/common/apps/resources/deleteAppResource.js +4 -0
  80. package/server/controllers/common/apps/resources/getAppResourceById.d.ts +2 -0
  81. package/server/controllers/common/apps/resources/getAppResourceById.js +4 -0
  82. package/server/controllers/common/apps/resources/index.d.ts +6 -0
  83. package/server/controllers/common/apps/resources/index.js +7 -0
  84. package/server/controllers/common/apps/resources/queryAppResources.d.ts +2 -0
  85. package/server/controllers/common/apps/resources/queryAppResources.js +4 -0
  86. package/server/controllers/common/apps/resources/updateAppResource.d.ts +2 -0
  87. package/server/controllers/common/apps/resources/updateAppResource.js +4 -0
  88. package/server/controllers/common/apps/variables/getAppVariables.js +4 -0
  89. package/server/controllers/common/apps/variables/index.d.ts +1 -0
  90. package/server/controllers/common/apps/variables/index.js +2 -0
  91. package/server/controllers/common/index.d.ts +1 -0
  92. package/server/controllers/common/index.js +2 -0
  93. package/server/controllers/index.d.ts +3 -8
  94. package/server/controllers/index.js +3 -8
  95. package/server/controllers/main/apps/assets/createAppAsset.d.ts +2 -0
  96. package/server/controllers/main/apps/assets/createAppAsset.js +4 -0
  97. package/server/controllers/main/apps/assets/index.d.ts +1 -0
  98. package/server/controllers/main/apps/assets/index.js +2 -0
  99. package/server/controllers/main/apps/index.d.ts +1 -0
  100. package/server/controllers/main/apps/index.js +2 -0
  101. package/server/controllers/main/index.d.ts +1 -0
  102. package/server/controllers/main/index.js +2 -0
  103. package/server/options/checkAppMemberAppPermissions.d.ts +1 -0
  104. package/server/options/checkAppMemberAppPermissions.js +4 -0
  105. package/server/options/checkAppPermissions.d.ts +1 -0
  106. package/server/options/checkAppPermissions.js +4 -0
  107. package/server/options/checkAuthSubjectAppPermissions.d.ts +1 -0
  108. package/server/options/checkAuthSubjectAppPermissions.js +4 -0
  109. package/server/options/checkUserOrganizationPermissions.d.ts +1 -0
  110. package/server/options/checkUserOrganizationPermissions.js +4 -0
  111. package/server/options/getAppGroups.d.ts +2 -0
  112. package/server/options/getAppGroups.js +4 -0
  113. package/server/options/getCurrentAppMember.d.ts +3 -0
  114. package/server/options/getCurrentAppMember.js +4 -0
  115. package/server/options/index.d.ts +6 -5
  116. package/server/options/index.js +6 -5
  117. package/server/options/options.js +7 -6
  118. package/templates/apps/empty/app-definition.yaml +2 -2
  119. package/templates/blocks/mini-jsx/package.json +1 -1
  120. package/templates/blocks/preact/package.json +2 -2
  121. package/templates/blocks/vanilla/package.json +1 -1
  122. package/vitest.setup.js +11 -0
  123. package/commands/team/member/update.d.ts +0 -16
  124. package/commands/team/member/update.js +0 -46
  125. package/lib/team.d.ts +0 -61
  126. package/lib/team.js +0 -83
  127. package/lib/team.test.js +0 -625
  128. package/server/controllers/action.d.ts +0 -6
  129. package/server/controllers/action.js +0 -8
  130. package/server/controllers/appMembers.d.ts +0 -2
  131. package/server/controllers/appMembers.js +0 -4
  132. package/server/controllers/appMessages.d.ts +0 -2
  133. package/server/controllers/appMessages.js +0 -4
  134. package/server/controllers/appVariables.js +0 -4
  135. package/server/controllers/assets.d.ts +0 -4
  136. package/server/controllers/assets.js +0 -6
  137. package/server/controllers/oauth2Provider.d.ts +0 -2
  138. package/server/controllers/oauth2Provider.js +0 -4
  139. package/server/controllers/resources.d.ts +0 -7
  140. package/server/controllers/resources.js +0 -9
  141. package/server/controllers/teams.d.ts +0 -2
  142. package/server/controllers/teams.js +0 -4
  143. package/server/options/checkRole.d.ts +0 -1
  144. package/server/options/checkRole.js +0 -2
  145. package/server/options/checkRole.test.d.ts +0 -1
  146. package/server/options/checkRole.test.js +0 -13
  147. package/server/options/getAppMembers.d.ts +0 -3
  148. package/server/options/getAppMembers.js +0 -4
  149. package/server/options/getAppTeams.d.ts +0 -2
  150. package/server/options/getAppTeams.js +0 -4
  151. package/server/options/getAppUserInfo.d.ts +0 -3
  152. package/server/options/getAppUserInfo.js +0 -4
  153. package/server/options/verifyResourceActionPermission.d.ts +0 -1
  154. package/server/options/verifyResourceActionPermission.js +0 -2
  155. /package/lib/{team.test.d.ts → group.test.d.ts} +0 -0
  156. /package/server/controllers/{appVariables.d.ts → common/apps/variables/getAppVariables.d.ts} +0 -0
@@ -1,5 +1,6 @@
1
1
  import { resolveFixture } from '@appsemble/node-utils';
2
- import { createServer, createTestUser, models, setArgv, useTestDatabase } from '@appsemble/server';
2
+ import { createServer, createTestUser, models, setArgv } from '@appsemble/server';
3
+ import { PredefinedOrganizationRole } from '@appsemble/types';
3
4
  import { setTestApp } from 'axios-test-instance';
4
5
  import { afterAll, beforeAll, beforeEach, describe, expect, it, vi } from 'vitest';
5
6
  import { initAxios } from './initAxios.js';
@@ -10,34 +11,102 @@ const argv = { host: 'http://localhost', secret: 'test', aesSecret: 'testSecret'
10
11
  let user;
11
12
  let organization;
12
13
  let testApp;
13
- useTestDatabase(import.meta);
14
- beforeAll(() => {
15
- vi.useFakeTimers();
16
- setArgv(argv);
17
- });
18
- beforeEach(async () => {
19
- vi.clearAllTimers();
20
- vi.setSystemTime(0);
21
- const server = await createServer();
22
- testApp = await setTestApp(server);
23
- initAxios({ remote: testApp.defaults.baseURL });
24
- user = await createTestUser();
25
- organization = await Organization.create({
26
- id: 'testorganization',
27
- name: 'Test Organization',
14
+ describe('resource', () => {
15
+ beforeAll(() => {
16
+ vi.useFakeTimers();
17
+ setArgv(argv);
28
18
  });
29
- await OrganizationMember.create({
30
- OrganizationId: organization.id,
31
- UserId: user.id,
32
- role: 'Owner',
19
+ beforeEach(async () => {
20
+ vi.clearAllTimers();
21
+ vi.setSystemTime(0);
22
+ const server = await createServer();
23
+ testApp = await setTestApp(server);
24
+ initAxios({ remote: testApp.defaults.baseURL });
25
+ user = await createTestUser();
26
+ organization = await Organization.create({
27
+ id: 'testorganization',
28
+ name: 'Test Organization',
29
+ });
30
+ await OrganizationMember.create({
31
+ OrganizationId: organization.id,
32
+ UserId: user.id,
33
+ role: PredefinedOrganizationRole.Owner,
34
+ });
35
+ await Organization.create({ id: 'appsemble', name: 'Appsemble' });
33
36
  });
34
- await Organization.create({ id: 'appsemble', name: 'Appsemble' });
35
- });
36
- afterAll(() => {
37
- vi.useRealTimers();
38
- });
39
- describe('publishResource', () => {
40
- it('should publish resources from a file', async () => {
37
+ afterAll(() => {
38
+ vi.useRealTimers();
39
+ });
40
+ describe('publishResource', () => {
41
+ it('should publish resources from a file', async () => {
42
+ const resourceDefinition = {
43
+ roles: ['$public'],
44
+ schema: {
45
+ type: 'object',
46
+ additionalProperties: false,
47
+ required: ['name'],
48
+ properties: {
49
+ name: {
50
+ type: 'string',
51
+ },
52
+ email: {
53
+ type: 'string',
54
+ format: 'email',
55
+ },
56
+ },
57
+ },
58
+ };
59
+ const app = await App.create({
60
+ path: 'test-app',
61
+ definition: {
62
+ resources: { test: resourceDefinition },
63
+ name: 'Test App',
64
+ defaultPage: 'Test Page',
65
+ },
66
+ vapidPublicKey: 'a',
67
+ vapidPrivateKey: 'b',
68
+ visibility: 'public',
69
+ OrganizationId: organization.id,
70
+ });
71
+ await authorizeCLI('resources:write', testApp);
72
+ await publishResource({
73
+ appId: app.id,
74
+ definition: resourceDefinition,
75
+ path: resolveFixture('resources/test.json'),
76
+ remote: testApp.defaults.baseURL,
77
+ type: 'test',
78
+ seed: false,
79
+ });
80
+ const resources = await Resource.findAll({
81
+ where: { AppId: app.id },
82
+ });
83
+ expect(resources.map((r) => r.toJSON())).toMatchInlineSnapshot(`
84
+ [
85
+ {
86
+ "$created": "1970-01-01T00:00:00.000Z",
87
+ "$updated": "1970-01-01T00:00:00.000Z",
88
+ "email": "test@example.com",
89
+ "id": 1,
90
+ "name": "John Doe",
91
+ },
92
+ {
93
+ "$created": "1970-01-01T00:00:00.000Z",
94
+ "$updated": "1970-01-01T00:00:00.000Z",
95
+ "email": "test2@example.com",
96
+ "id": 2,
97
+ "name": "Jane Doe",
98
+ },
99
+ {
100
+ "$created": "1970-01-01T00:00:00.000Z",
101
+ "$updated": "1970-01-01T00:00:00.000Z",
102
+ "id": 3,
103
+ "name": "test name",
104
+ },
105
+ ]
106
+ `);
107
+ });
108
+ });
109
+ it('should throw if there is an error', async () => {
41
110
  const resourceDefinition = {
42
111
  roles: ['$public'],
43
112
  schema: {
@@ -68,324 +137,257 @@ describe('publishResource', () => {
68
137
  OrganizationId: organization.id,
69
138
  });
70
139
  await authorizeCLI('resources:write', testApp);
71
- await publishResource({
140
+ await app.destroy();
141
+ await expect(() => publishResource({
72
142
  appId: app.id,
73
143
  definition: resourceDefinition,
74
144
  path: resolveFixture('resources/test.json'),
75
145
  remote: testApp.defaults.baseURL,
76
146
  type: 'test',
77
147
  seed: false,
78
- });
79
- const resources = await Resource.findAll({
80
- where: { AppId: app.id },
81
- });
82
- expect(resources.map((r) => r.toJSON())).toMatchInlineSnapshot(`
83
- [
84
- {
85
- "$created": "1970-01-01T00:00:00.000Z",
86
- "$updated": "1970-01-01T00:00:00.000Z",
87
- "email": "test@example.com",
88
- "id": 1,
89
- "name": "John Doe",
90
- },
91
- {
92
- "$created": "1970-01-01T00:00:00.000Z",
93
- "$updated": "1970-01-01T00:00:00.000Z",
94
- "email": "test2@example.com",
95
- "id": 2,
96
- "name": "Jane Doe",
97
- },
98
- {
99
- "$created": "1970-01-01T00:00:00.000Z",
100
- "$updated": "1970-01-01T00:00:00.000Z",
101
- "id": 3,
102
- "name": "test name",
103
- },
104
- ]
105
- `);
148
+ })).rejects.toThrow('Request failed with status code 404');
106
149
  });
107
- });
108
- it('should throw if there is an error', async () => {
109
- const resourceDefinition = {
110
- roles: ['$public'],
111
- schema: {
112
- type: 'object',
113
- additionalProperties: false,
114
- required: ['name'],
115
- properties: {
116
- name: {
117
- type: 'string',
150
+ describe('updateResource', () => {
151
+ it('should update existing resources', async () => {
152
+ const resourceDefinition = {
153
+ roles: ['$public'],
154
+ schema: {
155
+ type: 'object',
156
+ additionalProperties: false,
157
+ required: ['name'],
158
+ properties: {
159
+ name: {
160
+ type: 'string',
161
+ },
162
+ email: {
163
+ type: 'string',
164
+ format: 'email',
165
+ },
166
+ },
118
167
  },
119
- email: {
120
- type: 'string',
121
- format: 'email',
168
+ };
169
+ const app = await App.create({
170
+ path: 'test-app',
171
+ definition: {
172
+ resources: { test: resourceDefinition },
173
+ name: 'Test App',
174
+ defaultPage: 'Test Page',
122
175
  },
123
- },
124
- },
125
- };
126
- const app = await App.create({
127
- path: 'test-app',
128
- definition: {
129
- resources: { test: resourceDefinition },
130
- name: 'Test App',
131
- defaultPage: 'Test Page',
132
- },
133
- vapidPublicKey: 'a',
134
- vapidPrivateKey: 'b',
135
- visibility: 'public',
136
- OrganizationId: organization.id,
137
- });
138
- await authorizeCLI('resources:write', testApp);
139
- await app.destroy();
140
- await expect(() => publishResource({
141
- appId: app.id,
142
- definition: resourceDefinition,
143
- path: resolveFixture('resources/test.json'),
144
- remote: testApp.defaults.baseURL,
145
- type: 'test',
146
- seed: false,
147
- })).rejects.toThrow('Request failed with status code 404');
148
- });
149
- describe('updateResource', () => {
150
- it('should update existing resources', async () => {
151
- const resourceDefinition = {
152
- roles: ['$public'],
153
- schema: {
154
- type: 'object',
155
- additionalProperties: false,
156
- required: ['name'],
157
- properties: {
158
- name: {
159
- type: 'string',
176
+ vapidPublicKey: 'a',
177
+ vapidPrivateKey: 'b',
178
+ visibility: 'public',
179
+ OrganizationId: organization.id,
180
+ });
181
+ await Resource.bulkCreate([
182
+ {
183
+ id: 1,
184
+ type: 'test',
185
+ AppId: app.id,
186
+ data: {
187
+ name: 'Hello World',
160
188
  },
161
- email: {
162
- type: 'string',
163
- format: 'email',
189
+ },
190
+ {
191
+ id: 2,
192
+ type: 'test',
193
+ AppId: app.id,
194
+ data: {
195
+ name: 'World Hello',
196
+ email: 'hello@example.com',
164
197
  },
165
198
  },
166
- },
167
- };
168
- const app = await App.create({
169
- path: 'test-app',
170
- definition: {
171
- resources: { test: resourceDefinition },
172
- name: 'Test App',
173
- defaultPage: 'Test Page',
174
- },
175
- vapidPublicKey: 'a',
176
- vapidPrivateKey: 'b',
177
- visibility: 'public',
178
- OrganizationId: organization.id,
179
- });
180
- await Resource.bulkCreate([
181
- {
182
- id: 1,
183
- type: 'test',
184
- AppId: app.id,
185
- data: {
186
- name: 'Hello World',
199
+ {
200
+ id: 3,
201
+ type: 'test',
202
+ AppId: app.id,
203
+ data: {
204
+ name: 'Random name',
205
+ email: 'removed@example.com',
206
+ },
187
207
  },
188
- },
189
- {
190
- id: 2,
191
- type: 'test',
192
- AppId: app.id,
193
- data: {
194
- name: 'World Hello',
195
- email: 'hello@example.com',
208
+ ]);
209
+ await authorizeCLI('resources:write', testApp);
210
+ await updateResource({
211
+ appId: app.id,
212
+ resourceName: 'test',
213
+ remote: testApp.defaults.baseURL,
214
+ path: resolveFixture('resources/test-update.json'),
215
+ });
216
+ const resources = await Resource.findAll();
217
+ expect(resources.map((r) => r.toJSON())).toMatchInlineSnapshot(`
218
+ [
219
+ {
220
+ "$created": "1970-01-01T00:00:00.000Z",
221
+ "$updated": "1970-01-01T00:00:00.000Z",
222
+ "email": "test@example.com",
223
+ "id": 1,
224
+ "name": "John Doe",
225
+ },
226
+ {
227
+ "$created": "1970-01-01T00:00:00.000Z",
228
+ "$updated": "1970-01-01T00:00:00.000Z",
229
+ "email": "test2@example.com",
230
+ "id": 2,
231
+ "name": "Jane Doe",
232
+ },
233
+ {
234
+ "$created": "1970-01-01T00:00:00.000Z",
235
+ "$updated": "1970-01-01T00:00:00.000Z",
236
+ "id": 3,
237
+ "name": "test name",
238
+ },
239
+ ]
240
+ `);
241
+ });
242
+ it('should throw if the resource to be updated does not exist', async () => {
243
+ const resourceDefinition = {
244
+ roles: ['$public'],
245
+ schema: {
246
+ type: 'object',
247
+ additionalProperties: false,
248
+ required: ['name'],
249
+ properties: {
250
+ name: {
251
+ type: 'string',
252
+ },
253
+ email: {
254
+ type: 'string',
255
+ format: 'email',
256
+ },
257
+ },
196
258
  },
197
- },
198
- {
199
- id: 3,
200
- type: 'test',
201
- AppId: app.id,
202
- data: {
203
- name: 'Random name',
204
- email: 'removed@example.com',
259
+ };
260
+ const app = await App.create({
261
+ path: 'test-app',
262
+ definition: {
263
+ resources: { test: resourceDefinition },
264
+ name: 'Test App',
265
+ defaultPage: 'Test Page',
205
266
  },
206
- },
207
- ]);
208
- await authorizeCLI('resources:write', testApp);
209
- await updateResource({
210
- appId: app.id,
211
- resourceName: 'test',
212
- remote: testApp.defaults.baseURL,
213
- path: resolveFixture('resources/test-update.json'),
214
- });
215
- const resources = await Resource.findAll();
216
- expect(resources.map((r) => r.toJSON())).toMatchInlineSnapshot(`
217
- [
218
- {
219
- "$created": "1970-01-01T00:00:00.000Z",
220
- "$updated": "1970-01-01T00:00:00.000Z",
221
- "email": "test@example.com",
222
- "id": 1,
223
- "name": "John Doe",
224
- },
225
- {
226
- "$created": "1970-01-01T00:00:00.000Z",
227
- "$updated": "1970-01-01T00:00:00.000Z",
228
- "email": "test2@example.com",
229
- "id": 2,
230
- "name": "Jane Doe",
231
- },
232
- {
233
- "$created": "1970-01-01T00:00:00.000Z",
234
- "$updated": "1970-01-01T00:00:00.000Z",
235
- "id": 3,
236
- "name": "test name",
237
- },
238
- ]
239
- `);
240
- });
241
- it('should throw if the resource to be updated does not exist', async () => {
242
- const resourceDefinition = {
243
- roles: ['$public'],
244
- schema: {
245
- type: 'object',
246
- additionalProperties: false,
247
- required: ['name'],
248
- properties: {
249
- name: {
250
- type: 'string',
267
+ vapidPublicKey: 'a',
268
+ vapidPrivateKey: 'b',
269
+ visibility: 'public',
270
+ OrganizationId: organization.id,
271
+ });
272
+ await Resource.bulkCreate([
273
+ {
274
+ id: 1,
275
+ type: 'test',
276
+ AppId: app.id,
277
+ data: {
278
+ name: 'Hello World',
251
279
  },
252
- email: {
253
- type: 'string',
254
- format: 'email',
280
+ },
281
+ {
282
+ id: 2,
283
+ type: 'test',
284
+ AppId: app.id,
285
+ data: {
286
+ name: 'World Hello',
287
+ email: 'hello@example.com',
255
288
  },
256
289
  },
257
- },
258
- };
259
- const app = await App.create({
260
- path: 'test-app',
261
- definition: {
262
- resources: { test: resourceDefinition },
263
- name: 'Test App',
264
- defaultPage: 'Test Page',
265
- },
266
- vapidPublicKey: 'a',
267
- vapidPrivateKey: 'b',
268
- visibility: 'public',
269
- OrganizationId: organization.id,
290
+ ]);
291
+ await authorizeCLI('resources:write', testApp);
292
+ await expect(() => updateResource({
293
+ appId: app.id,
294
+ resourceName: 'test',
295
+ remote: testApp.defaults.baseURL,
296
+ path: resolveFixture('resources/test-update.json'),
297
+ })).rejects.toThrow('Request failed with status code 404');
270
298
  });
271
- await Resource.bulkCreate([
272
- {
273
- id: 1,
274
- type: 'test',
275
- AppId: app.id,
276
- data: {
277
- name: 'Hello World',
299
+ it('should not update if there are no IDs in resource file', async () => {
300
+ const resourceDefinition = {
301
+ roles: ['$public'],
302
+ schema: {
303
+ type: 'object',
304
+ additionalProperties: false,
305
+ required: ['name'],
306
+ properties: {
307
+ name: {
308
+ type: 'string',
309
+ },
310
+ email: {
311
+ type: 'string',
312
+ format: 'email',
313
+ },
314
+ },
278
315
  },
279
- },
280
- {
281
- id: 2,
282
- type: 'test',
283
- AppId: app.id,
284
- data: {
285
- name: 'World Hello',
286
- email: 'hello@example.com',
316
+ };
317
+ const app = await App.create({
318
+ path: 'test-app',
319
+ definition: {
320
+ resources: { test: resourceDefinition },
321
+ name: 'Test App',
322
+ defaultPage: 'Test Page',
287
323
  },
288
- },
289
- ]);
290
- await authorizeCLI('resources:write', testApp);
291
- await expect(() => updateResource({
292
- appId: app.id,
293
- resourceName: 'test',
294
- remote: testApp.defaults.baseURL,
295
- path: resolveFixture('resources/test-update.json'),
296
- })).rejects.toThrow('Request failed with status code 404');
297
- });
298
- it('should not update if there are no IDs in resource file', async () => {
299
- const resourceDefinition = {
300
- roles: ['$public'],
301
- schema: {
302
- type: 'object',
303
- additionalProperties: false,
304
- required: ['name'],
305
- properties: {
306
- name: {
307
- type: 'string',
308
- },
309
- email: {
310
- type: 'string',
311
- format: 'email',
324
+ vapidPublicKey: 'a',
325
+ vapidPrivateKey: 'b',
326
+ visibility: 'public',
327
+ OrganizationId: organization.id,
328
+ });
329
+ await Resource.bulkCreate([
330
+ {
331
+ id: 1,
332
+ type: 'test',
333
+ AppId: app.id,
334
+ data: {
335
+ name: 'Hello World',
312
336
  },
313
337
  },
314
- },
315
- };
316
- const app = await App.create({
317
- path: 'test-app',
318
- definition: {
319
- resources: { test: resourceDefinition },
320
- name: 'Test App',
321
- defaultPage: 'Test Page',
322
- },
323
- vapidPublicKey: 'a',
324
- vapidPrivateKey: 'b',
325
- visibility: 'public',
326
- OrganizationId: organization.id,
327
- });
328
- await Resource.bulkCreate([
329
- {
330
- id: 1,
331
- type: 'test',
332
- AppId: app.id,
333
- data: {
334
- name: 'Hello World',
335
- },
336
- },
337
- {
338
- id: 2,
339
- type: 'test',
340
- AppId: app.id,
341
- data: {
342
- name: 'World Hello',
343
- email: 'hello@example.com',
338
+ {
339
+ id: 2,
340
+ type: 'test',
341
+ AppId: app.id,
342
+ data: {
343
+ name: 'World Hello',
344
+ email: 'hello@example.com',
345
+ },
344
346
  },
345
- },
346
- ]);
347
- await authorizeCLI('resources:write', testApp);
348
- const resources = await Resource.findAll();
349
- expect(resources.map((r) => r.toJSON())).toMatchInlineSnapshot(`
350
- [
351
- {
352
- "$created": "1970-01-01T00:00:00.000Z",
353
- "$updated": "1970-01-01T00:00:00.000Z",
354
- "id": 1,
355
- "name": "Hello World",
356
- },
357
- {
358
- "$created": "1970-01-01T00:00:00.000Z",
359
- "$updated": "1970-01-01T00:00:00.000Z",
360
- "email": "hello@example.com",
361
- "id": 2,
362
- "name": "World Hello",
363
- },
364
- ]
365
- `);
366
- await updateResource({
367
- appId: app.id,
368
- resourceName: 'test',
369
- remote: testApp.defaults.baseURL,
370
- path: resolveFixture('resources/test.json'),
347
+ ]);
348
+ await authorizeCLI('resources:write', testApp);
349
+ const resources = await Resource.findAll();
350
+ expect(resources.map((r) => r.toJSON())).toMatchInlineSnapshot(`
351
+ [
352
+ {
353
+ "$created": "1970-01-01T00:00:00.000Z",
354
+ "$updated": "1970-01-01T00:00:00.000Z",
355
+ "id": 1,
356
+ "name": "Hello World",
357
+ },
358
+ {
359
+ "$created": "1970-01-01T00:00:00.000Z",
360
+ "$updated": "1970-01-01T00:00:00.000Z",
361
+ "email": "hello@example.com",
362
+ "id": 2,
363
+ "name": "World Hello",
364
+ },
365
+ ]
366
+ `);
367
+ await updateResource({
368
+ appId: app.id,
369
+ resourceName: 'test',
370
+ remote: testApp.defaults.baseURL,
371
+ path: resolveFixture('resources/test.json'),
372
+ });
373
+ expect(resources.map((r) => r.toJSON())).toMatchInlineSnapshot(`
374
+ [
375
+ {
376
+ "$created": "1970-01-01T00:00:00.000Z",
377
+ "$updated": "1970-01-01T00:00:00.000Z",
378
+ "id": 1,
379
+ "name": "Hello World",
380
+ },
381
+ {
382
+ "$created": "1970-01-01T00:00:00.000Z",
383
+ "$updated": "1970-01-01T00:00:00.000Z",
384
+ "email": "hello@example.com",
385
+ "id": 2,
386
+ "name": "World Hello",
387
+ },
388
+ ]
389
+ `);
371
390
  });
372
- expect(resources.map((r) => r.toJSON())).toMatchInlineSnapshot(`
373
- [
374
- {
375
- "$created": "1970-01-01T00:00:00.000Z",
376
- "$updated": "1970-01-01T00:00:00.000Z",
377
- "id": 1,
378
- "name": "Hello World",
379
- },
380
- {
381
- "$created": "1970-01-01T00:00:00.000Z",
382
- "$updated": "1970-01-01T00:00:00.000Z",
383
- "email": "hello@example.com",
384
- "id": 2,
385
- "name": "World Hello",
386
- },
387
- ]
388
- `);
389
391
  });
390
392
  });
391
393
  //# sourceMappingURL=resource.test.js.map