@appsemble/cli 0.29.11 → 0.30.1

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 (153) 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 +10 -7
  25. package/lib/asset.js +4 -2
  26. package/lib/asset.test.js +3 -1
  27. package/lib/block.test.js +2 -1
  28. package/lib/createServers.js +3 -1
  29. package/lib/group.d.ts +61 -0
  30. package/lib/group.js +55 -0
  31. package/lib/{team.test.js → group.test.js} +121 -137
  32. package/lib/organization.test.js +5 -4
  33. package/lib/resource.js +3 -1
  34. package/lib/resource.test.js +2 -1
  35. package/lib/serverImport.d.ts +1 -1
  36. package/package.json +6 -6
  37. package/server/argv.d.ts +4 -4
  38. package/server/argv.js +1 -1
  39. package/server/controllers/apps/actions/index.d.ts +5 -0
  40. package/server/controllers/apps/actions/index.js +6 -0
  41. package/server/controllers/apps/actions/proxyDelete.d.ts +2 -0
  42. package/server/controllers/apps/actions/proxyDelete.js +4 -0
  43. package/server/controllers/apps/actions/proxyGet.d.ts +2 -0
  44. package/server/controllers/apps/actions/proxyGet.js +4 -0
  45. package/server/controllers/apps/actions/proxyPatch.d.ts +2 -0
  46. package/server/controllers/apps/actions/proxyPatch.js +4 -0
  47. package/server/controllers/apps/actions/proxyPost.d.ts +2 -0
  48. package/server/controllers/apps/actions/proxyPost.js +4 -0
  49. package/server/controllers/apps/actions/proxyPut.d.ts +2 -0
  50. package/server/controllers/apps/actions/proxyPut.js +4 -0
  51. package/server/controllers/apps/index.d.ts +2 -0
  52. package/server/controllers/apps/index.js +3 -0
  53. package/server/controllers/apps/members/current/getCurrentAppMember.d.ts +2 -0
  54. package/server/controllers/apps/members/current/getCurrentAppMember.js +4 -0
  55. package/server/controllers/apps/members/current/index.d.ts +1 -0
  56. package/server/controllers/apps/members/current/index.js +2 -0
  57. package/server/controllers/apps/members/index.d.ts +1 -0
  58. package/server/controllers/apps/members/index.js +2 -0
  59. package/server/controllers/common/apps/assets/getAppAssetById.d.ts +2 -0
  60. package/server/controllers/common/apps/assets/getAppAssetById.js +4 -0
  61. package/server/controllers/common/apps/assets/index.d.ts +1 -0
  62. package/server/controllers/common/apps/assets/index.js +2 -0
  63. package/server/controllers/common/apps/groups/getAppGroups.d.ts +2 -0
  64. package/server/controllers/common/apps/groups/getAppGroups.js +4 -0
  65. package/server/controllers/common/apps/groups/index.d.ts +1 -0
  66. package/server/controllers/common/apps/groups/index.js +2 -0
  67. package/server/controllers/common/apps/index.d.ts +5 -0
  68. package/server/controllers/common/apps/index.js +6 -0
  69. package/server/controllers/common/apps/messages/getAppMessages.d.ts +2 -0
  70. package/server/controllers/common/apps/messages/getAppMessages.js +4 -0
  71. package/server/controllers/common/apps/messages/index.d.ts +1 -0
  72. package/server/controllers/common/apps/messages/index.js +2 -0
  73. package/server/controllers/common/apps/resources/countAppResources.d.ts +2 -0
  74. package/server/controllers/common/apps/resources/countAppResources.js +4 -0
  75. package/server/controllers/common/apps/resources/createAppResource.d.ts +2 -0
  76. package/server/controllers/common/apps/resources/createAppResource.js +4 -0
  77. package/server/controllers/common/apps/resources/deleteAppResource.d.ts +2 -0
  78. package/server/controllers/common/apps/resources/deleteAppResource.js +4 -0
  79. package/server/controllers/common/apps/resources/getAppResourceById.d.ts +2 -0
  80. package/server/controllers/common/apps/resources/getAppResourceById.js +4 -0
  81. package/server/controllers/common/apps/resources/index.d.ts +6 -0
  82. package/server/controllers/common/apps/resources/index.js +7 -0
  83. package/server/controllers/common/apps/resources/queryAppResources.d.ts +2 -0
  84. package/server/controllers/common/apps/resources/queryAppResources.js +4 -0
  85. package/server/controllers/common/apps/resources/updateAppResource.d.ts +2 -0
  86. package/server/controllers/common/apps/resources/updateAppResource.js +4 -0
  87. package/server/controllers/common/apps/variables/getAppVariables.js +4 -0
  88. package/server/controllers/common/apps/variables/index.d.ts +1 -0
  89. package/server/controllers/common/apps/variables/index.js +2 -0
  90. package/server/controllers/common/index.d.ts +1 -0
  91. package/server/controllers/common/index.js +2 -0
  92. package/server/controllers/index.d.ts +3 -8
  93. package/server/controllers/index.js +3 -8
  94. package/server/controllers/main/apps/assets/createAppAsset.d.ts +2 -0
  95. package/server/controllers/main/apps/assets/createAppAsset.js +4 -0
  96. package/server/controllers/main/apps/assets/index.d.ts +1 -0
  97. package/server/controllers/main/apps/assets/index.js +2 -0
  98. package/server/controllers/main/apps/index.d.ts +1 -0
  99. package/server/controllers/main/apps/index.js +2 -0
  100. package/server/controllers/main/index.d.ts +1 -0
  101. package/server/controllers/main/index.js +2 -0
  102. package/server/options/checkAppMemberAppPermissions.d.ts +1 -0
  103. package/server/options/checkAppMemberAppPermissions.js +4 -0
  104. package/server/options/checkAppPermissions.d.ts +1 -0
  105. package/server/options/checkAppPermissions.js +4 -0
  106. package/server/options/checkAuthSubjectAppPermissions.d.ts +1 -0
  107. package/server/options/checkAuthSubjectAppPermissions.js +4 -0
  108. package/server/options/checkUserOrganizationPermissions.d.ts +1 -0
  109. package/server/options/checkUserOrganizationPermissions.js +4 -0
  110. package/server/options/getAppGroups.d.ts +2 -0
  111. package/server/options/getAppGroups.js +4 -0
  112. package/server/options/getCurrentAppMember.d.ts +3 -0
  113. package/server/options/getCurrentAppMember.js +4 -0
  114. package/server/options/index.d.ts +6 -5
  115. package/server/options/index.js +6 -5
  116. package/server/options/options.js +7 -6
  117. package/templates/apps/empty/app-definition.yaml +2 -2
  118. package/templates/blocks/mini-jsx/package.json +1 -1
  119. package/templates/blocks/preact/package.json +2 -2
  120. package/templates/blocks/vanilla/package.json +1 -1
  121. package/commands/team/member/update.d.ts +0 -16
  122. package/commands/team/member/update.js +0 -46
  123. package/lib/team.d.ts +0 -61
  124. package/lib/team.js +0 -83
  125. package/server/controllers/action.d.ts +0 -6
  126. package/server/controllers/action.js +0 -8
  127. package/server/controllers/appMembers.d.ts +0 -2
  128. package/server/controllers/appMembers.js +0 -4
  129. package/server/controllers/appMessages.d.ts +0 -2
  130. package/server/controllers/appMessages.js +0 -4
  131. package/server/controllers/appVariables.js +0 -4
  132. package/server/controllers/assets.d.ts +0 -4
  133. package/server/controllers/assets.js +0 -6
  134. package/server/controllers/oauth2Provider.d.ts +0 -2
  135. package/server/controllers/oauth2Provider.js +0 -4
  136. package/server/controllers/resources.d.ts +0 -7
  137. package/server/controllers/resources.js +0 -9
  138. package/server/controllers/teams.d.ts +0 -2
  139. package/server/controllers/teams.js +0 -4
  140. package/server/options/checkRole.d.ts +0 -1
  141. package/server/options/checkRole.js +0 -2
  142. package/server/options/checkRole.test.d.ts +0 -1
  143. package/server/options/checkRole.test.js +0 -13
  144. package/server/options/getAppMembers.d.ts +0 -3
  145. package/server/options/getAppMembers.js +0 -4
  146. package/server/options/getAppTeams.d.ts +0 -2
  147. package/server/options/getAppTeams.js +0 -4
  148. package/server/options/getAppUserInfo.d.ts +0 -3
  149. package/server/options/getAppUserInfo.js +0 -4
  150. package/server/options/verifyResourceActionPermission.d.ts +0 -1
  151. package/server/options/verifyResourceActionPermission.js +0 -2
  152. /package/lib/{team.test.d.ts → group.test.d.ts} +0 -0
  153. /package/server/controllers/{appVariables.d.ts → common/apps/variables/getAppVariables.d.ts} +0 -0
@@ -1,11 +1,11 @@
1
- import { createServer, createTestUser, models, setArgv, useTestDatabase } from '@appsemble/server';
2
- import { TeamRole } from '@appsemble/utils';
1
+ import { createServer, createTestAppMember, createTestUser, models, setArgv, useTestDatabase, } from '@appsemble/server';
2
+ import { PredefinedOrganizationRole } from '@appsemble/types';
3
3
  import { setTestApp } from 'axios-test-instance';
4
4
  import { afterAll, beforeAll, beforeEach, describe, expect, it, vi } from 'vitest';
5
+ import { createGroup, deleteGroup, deleteMember, inviteMember, resolveAnnotations, updateGroup, updateMember, } from './group.js';
5
6
  import { initAxios } from './initAxios.js';
6
- import { createTeam, deleteMember, deleteTeam, inviteMember, resolveAnnotations, updateMember, updateTeam, } from './team.js';
7
7
  import { authorizeCLI } from './testUtils.js';
8
- const { App, AppMember, BlockVersion, Organization, OrganizationMember, Team, TeamMember } = models;
8
+ const { App, AppMember, BlockVersion, Group, GroupInvite, GroupMember, Organization, OrganizationMember, } = models;
9
9
  const argv = { host: 'http://localhost', secret: 'test', aesSecret: 'testSecret' };
10
10
  let user;
11
11
  let organization;
@@ -29,7 +29,7 @@ beforeEach(async () => {
29
29
  await OrganizationMember.create({
30
30
  OrganizationId: organization.id,
31
31
  UserId: user.id,
32
- role: 'Owner',
32
+ role: PredefinedOrganizationRole.Owner,
33
33
  });
34
34
  await Organization.create({ id: 'appsemble', name: 'Appsemble' });
35
35
  await BlockVersion.create({
@@ -49,14 +49,14 @@ beforeEach(async () => {
49
49
  afterAll(() => {
50
50
  vi.useRealTimers();
51
51
  });
52
- describe('createTeam', () => {
53
- it('should create a new team', async () => {
52
+ describe('createGroup', () => {
53
+ it('should create a new group', async () => {
54
54
  const app = await App.create({
55
55
  definition: {
56
56
  name: 'Test App',
57
57
  defaultPage: 'Test Page',
58
58
  security: {
59
- teams: {
59
+ groups: {
60
60
  join: 'anyone',
61
61
  invite: [],
62
62
  },
@@ -74,19 +74,20 @@ describe('createTeam', () => {
74
74
  vapidPrivateKey: 'b',
75
75
  OrganizationId: organization.id,
76
76
  });
77
- const clientCredentials = await authorizeCLI('teams:write', testApp);
78
- await createTeam({
77
+ const clientCredentials = await authorizeCLI('groups:write', testApp);
78
+ await createGroup({
79
79
  appId: app.id,
80
80
  name: 'test',
81
81
  remote: testApp.defaults.baseURL,
82
82
  clientCredentials,
83
83
  });
84
- const team = await Team.findOne();
85
- expect(team).toMatchInlineSnapshot(`
84
+ const group = await Group.findOne();
85
+ expect(group).toMatchInlineSnapshot(`
86
86
  {
87
87
  "AppId": 1,
88
88
  "annotations": null,
89
89
  "created": 1970-01-01T00:00:00.000Z,
90
+ "demo": false,
90
91
  "id": 1,
91
92
  "name": "test",
92
93
  "updated": 1970-01-01T00:00:00.000Z,
@@ -94,8 +95,8 @@ describe('createTeam', () => {
94
95
  `);
95
96
  });
96
97
  it('should throw if app does not exist', async () => {
97
- const clientCredentials = await authorizeCLI('teams:write', testApp);
98
- await expect(() => createTeam({
98
+ const clientCredentials = await authorizeCLI('groups:write', testApp);
99
+ await expect(() => createGroup({
99
100
  appId: 1,
100
101
  name: 'test',
101
102
  remote: testApp.defaults.baseURL,
@@ -103,14 +104,14 @@ describe('createTeam', () => {
103
104
  })).rejects.toThrow('Request failed with status code 404');
104
105
  });
105
106
  });
106
- describe('deleteTeam', () => {
107
- it('should delete a team', async () => {
107
+ describe('deleteGroup', () => {
108
+ it('should delete a group', async () => {
108
109
  const app = await App.create({
109
110
  definition: {
110
111
  name: 'Test App',
111
112
  defaultPage: 'Test Page',
112
113
  security: {
113
- teams: {
114
+ groups: {
114
115
  join: 'anyone',
115
116
  invite: [],
116
117
  },
@@ -128,37 +129,38 @@ describe('deleteTeam', () => {
128
129
  vapidPrivateKey: 'b',
129
130
  OrganizationId: organization.id,
130
131
  });
131
- const team = await Team.create({
132
+ const group = await Group.create({
132
133
  AppId: app.id,
133
134
  name: 'test',
134
135
  });
135
- const clientCredentials = await authorizeCLI('teams:write', testApp);
136
- await deleteTeam({
136
+ const clientCredentials = await authorizeCLI('groups:write', testApp);
137
+ await deleteGroup({
137
138
  appId: app.id,
138
- id: team.id,
139
+ id: group.id,
139
140
  remote: testApp.defaults.baseURL,
140
141
  clientCredentials,
141
142
  });
142
- expect(team).toMatchInlineSnapshot(`
143
+ expect(group).toMatchInlineSnapshot(`
143
144
  {
144
145
  "AppId": 1,
145
146
  "annotations": null,
146
147
  "created": 1970-01-01T00:00:00.000Z,
148
+ "demo": false,
147
149
  "id": 1,
148
150
  "name": "test",
149
151
  "updated": 1970-01-01T00:00:00.000Z,
150
152
  }
151
153
  `);
152
- const foundTeam = await Team.findOne();
153
- expect(foundTeam).toBeNull();
154
+ const foundGroup = await Group.findOne();
155
+ expect(foundGroup).toBeNull();
154
156
  });
155
- it('should throw an error if the team does not exist', async () => {
157
+ it('should throw an error if the group does not exist', async () => {
156
158
  const app = await App.create({
157
159
  definition: {
158
160
  name: 'Test App',
159
161
  defaultPage: 'Test Page',
160
162
  security: {
161
- teams: {
163
+ groups: {
162
164
  join: 'anyone',
163
165
  invite: [],
164
166
  },
@@ -176,18 +178,18 @@ describe('deleteTeam', () => {
176
178
  vapidPrivateKey: 'b',
177
179
  OrganizationId: organization.id,
178
180
  });
179
- const clientCredentials = await authorizeCLI('teams:write', testApp);
180
- await expect(() => deleteTeam({ appId: app.id, id: 1, remote: testApp.defaults.baseURL, clientCredentials })).rejects.toThrow('Request failed with status code 404');
181
+ const clientCredentials = await authorizeCLI('groups:write', testApp);
182
+ await expect(() => deleteGroup({ appId: app.id, id: 1, remote: testApp.defaults.baseURL, clientCredentials })).rejects.toThrow('Request failed with status code 404');
181
183
  });
182
184
  });
183
- describe('updateTeam', () => {
184
- it('should update a team', async () => {
185
+ describe('updateGroup', () => {
186
+ it('should update a group', async () => {
185
187
  const app = await App.create({
186
188
  definition: {
187
189
  name: 'Test App',
188
190
  defaultPage: 'Test Page',
189
191
  security: {
190
- teams: {
192
+ groups: {
191
193
  join: 'anyone',
192
194
  invite: [],
193
195
  },
@@ -205,36 +207,37 @@ describe('updateTeam', () => {
205
207
  vapidPrivateKey: 'b',
206
208
  OrganizationId: organization.id,
207
209
  });
208
- const team = await Team.create({
210
+ const group = await Group.create({
209
211
  AppId: app.id,
210
212
  name: 'test',
211
213
  });
212
- await authorizeCLI('teams:write', testApp);
213
- await updateTeam({
214
+ await authorizeCLI('groups:write', testApp);
215
+ await updateGroup({
214
216
  appId: app.id,
215
- id: team.id,
217
+ id: group.id,
216
218
  remote: testApp.defaults.baseURL,
217
219
  name: 'test2',
218
220
  });
219
- await team.reload();
220
- expect(team).toMatchInlineSnapshot(`
221
+ await group.reload();
222
+ expect(group).toMatchInlineSnapshot(`
221
223
  {
222
224
  "AppId": 1,
223
225
  "annotations": null,
224
226
  "created": 1970-01-01T00:00:00.000Z,
227
+ "demo": false,
225
228
  "id": 1,
226
229
  "name": "test2",
227
230
  "updated": 1970-01-01T00:00:00.000Z,
228
231
  }
229
232
  `);
230
233
  });
231
- it('should throw an error if the team does not exist', async () => {
234
+ it('should throw an error if the group does not exist', async () => {
232
235
  const app = await App.create({
233
236
  definition: {
234
237
  name: 'Test App',
235
238
  defaultPage: 'Test Page',
236
239
  security: {
237
- teams: {
240
+ groups: {
238
241
  join: 'anyone',
239
242
  invite: [],
240
243
  },
@@ -252,15 +255,15 @@ describe('updateTeam', () => {
252
255
  vapidPrivateKey: 'b',
253
256
  OrganizationId: organization.id,
254
257
  });
255
- const team = await Team.create({
258
+ const group = await Group.create({
256
259
  AppId: app.id,
257
260
  name: 'test',
258
261
  });
259
- await team.destroy();
260
- const clientCredentials = await authorizeCLI('teams:write', testApp);
261
- await expect(() => updateTeam({
262
+ await group.destroy();
263
+ const clientCredentials = await authorizeCLI('groups:write', testApp);
264
+ await expect(() => updateGroup({
262
265
  appId: app.id,
263
- id: team.id,
266
+ id: group.id,
264
267
  remote: testApp.defaults.baseURL,
265
268
  name: 'test2',
266
269
  clientCredentials,
@@ -272,7 +275,7 @@ describe('updateTeam', () => {
272
275
  name: 'Test App',
273
276
  defaultPage: 'Test Page',
274
277
  security: {
275
- teams: {
278
+ groups: {
276
279
  join: 'anyone',
277
280
  invite: [],
278
281
  },
@@ -290,26 +293,26 @@ describe('updateTeam', () => {
290
293
  vapidPrivateKey: 'b',
291
294
  OrganizationId: organization.id,
292
295
  });
293
- const team = await Team.create({
296
+ const group = await Group.create({
294
297
  AppId: app.id,
295
298
  name: 'test',
296
299
  });
297
- await expect(() => updateTeam({
300
+ await expect(() => updateGroup({
298
301
  appId: app.id,
299
- id: team.id,
302
+ id: group.id,
300
303
  remote: testApp.defaults.baseURL,
301
304
  name: 'test2',
302
305
  })).rejects.toThrow('Request failed with status code 401');
303
306
  });
304
307
  });
305
308
  describe('inviteMember', () => {
306
- it('should invite a member to a team', async () => {
309
+ it('should invite a member to a group', async () => {
307
310
  const app = await App.create({
308
311
  definition: {
309
312
  name: 'Test App',
310
313
  defaultPage: 'Test Page',
311
314
  security: {
312
- teams: {
315
+ groups: {
313
316
  join: 'anyone',
314
317
  invite: [],
315
318
  },
@@ -327,7 +330,7 @@ describe('inviteMember', () => {
327
330
  vapidPrivateKey: 'b',
328
331
  OrganizationId: organization.id,
329
332
  });
330
- const team = await Team.create({
333
+ const group = await Group.create({
331
334
  AppId: app.id,
332
335
  name: 'test',
333
336
  });
@@ -338,33 +341,34 @@ describe('inviteMember', () => {
338
341
  role: 'Manager',
339
342
  name: user.name,
340
343
  });
341
- await authorizeCLI('teams:write', testApp);
344
+ await authorizeCLI('groups:write', testApp);
342
345
  await inviteMember({
343
346
  appId: app.id,
344
- id: team.id,
347
+ id: group.id,
345
348
  remote: testApp.defaults.baseURL,
346
- user: user.id,
349
+ user: user.primaryEmail,
347
350
  });
348
- const member = await TeamMember.findOne();
349
- expect(member.dataValues).toMatchInlineSnapshot({
350
- AppMemberId: expect.any(String),
351
+ const invite = await GroupInvite.findOne();
352
+ expect(invite.dataValues).toMatchInlineSnapshot({
353
+ key: expect.any(String),
351
354
  }, `
352
355
  {
353
- "AppMemberId": Any<String>,
354
- "TeamId": 1,
356
+ "GroupId": 1,
355
357
  "created": 1970-01-01T00:00:00.000Z,
356
- "role": "member",
358
+ "email": "test@example.com",
359
+ "key": Any<String>,
360
+ "role": "Member",
357
361
  "updated": 1970-01-01T00:00:00.000Z,
358
362
  }
359
363
  `);
360
364
  });
361
- it('should throw an error if the user is not AppMember', async () => {
365
+ it('should throw an error if the group does not exist', async () => {
362
366
  const app = await App.create({
363
367
  definition: {
364
368
  name: 'Test App',
365
369
  defaultPage: 'Test Page',
366
370
  security: {
367
- teams: {
371
+ groups: {
368
372
  join: 'anyone',
369
373
  invite: [],
370
374
  },
@@ -382,54 +386,23 @@ describe('inviteMember', () => {
382
386
  vapidPrivateKey: 'b',
383
387
  OrganizationId: organization.id,
384
388
  });
385
- const team = await Team.create({
386
- AppId: app.id,
387
- name: 'test',
388
- });
389
- await authorizeCLI('teams:write', testApp);
390
- await expect(() => inviteMember({ appId: app.id, id: team.id, remote: testApp.defaults.baseURL, user: user.id })).rejects.toThrow('Request failed with status code 404');
391
- });
392
- it('should throw an error if the team does not exist', async () => {
393
- const app = await App.create({
394
- definition: {
395
- name: 'Test App',
396
- defaultPage: 'Test Page',
397
- security: {
398
- teams: {
399
- join: 'anyone',
400
- invite: [],
401
- },
402
- default: {
403
- role: 'Reader',
404
- policy: 'everyone',
405
- },
406
- roles: {
407
- Reader: {},
408
- },
409
- },
410
- },
411
- path: 'test-app',
412
- vapidPublicKey: 'a',
413
- vapidPrivateKey: 'b',
414
- OrganizationId: organization.id,
415
- });
416
- const team = await Team.create({
417
- AppId: app.id,
418
- name: 'test',
419
- });
420
- await team.destroy();
421
- await authorizeCLI('teams:write', testApp);
422
- await expect(() => inviteMember({ appId: app.id, id: team.id, remote: testApp.defaults.baseURL, user: user.id })).rejects.toThrow('Request failed with status code 404');
389
+ await authorizeCLI('groups:write', testApp);
390
+ await expect(() => inviteMember({
391
+ appId: app.id,
392
+ id: 10,
393
+ remote: testApp.defaults.baseURL,
394
+ user: user.primaryEmail,
395
+ })).rejects.toThrow('Request failed with status code 400');
423
396
  });
424
397
  });
425
398
  describe('updateMember', () => {
426
- it('should update role of a team member', async () => {
399
+ it('should update role of a group member', async () => {
427
400
  const app = await App.create({
428
401
  definition: {
429
402
  name: 'Test App',
430
403
  defaultPage: 'Test Page',
431
404
  security: {
432
- teams: {
405
+ groups: {
433
406
  join: 'anyone',
434
407
  invite: [],
435
408
  },
@@ -447,7 +420,7 @@ describe('updateMember', () => {
447
420
  vapidPrivateKey: 'b',
448
421
  OrganizationId: organization.id,
449
422
  });
450
- const team = await Team.create({
423
+ const group = await Group.create({
451
424
  AppId: app.id,
452
425
  name: 'test',
453
426
  });
@@ -458,29 +431,29 @@ describe('updateMember', () => {
458
431
  role: 'Manager',
459
432
  name: user.name,
460
433
  });
461
- const teamMember = await TeamMember.create({
462
- TeamId: team.id,
434
+ const groupMember = await GroupMember.create({
435
+ GroupId: group.id,
463
436
  AppMemberId: member.id,
464
437
  });
465
- await authorizeCLI('teams:write', testApp);
438
+ await authorizeCLI('groups:write', testApp);
466
439
  await updateMember({
467
440
  appId: app.id,
468
441
  remote: testApp.defaults.baseURL,
469
- user: user.id,
470
- role: TeamRole.Manager,
471
- id: team.id,
442
+ user: groupMember.id,
443
+ role: 'GroupMembersManager',
444
+ id: group.id,
472
445
  });
473
- expect(teamMember.role).toBe('member');
474
- await teamMember.reload();
475
- expect(teamMember.role).toBe('manager');
446
+ expect(groupMember.role).toBe('Member');
447
+ await groupMember.reload();
448
+ expect(groupMember.role).toBe('GroupMembersManager');
476
449
  });
477
- it('should throw an error if the user is not a TeamMember', async () => {
450
+ it('should throw an error if the user is not a GroupMember', async () => {
478
451
  const app = await App.create({
479
452
  definition: {
480
453
  name: 'Test App',
481
454
  defaultPage: 'Test Page',
482
455
  security: {
483
- teams: {
456
+ groups: {
484
457
  join: 'anyone',
485
458
  invite: [],
486
459
  },
@@ -498,7 +471,7 @@ describe('updateMember', () => {
498
471
  vapidPrivateKey: 'b',
499
472
  OrganizationId: organization.id,
500
473
  });
501
- const team = await Team.create({
474
+ const group = await Group.create({
502
475
  AppId: app.id,
503
476
  name: 'test',
504
477
  });
@@ -509,24 +482,24 @@ describe('updateMember', () => {
509
482
  role: 'Manager',
510
483
  name: user.name,
511
484
  });
512
- await authorizeCLI('teams:write', testApp);
485
+ await authorizeCLI('groups:write', testApp);
513
486
  await expect(() => updateMember({
514
487
  appId: app.id,
515
488
  remote: testApp.defaults.baseURL,
516
489
  user: user.id,
517
- role: TeamRole.Manager,
518
- id: team.id,
519
- })).rejects.toThrow('Request failed with status code 400');
490
+ role: 'GroupMembersManager',
491
+ id: group.id,
492
+ })).rejects.toThrow('Request failed with status code 404');
520
493
  });
521
494
  });
522
495
  describe('deleteMember', () => {
523
- it('should delete a team member', async () => {
496
+ it('should delete a group member', async () => {
524
497
  const app = await App.create({
525
498
  definition: {
526
499
  name: 'Test App',
527
500
  defaultPage: 'Test Page',
528
501
  security: {
529
- teams: {
502
+ groups: {
530
503
  join: 'anyone',
531
504
  invite: [],
532
505
  },
@@ -544,7 +517,7 @@ describe('deleteMember', () => {
544
517
  vapidPrivateKey: 'b',
545
518
  OrganizationId: organization.id,
546
519
  });
547
- const team = await Team.create({
520
+ const group = await Group.create({
548
521
  AppId: app.id,
549
522
  name: 'test',
550
523
  });
@@ -552,30 +525,36 @@ describe('deleteMember', () => {
552
525
  email: user.primaryEmail,
553
526
  AppId: app.id,
554
527
  UserId: user.id,
555
- role: 'Manager',
528
+ role: 'Maintainer',
556
529
  name: user.name,
557
530
  });
558
- await TeamMember.create({
559
- TeamId: team.id,
531
+ await authorizeCLI('groups:write', testApp);
532
+ await createTestUser('test2@example.com');
533
+ const member2 = await createTestAppMember(app.id, 'test2@example.com');
534
+ await GroupMember.create({
535
+ GroupId: group.id,
560
536
  AppMemberId: member.id,
561
537
  });
562
- await authorizeCLI('teams:write', testApp);
538
+ const { id: groupMemberId } = await GroupMember.create({
539
+ GroupId: group.id,
540
+ AppMemberId: member2.id,
541
+ });
563
542
  await deleteMember({
564
- id: team.id,
543
+ id: group.id,
565
544
  appId: app.id,
566
- user: user.id,
545
+ user: groupMemberId,
567
546
  remote: testApp.defaults.baseURL,
568
547
  });
569
- const foundTeamMember = await TeamMember.findOne();
570
- expect(foundTeamMember).toBeNull();
548
+ const foundGroupMember = await GroupMember.findByPk(groupMemberId);
549
+ expect(foundGroupMember).toBeNull();
571
550
  });
572
- it('should throw an error if the TeamMember does not exist', async () => {
551
+ it('should throw an error if the GroupMember does not exist', async () => {
573
552
  const app = await App.create({
574
553
  definition: {
575
554
  name: 'Test App',
576
555
  defaultPage: 'Test Page',
577
556
  security: {
578
- teams: {
557
+ groups: {
579
558
  join: 'anyone',
580
559
  invite: [],
581
560
  },
@@ -593,7 +572,7 @@ describe('deleteMember', () => {
593
572
  vapidPrivateKey: 'b',
594
573
  OrganizationId: organization.id,
595
574
  });
596
- const team = await Team.create({
575
+ const group = await Group.create({
597
576
  AppId: app.id,
598
577
  name: 'test',
599
578
  });
@@ -604,12 +583,17 @@ describe('deleteMember', () => {
604
583
  role: 'Manager',
605
584
  name: user.name,
606
585
  });
607
- await authorizeCLI('teams:write', testApp);
608
- await expect(() => deleteMember({ appId: app.id, remote: testApp.defaults.baseURL, user: user.id, id: team.id })).rejects.toThrow('Request failed with status code 400');
586
+ await authorizeCLI('groups:write', testApp);
587
+ await expect(() => deleteMember({
588
+ appId: app.id,
589
+ remote: testApp.defaults.baseURL,
590
+ user: user.id,
591
+ id: group.id,
592
+ })).rejects.toThrow('Request failed with status code 404');
609
593
  });
610
594
  });
611
595
  describe('resolveAnnotations', () => {
612
- it('should resolve team annotations', () => {
596
+ it('should resolve group annotations', () => {
613
597
  const unresolvedAnnotations = ['foo=bar', 'hello=world'];
614
598
  const annotations = resolveAnnotations(unresolvedAnnotations);
615
599
  expect(annotations).toMatchObject({
@@ -622,4 +606,4 @@ describe('resolveAnnotations', () => {
622
606
  expect(() => resolveAnnotations(unresolvedAnnotations)).toThrow('One of the annotations did not follow the pattern of key=value');
623
607
  });
624
608
  });
625
- //# sourceMappingURL=team.test.js.map
609
+ //# sourceMappingURL=group.test.js.map
@@ -1,5 +1,6 @@
1
1
  import { createFixtureStream, readFixture } from '@appsemble/node-utils';
2
2
  import { createServer, createTestUser, models, setArgv, useTestDatabase } 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';
@@ -73,7 +74,7 @@ describe('updateOrganization', () => {
73
74
  await OrganizationMember.create({
74
75
  OrganizationId: organization.id,
75
76
  UserId: user.id,
76
- role: 'Owner',
77
+ role: PredefinedOrganizationRole.Owner,
77
78
  });
78
79
  await authorizeCLI('organizations:write', testApp);
79
80
  await updateOrganization({
@@ -109,7 +110,7 @@ describe('updateOrganization', () => {
109
110
  await OrganizationMember.create({
110
111
  OrganizationId: organization.id,
111
112
  UserId: user.id,
112
- role: 'Owner',
113
+ role: PredefinedOrganizationRole.Owner,
113
114
  });
114
115
  await organization.destroy();
115
116
  await authorizeCLI('organizations:write', testApp);
@@ -130,7 +131,7 @@ describe('updateOrganization', () => {
130
131
  await OrganizationMember.create({
131
132
  OrganizationId: organization.id,
132
133
  UserId: user.id,
133
- role: 'Owner',
134
+ role: PredefinedOrganizationRole.Owner,
134
135
  });
135
136
  await expect(() => updateOrganization({
136
137
  id: organization.id,
@@ -171,7 +172,7 @@ describe('upsertOrganization', () => {
171
172
  await OrganizationMember.create({
172
173
  OrganizationId: organization.id,
173
174
  UserId: user.id,
174
- role: 'Owner',
175
+ role: PredefinedOrganizationRole.Owner,
175
176
  });
176
177
  await authorizeCLI('organizations:write', testApp);
177
178
  await upsertOrganization({
package/lib/resource.js CHANGED
@@ -16,12 +16,13 @@ export async function publishResource({ appId, definition, path, publishedResour
16
16
  }
17
17
  logger.info(`Publishing resource(s) from ${path}`);
18
18
  let data;
19
- const endpoint = `/api/apps/${appId}/${seed ? 'seed-' : ''}resources/${type}`;
19
+ const endpoint = `/api/apps/${appId}/resources/${type}`;
20
20
  try {
21
21
  if (csv) {
22
22
  const response = await axios.post(endpoint, resources, {
23
23
  baseURL: remote,
24
24
  headers: { 'content-type': 'text/csv' },
25
+ params: { seed },
25
26
  });
26
27
  data = response.data;
27
28
  }
@@ -37,6 +38,7 @@ export async function publishResource({ appId, definition, path, publishedResour
37
38
  }), {
38
39
  baseURL: remote,
39
40
  headers: { 'content-type': 'application/json' },
41
+ params: { seed },
40
42
  });
41
43
  data = response.data;
42
44
  }
@@ -1,5 +1,6 @@
1
1
  import { resolveFixture } from '@appsemble/node-utils';
2
2
  import { createServer, createTestUser, models, setArgv, useTestDatabase } 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';
@@ -29,7 +30,7 @@ beforeEach(async () => {
29
30
  await OrganizationMember.create({
30
31
  OrganizationId: organization.id,
31
32
  UserId: user.id,
32
- role: 'Owner',
33
+ role: PredefinedOrganizationRole.Owner,
33
34
  });
34
35
  await Organization.create({ id: 'appsemble', name: 'Appsemble' });
35
36
  });
@@ -4,4 +4,4 @@
4
4
  * @param members The names of the exported member to import.
5
5
  * @returns The exported member.
6
6
  */
7
- export declare function serverImport<T extends 'checkDownMigrations' | 'checkMigrations' | 'cleanupDemoUsers' | 'cleanupResourcesAndAssets' | 'fuzzMigrations' | 'migrate' | 'runCronJobs' | 'scaleContainers' | 'setArgv' | 'start'>(...members: T[]): Promise<Record<T, any>>;
7
+ export declare function serverImport<T extends 'checkDownMigrations' | 'checkMigrations' | 'cleanupDemoUsers' | 'cleanupResourcesAndAssets' | 'fuzzMigrations' | 'migrate' | 'migrateAppDefinitions' | 'runCronJobs' | 'scaleContainers' | 'setArgv' | 'start'>(...members: T[]): Promise<Record<T, any>>;