@stamhoofd/backend 2.39.0 → 2.40.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.
Files changed (198) hide show
  1. package/eslint.config.mjs +5 -0
  2. package/index.ts +81 -74
  3. package/jest.config.cjs +10 -0
  4. package/migrations.ts +16 -14
  5. package/package.json +11 -11
  6. package/src/crons/clear-excel-cache.test.ts +48 -50
  7. package/src/crons/clear-excel-cache.ts +18 -18
  8. package/src/crons/setup-steps.ts +2 -2
  9. package/src/crons.ts +325 -306
  10. package/src/decoders/StringArrayDecoder.ts +7 -7
  11. package/src/decoders/StringNullableDecoder.ts +1 -2
  12. package/src/email-recipient-loaders/members.ts +22 -22
  13. package/src/endpoints/admin/memberships/ChargeMembershipsEndpoint.ts +8 -9
  14. package/src/endpoints/admin/memberships/GetChargeMembershipsSummaryEndpoint.ts +39 -40
  15. package/src/endpoints/admin/organizations/GetOrganizationsCountEndpoint.ts +8 -8
  16. package/src/endpoints/admin/organizations/GetOrganizationsEndpoint.ts +44 -45
  17. package/src/endpoints/admin/organizations/PatchOrganizationsEndpoint.ts +58 -57
  18. package/src/endpoints/auth/CreateAdminEndpoint.ts +48 -45
  19. package/src/endpoints/auth/CreateTokenEndpoint.test.ts +31 -31
  20. package/src/endpoints/auth/CreateTokenEndpoint.ts +146 -147
  21. package/src/endpoints/auth/DeleteTokenEndpoint.ts +7 -7
  22. package/src/endpoints/auth/DeleteUserEndpoint.ts +15 -15
  23. package/src/endpoints/auth/ForgotPasswordEndpoint.ts +17 -18
  24. package/src/endpoints/auth/GetOtherUserEndpoint.ts +9 -10
  25. package/src/endpoints/auth/GetUserEndpoint.test.ts +32 -35
  26. package/src/endpoints/auth/GetUserEndpoint.ts +5 -6
  27. package/src/endpoints/auth/PatchApiUserEndpoint.ts +35 -33
  28. package/src/endpoints/auth/PatchUserEndpoint.ts +55 -52
  29. package/src/endpoints/auth/PollEmailVerificationEndpoint.ts +9 -9
  30. package/src/endpoints/auth/RetryEmailVerificationEndpoint.ts +8 -8
  31. package/src/endpoints/auth/SignupEndpoint.ts +37 -36
  32. package/src/endpoints/auth/VerifyEmailEndpoint.ts +29 -28
  33. package/src/endpoints/global/addresses/SearchRegionsEndpoint.ts +33 -33
  34. package/src/endpoints/global/addresses/ValidateAddressEndpoint.ts +7 -7
  35. package/src/endpoints/global/caddy/CheckDomainCertEndpoint.ts +37 -37
  36. package/src/endpoints/global/email/CreateEmailEndpoint.ts +30 -30
  37. package/src/endpoints/global/email/GetEmailAddressEndpoint.ts +13 -13
  38. package/src/endpoints/global/email/GetEmailEndpoint.ts +13 -13
  39. package/src/endpoints/global/email/ManageEmailAddressEndpoint.ts +16 -16
  40. package/src/endpoints/global/email/PatchEmailEndpoint.ts +25 -25
  41. package/src/endpoints/global/events/GetEventsEndpoint.ts +43 -44
  42. package/src/endpoints/global/events/PatchEventsEndpoint.ts +127 -172
  43. package/src/endpoints/global/files/ExportToExcelEndpoint.ts +49 -50
  44. package/src/endpoints/global/files/GetFileCache.ts +13 -13
  45. package/src/endpoints/global/files/UploadFile.ts +51 -54
  46. package/src/endpoints/global/files/UploadImage.ts +53 -53
  47. package/src/endpoints/global/groups/GetGroupsEndpoint.ts +25 -25
  48. package/src/endpoints/global/members/GetMemberFamilyEndpoint.ts +24 -23
  49. package/src/endpoints/global/members/GetMembersCountEndpoint.ts +8 -8
  50. package/src/endpoints/global/members/GetMembersEndpoint.ts +105 -102
  51. package/src/endpoints/global/members/PatchOrganizationMembersEndpoint.ts +240 -239
  52. package/src/endpoints/global/organizations/CheckRegisterCodeEndpoint.ts +12 -14
  53. package/src/endpoints/global/organizations/CreateOrganizationEndpoint.test.ts +32 -33
  54. package/src/endpoints/global/organizations/CreateOrganizationEndpoint.ts +48 -57
  55. package/src/endpoints/global/organizations/GetOrganizationFromDomainEndpoint.test.ts +21 -22
  56. package/src/endpoints/global/organizations/GetOrganizationFromDomainEndpoint.ts +28 -28
  57. package/src/endpoints/global/organizations/GetOrganizationFromUriEndpoint.ts +18 -18
  58. package/src/endpoints/global/organizations/SearchOrganizationEndpoint.test.ts +20 -20
  59. package/src/endpoints/global/organizations/SearchOrganizationEndpoint.ts +17 -17
  60. package/src/endpoints/global/payments/StripeWebhookEndpoint.ts +81 -75
  61. package/src/endpoints/global/platform/GetPlatformAdminsEndpoint.ts +14 -14
  62. package/src/endpoints/global/platform/GetPlatformEnpoint.ts +11 -11
  63. package/src/endpoints/global/platform/PatchPlatformEnpoint.ts +71 -68
  64. package/src/endpoints/global/registration/GetPaymentRegistrations.ts +27 -27
  65. package/src/endpoints/global/registration/GetUserBillingStatusEndpoint.ts +30 -30
  66. package/src/endpoints/global/registration/GetUserDetailedBillingStatusEndpoint.ts +34 -34
  67. package/src/endpoints/global/registration/GetUserDocumentsEndpoint.ts +26 -26
  68. package/src/endpoints/global/registration/GetUserMembersEndpoint.ts +12 -12
  69. package/src/endpoints/global/registration/PatchUserMembersEndpoint.ts +90 -90
  70. package/src/endpoints/global/registration/RegisterMembersEndpoint.test.ts +118 -121
  71. package/src/endpoints/global/registration/RegisterMembersEndpoint.ts +362 -350
  72. package/src/endpoints/global/registration-periods/GetRegistrationPeriodsEndpoint.ts +8 -9
  73. package/src/endpoints/global/registration-periods/PatchRegistrationPeriodsEndpoint.ts +21 -21
  74. package/src/endpoints/global/webshops/GetWebshopFromDomainEndpoint.ts +65 -65
  75. package/src/endpoints/organization/dashboard/billing/GetOrganizationBillingStatusEndpoint.ts +9 -9
  76. package/src/endpoints/organization/dashboard/billing/GetOrganizationDetailedBillingStatusEndpoint.ts +14 -14
  77. package/src/endpoints/organization/dashboard/documents/GetDocumentTemplateXML.ts +17 -17
  78. package/src/endpoints/organization/dashboard/documents/GetDocumentTemplatesEndpoint.ts +21 -21
  79. package/src/endpoints/organization/dashboard/documents/GetDocumentsEndpoint.ts +15 -15
  80. package/src/endpoints/organization/dashboard/documents/PatchDocumentEndpoint.ts +52 -52
  81. package/src/endpoints/organization/dashboard/documents/PatchDocumentTemplateEndpoint.ts +37 -37
  82. package/src/endpoints/organization/dashboard/email/CheckEmailBouncesEndpoint.ts +14 -14
  83. package/src/endpoints/organization/dashboard/email/EmailEndpoint.ts +113 -112
  84. package/src/endpoints/organization/dashboard/email-templates/GetEmailTemplatesEndpoint.ts +29 -29
  85. package/src/endpoints/organization/dashboard/email-templates/PatchEmailTemplatesEndpoint.ts +48 -47
  86. package/src/endpoints/organization/dashboard/mollie/CheckMollieEndpoint.ts +22 -21
  87. package/src/endpoints/organization/dashboard/mollie/ConnectMollieEndpoint.ts +13 -14
  88. package/src/endpoints/organization/dashboard/mollie/DisconnectMollieEndpoint.ts +12 -13
  89. package/src/endpoints/organization/dashboard/mollie/GetMollieDashboardEndpoint.ts +24 -24
  90. package/src/endpoints/organization/dashboard/nolt/CreateNoltTokenEndpoint.ts +10 -12
  91. package/src/endpoints/organization/dashboard/organization/GetOrganizationArchivedGroups.ts +14 -14
  92. package/src/endpoints/organization/dashboard/organization/GetOrganizationDeletedGroups.ts +13 -13
  93. package/src/endpoints/organization/dashboard/organization/GetOrganizationSSOEndpoint.ts +12 -12
  94. package/src/endpoints/organization/dashboard/organization/PatchOrganizationEndpoint.test.ts +120 -124
  95. package/src/endpoints/organization/dashboard/organization/PatchOrganizationEndpoint.ts +172 -173
  96. package/src/endpoints/organization/dashboard/organization/SetOrganizationDomainEndpoint.ts +88 -89
  97. package/src/endpoints/organization/dashboard/organization/SetOrganizationSSOEndpoint.ts +12 -12
  98. package/src/endpoints/organization/dashboard/payments/GetMemberBalanceEndpoint.ts +17 -17
  99. package/src/endpoints/organization/dashboard/payments/GetPaymentsCountEndpoint.ts +8 -8
  100. package/src/endpoints/organization/dashboard/payments/GetPaymentsEndpoint.ts +66 -67
  101. package/src/endpoints/organization/dashboard/payments/PatchBalanceItemsEndpoint.ts +47 -47
  102. package/src/endpoints/organization/dashboard/payments/PatchPaymentsEndpoint.ts +93 -91
  103. package/src/endpoints/organization/dashboard/registration-periods/GetOrganizationRegistrationPeriodsEndpoint.ts +16 -17
  104. package/src/endpoints/organization/dashboard/registration-periods/PatchOrganizationRegistrationPeriodsEndpoint.ts +170 -167
  105. package/src/endpoints/organization/dashboard/registration-periods/SetupStepReviewEndpoint.ts +25 -24
  106. package/src/endpoints/organization/dashboard/stripe/ConnectStripeEndpoint.ts +22 -23
  107. package/src/endpoints/organization/dashboard/stripe/DeleteStripeAccountEndpoint.ts +22 -22
  108. package/src/endpoints/organization/dashboard/stripe/GetStripeAccountLinkEndpoint.ts +17 -18
  109. package/src/endpoints/organization/dashboard/stripe/GetStripeAccountsEndpoint.ts +8 -9
  110. package/src/endpoints/organization/dashboard/stripe/GetStripeLoginLinkEndpoint.ts +17 -18
  111. package/src/endpoints/organization/dashboard/stripe/UpdateStripeAccountEndpoint.ts +14 -15
  112. package/src/endpoints/organization/dashboard/users/CreateApiUserEndpoint.ts +19 -19
  113. package/src/endpoints/organization/dashboard/users/DeleteUserEndpoint.ts +19 -19
  114. package/src/endpoints/organization/dashboard/users/GetApiUsersEndpoint.ts +14 -14
  115. package/src/endpoints/organization/dashboard/users/GetOrganizationAdminsEndpoint.ts +12 -12
  116. package/src/endpoints/organization/dashboard/webshops/CreateWebshopEndpoint.ts +103 -100
  117. package/src/endpoints/organization/dashboard/webshops/DeleteWebshopEndpoint.ts +11 -12
  118. package/src/endpoints/organization/dashboard/webshops/GetDiscountCodesEndpoint.ts +15 -15
  119. package/src/endpoints/organization/dashboard/webshops/GetWebshopOrdersEndpoint.ts +14 -14
  120. package/src/endpoints/organization/dashboard/webshops/GetWebshopTicketsEndpoint.ts +14 -14
  121. package/src/endpoints/organization/dashboard/webshops/GetWebshopUriAvailabilityEndpoint.ts +23 -23
  122. package/src/endpoints/organization/dashboard/webshops/PatchDiscountCodesEndpoint.ts +54 -52
  123. package/src/endpoints/organization/dashboard/webshops/PatchWebshopEndpoint.ts +84 -81
  124. package/src/endpoints/organization/dashboard/webshops/PatchWebshopOrdersEndpoint.ts +120 -111
  125. package/src/endpoints/organization/dashboard/webshops/PatchWebshopTicketsEndpoint.ts +24 -24
  126. package/src/endpoints/organization/dashboard/webshops/VerifyWebshopDomainEndpoint.ts +18 -18
  127. package/src/endpoints/organization/shared/ExchangePaymentEndpoint.ts +141 -130
  128. package/src/endpoints/organization/shared/GetDocumentHtml.ts +25 -25
  129. package/src/endpoints/organization/shared/GetPaymentEndpoint.ts +18 -18
  130. package/src/endpoints/organization/shared/auth/GetOrganizationEndpoint.test.ts +36 -37
  131. package/src/endpoints/organization/shared/auth/GetOrganizationEndpoint.ts +9 -9
  132. package/src/endpoints/organization/shared/auth/OpenIDConnectCallbackEndpoint.ts +11 -11
  133. package/src/endpoints/organization/shared/auth/OpenIDConnectStartEndpoint.ts +28 -27
  134. package/src/endpoints/organization/webshops/CheckWebshopDiscountCodesEndpoint.ts +20 -20
  135. package/src/endpoints/organization/webshops/GetOrderByPaymentEndpoint.ts +22 -22
  136. package/src/endpoints/organization/webshops/GetOrderEndpoint.ts +14 -14
  137. package/src/endpoints/organization/webshops/GetTicketsEndpoint.ts +57 -56
  138. package/src/endpoints/organization/webshops/GetWebshopEndpoint.test.ts +65 -66
  139. package/src/endpoints/organization/webshops/GetWebshopEndpoint.ts +18 -17
  140. package/src/endpoints/organization/webshops/PlaceOrderEndpoint.test.ts +124 -128
  141. package/src/endpoints/organization/webshops/PlaceOrderEndpoint.ts +154 -145
  142. package/src/excel-loaders/members.ts +102 -103
  143. package/src/excel-loaders/payments.ts +155 -156
  144. package/src/helpers/AddressValidator.test.ts +32 -32
  145. package/src/helpers/AddressValidator.ts +128 -122
  146. package/src/helpers/AdminPermissionChecker.ts +339 -236
  147. package/src/helpers/AuthenticatedStructures.ts +233 -134
  148. package/src/helpers/BuckarooHelper.ts +134 -134
  149. package/src/helpers/CheckSettlements.ts +94 -88
  150. package/src/helpers/Context.ts +87 -86
  151. package/src/helpers/CookieHelper.ts +23 -22
  152. package/src/helpers/EmailResumer.ts +10 -10
  153. package/src/helpers/FileCache.ts +62 -62
  154. package/src/helpers/ForwardHandler.test.ts +122 -124
  155. package/src/helpers/ForwardHandler.ts +76 -70
  156. package/src/helpers/MemberUserSyncer.ts +101 -96
  157. package/src/helpers/MembershipCharger.ts +69 -69
  158. package/src/helpers/MembershipHelper.ts +11 -12
  159. package/src/helpers/OpenIDConnectHelper.ts +85 -82
  160. package/src/helpers/PeriodHelper.ts +65 -70
  161. package/src/helpers/StripeHelper.ts +146 -137
  162. package/src/helpers/StripePayoutChecker.ts +51 -52
  163. package/src/helpers/ViesHelper.ts +46 -44
  164. package/src/helpers/fetchToAsyncIterator.ts +14 -14
  165. package/src/helpers/xlsxAddressTransformerColumnFactory.ts +50 -52
  166. package/src/middleware/ContextMiddleware.ts +5 -5
  167. package/src/migrations/1646578856-validate-addresses.ts +6 -9
  168. package/src/seeds/0000000000-example.ts +3 -5
  169. package/src/seeds/1715028563-user-permissions.ts +16 -18
  170. package/src/seeds/1722256498-group-update-occupancy.ts +12 -12
  171. package/src/seeds/1722344162-sync-member-users.ts +14 -15
  172. package/src/seeds/1722344162-update-membership.ts +6 -6
  173. package/src/seeds/1726055544-balance-item-paid.ts +4 -4
  174. package/src/seeds/1726055545-balance-item-pending.ts +4 -4
  175. package/src/seeds/1726494419-update-cached-outstanding-balance.ts +16 -16
  176. package/src/seeds/1726494420-update-cached-outstanding-balance-from-items.ts +12 -12
  177. package/src/seeds/1726572303-schedule-stock-updates.ts +12 -12
  178. package/src/seeds/1726847064-setup-steps.ts +16 -0
  179. package/src/sql-filters/balance-item-payments.ts +7 -7
  180. package/src/sql-filters/events.ts +14 -14
  181. package/src/sql-filters/members.ts +96 -96
  182. package/src/sql-filters/organizations.ts +139 -75
  183. package/src/sql-filters/payments.ts +28 -28
  184. package/src/sql-filters/registrations.ts +14 -14
  185. package/src/sql-sorters/events.ts +25 -25
  186. package/src/sql-sorters/members.ts +26 -26
  187. package/src/sql-sorters/organizations.ts +36 -36
  188. package/src/sql-sorters/payments.ts +26 -26
  189. package/tests/e2e/stock.test.ts +616 -621
  190. package/tests/e2e/tickets.test.ts +255 -260
  191. package/tests/helpers/StripeMocker.ts +177 -179
  192. package/tests/helpers/TestServer.ts +9 -9
  193. package/tests/jest.global.setup.ts +14 -13
  194. package/tests/jest.setup.ts +33 -32
  195. package/.eslintrc.js +0 -61
  196. package/jest.config.js +0 -11
  197. package/src/helpers/SetupStepsUpdater.ts +0 -359
  198. package/src/seeds/1724076679-setup-steps.ts +0 -16
@@ -1,281 +1,277 @@
1
1
  import { AutoEncoderPatchType, PatchableArray } from '@simonbackx/simple-encoding';
2
- import { Request } from "@simonbackx/simple-endpoints";
2
+ import { Request } from '@simonbackx/simple-endpoints';
3
3
  import { GroupFactory, OrganizationFactory, Token, UserFactory } from '@stamhoofd/models';
4
4
  import { Group, GroupGenderType, GroupPatch, GroupPrivateSettings, GroupSettings, GroupSettingsPatch, Organization, PermissionLevel, PermissionRole, PermissionRoleDetailed, Permissions, PermissionsResourceType, ResourcePermissions } from '@stamhoofd/structures';
5
5
 
6
6
  import { testServer } from '../../../../../tests/helpers/TestServer';
7
7
  import { PatchOrganizationEndpoint } from './PatchOrganizationEndpoint';
8
8
 
9
- describe("Endpoint.PatchOrganization", () => {
9
+ describe('Endpoint.PatchOrganization', () => {
10
10
  // Test endpoint
11
11
  const endpoint = new PatchOrganizationEndpoint();
12
12
 
13
- test("Change the name of the organization", async () => {
14
- const organization = await new OrganizationFactory({}).create()
15
- const user = await new UserFactory({ organization, permissions: Permissions.create({ level: PermissionLevel.Full }) }).create()
16
- //const groups = await new GroupFactory({ organization }).createMultiple(2)
17
- const token = await Token.createToken(user)
13
+ test('Change the name of the organization', async () => {
14
+ const organization = await new OrganizationFactory({}).create();
15
+ const user = await new UserFactory({ organization, permissions: Permissions.create({ level: PermissionLevel.Full }) }).create();
16
+ // const groups = await new GroupFactory({ organization }).createMultiple(2)
17
+ const token = await Token.createToken(user);
18
18
 
19
- const r = Request.buildJson("PATCH", "/v2/organization", organization.getApiHost(), {
19
+ const r = Request.buildJson('PATCH', '/v2/organization', organization.getApiHost(), {
20
20
  id: organization.id,
21
- name: "My crazy name"
21
+ name: 'My crazy name',
22
22
  });
23
- r.headers.authorization = "Bearer "+token.accessToken
23
+ r.headers.authorization = 'Bearer ' + token.accessToken;
24
24
 
25
25
  const response = await testServer.test(endpoint, r);
26
26
  expect(response.body).toBeDefined();
27
27
 
28
28
  if (!(response.body instanceof Organization)) {
29
- throw new Error("Expected Organization")
29
+ throw new Error('Expected Organization');
30
30
  }
31
31
 
32
- expect(response.body.id).toEqual(organization.id)
33
- expect(response.body.name).toEqual("My crazy name")
32
+ expect(response.body.id).toEqual(organization.id);
33
+ expect(response.body.name).toEqual('My crazy name');
34
34
  });
35
35
 
36
36
  test("Can't change organization as a normal user", async () => {
37
- const organization = await new OrganizationFactory({}).create()
38
- const user = await new UserFactory({ organization }).create()
39
- const token = await Token.createToken(user)
37
+ const organization = await new OrganizationFactory({}).create();
38
+ const user = await new UserFactory({ organization }).create();
39
+ const token = await Token.createToken(user);
40
40
 
41
- const r = Request.buildJson("PATCH", "/organization", organization.getApiHost(), {
41
+ const r = Request.buildJson('PATCH', '/organization', organization.getApiHost(), {
42
42
  id: organization.id,
43
- name: "My crazy name"
43
+ name: 'My crazy name',
44
44
  });
45
- r.headers.authorization = "Bearer " + token.accessToken
45
+ r.headers.authorization = 'Bearer ' + token.accessToken;
46
46
 
47
47
  await expect(testServer.test(endpoint, r)).rejects.toThrow(/permissions/i);
48
48
  });
49
49
 
50
50
  test("Can't change organization as a user with read access", async () => {
51
- const organization = await new OrganizationFactory({}).create()
52
- const user = await new UserFactory({ organization, permissions: Permissions.create({ level: PermissionLevel.Read }) }).create()
53
- const token = await Token.createToken(user)
51
+ const organization = await new OrganizationFactory({}).create();
52
+ const user = await new UserFactory({ organization, permissions: Permissions.create({ level: PermissionLevel.Read }) }).create();
53
+ const token = await Token.createToken(user);
54
54
 
55
- const r = Request.buildJson("PATCH", "/organization", organization.getApiHost(), {
55
+ const r = Request.buildJson('PATCH', '/organization', organization.getApiHost(), {
56
56
  id: organization.id,
57
- name: "My crazy name"
57
+ name: 'My crazy name',
58
58
  });
59
- r.headers.authorization = "Bearer " + token.accessToken
59
+ r.headers.authorization = 'Bearer ' + token.accessToken;
60
60
 
61
61
  await expect(testServer.test(endpoint, r)).rejects.toThrow(/permissions/i);
62
62
  });
63
63
 
64
- test("Change the name of a group with access", async () => {
65
- const organization = await new OrganizationFactory({}).create()
64
+ test('Change the name of a group with access', async () => {
65
+ const organization = await new OrganizationFactory({}).create();
66
66
  const role = PermissionRoleDetailed.create({
67
- name: "Role"
68
- })
67
+ name: 'Role',
68
+ });
69
69
  organization.privateMeta.roles.push(
70
- role
71
- )
72
- const groups = await new GroupFactory({ organization }).createMultiple(2)
70
+ role,
71
+ );
72
+ const groups = await new GroupFactory({ organization }).createMultiple(2);
73
73
 
74
- role.resources.set(PermissionsResourceType.Groups, new Map())
74
+ role.resources.set(PermissionsResourceType.Groups, new Map());
75
75
  role.resources.get(PermissionsResourceType.Groups)!.set(groups[0].id, ResourcePermissions.create({
76
- level: PermissionLevel.Full
77
- }))
76
+ level: PermissionLevel.Full,
77
+ }));
78
78
 
79
- await organization.save()
79
+ await organization.save();
80
80
 
81
81
  const validPermissions = [
82
82
  Permissions.create({
83
83
  level: PermissionLevel.None,
84
- roles: [PermissionRole.create(role)]
84
+ roles: [PermissionRole.create(role)],
85
85
  }),
86
86
  Permissions.create({
87
- level: PermissionLevel.Full
87
+ level: PermissionLevel.Full,
88
88
  }),
89
- ]
89
+ ];
90
90
 
91
91
  for (const permission of validPermissions) {
92
- const user = await new UserFactory({ organization,
93
- permissions: permission
94
- }).create()
95
- const token = await Token.createToken(user)
92
+ const user = await new UserFactory({ organization,
93
+ permissions: permission,
94
+ }).create();
95
+ const token = await Token.createToken(user);
96
96
 
97
- const changes = new PatchableArray<string, Group, AutoEncoderPatchType<Group>>()
97
+ const changes = new PatchableArray<string, Group, AutoEncoderPatchType<Group>>();
98
98
  changes.addPatch(GroupPatch.create({
99
99
  id: groups[0].id,
100
100
  settings: GroupSettingsPatch.create({
101
- name: "My crazy group name",
102
- })
103
- }))
101
+ name: 'My crazy group name',
102
+ }),
103
+ }));
104
104
 
105
- const r = Request.buildJson("PATCH", "/organization", organization.getApiHost(), {
105
+ const r = Request.buildJson('PATCH', '/organization', organization.getApiHost(), {
106
106
  id: organization.id,
107
107
  groups: changes.encode({ version: 2 }),
108
108
  });
109
- r.headers.authorization = "Bearer " + token.accessToken
109
+ r.headers.authorization = 'Bearer ' + token.accessToken;
110
110
 
111
111
  const response = await testServer.test(endpoint, r);
112
112
  expect(response.body).toBeDefined();
113
113
 
114
114
  if (!(response.body instanceof Organization)) {
115
- throw new Error("Expected Organization")
115
+ throw new Error('Expected Organization');
116
116
  }
117
117
 
118
- expect(response.body.id).toEqual(organization.id)
119
- expect(response.body.groups.find(g => g.id == groups[0].id)!.settings.name).toEqual("My crazy group name")
118
+ expect(response.body.id).toEqual(organization.id);
119
+ expect(response.body.groups.find(g => g.id == groups[0].id)!.settings.name).toEqual('My crazy group name');
120
120
  }
121
121
  });
122
122
 
123
123
  test("Can't change name of group without access", async () => {
124
- const organization = await new OrganizationFactory({}).create()
124
+ const organization = await new OrganizationFactory({}).create();
125
125
  const role = PermissionRoleDetailed.create({
126
- name: "Role"
127
- })
126
+ name: 'Role',
127
+ });
128
128
  const role2 = PermissionRoleDetailed.create({
129
- name: "Role2"
130
- })
129
+ name: 'Role2',
130
+ });
131
131
  organization.privateMeta.roles.push(
132
132
  role,
133
- role2
134
- )
135
- await organization.save()
136
- const groups = await new GroupFactory({ organization }).createMultiple(2)
133
+ role2,
134
+ );
135
+ await organization.save();
136
+ const groups = await new GroupFactory({ organization }).createMultiple(2);
137
137
 
138
- groups[0].privateSettings.permissions.write.push(PermissionRole.create(role))
139
- await groups[0].save()
138
+ groups[0].privateSettings.permissions.write.push(PermissionRole.create(role));
139
+ await groups[0].save();
140
140
 
141
- groups[0].privateSettings.permissions.read.push(PermissionRole.create(role2))
142
- await groups[0].save()
141
+ groups[0].privateSettings.permissions.read.push(PermissionRole.create(role2));
142
+ await groups[0].save();
143
143
 
144
144
  const invalidPermissions = [
145
145
  Permissions.create({
146
146
  level: PermissionLevel.Read,
147
- roles: [PermissionRole.create(role)]
147
+ roles: [PermissionRole.create(role)],
148
148
  }),
149
149
  Permissions.create({
150
150
  level: PermissionLevel.None,
151
- roles: [PermissionRole.create(role2)]
151
+ roles: [PermissionRole.create(role2)],
152
152
  }),
153
153
  Permissions.create({
154
154
  level: PermissionLevel.Write,
155
- roles: [PermissionRole.create(role2), PermissionRole.create(role)]
155
+ roles: [PermissionRole.create(role2), PermissionRole.create(role)],
156
156
  }),
157
157
  Permissions.create({
158
- level: PermissionLevel.Write
158
+ level: PermissionLevel.Write,
159
159
  }),
160
160
  Permissions.create({
161
- level: PermissionLevel.Read
161
+ level: PermissionLevel.Read,
162
162
  }),
163
- null
164
- ]
163
+ null,
164
+ ];
165
165
 
166
166
  for (const permission of invalidPermissions) {
167
167
  const user = await new UserFactory({
168
- organization,
169
- permissions: permission
170
- }).create()
171
- const token = await Token.createToken(user)
172
-
173
- const changes = new PatchableArray<string, Group, AutoEncoderPatchType<Group>>()
174
- changes.addPatch(GroupPatch.create({
175
- id: groups[0].id,
176
- settings: GroupSettingsPatch.create({
177
- name: "My crazy group name",
178
- })
179
- }))
180
- const r = Request.buildJson("PATCH", "/organization", organization.getApiHost(), {
181
- id: organization.id,
182
- groups: changes.encode({ version: 2 }),
183
- });
184
- r.headers.authorization = "Bearer " + token.accessToken
185
- await expect(testServer.test(endpoint, r)).rejects.toThrow(/permissions/i);
168
+ organization,
169
+ permissions: permission,
170
+ }).create();
171
+ const token = await Token.createToken(user);
172
+
173
+ const changes = new PatchableArray<string, Group, AutoEncoderPatchType<Group>>();
174
+ changes.addPatch(GroupPatch.create({
175
+ id: groups[0].id,
176
+ settings: GroupSettingsPatch.create({
177
+ name: 'My crazy group name',
178
+ }),
179
+ }));
180
+ const r = Request.buildJson('PATCH', '/organization', organization.getApiHost(), {
181
+ id: organization.id,
182
+ groups: changes.encode({ version: 2 }),
183
+ });
184
+ r.headers.authorization = 'Bearer ' + token.accessToken;
185
+ await expect(testServer.test(endpoint, r)).rejects.toThrow(/permissions/i);
186
186
  }
187
-
188
-
189
187
  });
190
188
 
191
-
192
- test("Create a group with access", async () => {
193
- const organization = await new OrganizationFactory({}).create()
194
- const groups = await new GroupFactory({ organization }).createMultiple(2)
189
+ test('Create a group with access', async () => {
190
+ const organization = await new OrganizationFactory({}).create();
191
+ const groups = await new GroupFactory({ organization }).createMultiple(2);
195
192
 
196
193
  const validPermissions = [
197
194
  Permissions.create({
198
- level: PermissionLevel.Full
195
+ level: PermissionLevel.Full,
199
196
  }),
200
- ]
197
+ ];
201
198
 
202
199
  const invalidPermissions = [
203
200
  Permissions.create({
204
- level: PermissionLevel.Write
201
+ level: PermissionLevel.Write,
205
202
  }),
206
- ]
203
+ ];
207
204
 
208
205
  for (const permission of validPermissions) {
209
206
  const user = await new UserFactory({
210
207
  organization,
211
- permissions: permission
212
- }).create()
213
- const token = await Token.createToken(user)
208
+ permissions: permission,
209
+ }).create();
210
+ const token = await Token.createToken(user);
214
211
 
215
- const changes = new PatchableArray<string, Group, AutoEncoderPatchType<Group>>()
212
+ const changes = new PatchableArray<string, Group, AutoEncoderPatchType<Group>>();
216
213
  const put = Group.create({
217
214
  cycle: 0,
218
215
  organizationId: organization.id,
219
216
  periodId: organization.periodId,
220
217
  settings: GroupSettings.create({
221
- name: "My crazy group name",
218
+ name: 'My crazy group name',
222
219
  startDate: new Date(),
223
220
  endDate: new Date(),
224
221
  registrationStartDate: new Date(),
225
222
  registrationEndDate: new Date(),
226
223
  genderType: GroupGenderType.Mixed,
227
224
  }),
228
- privateSettings: GroupPrivateSettings.create({})
229
- })
230
- changes.addPut(put)
225
+ privateSettings: GroupPrivateSettings.create({}),
226
+ });
227
+ changes.addPut(put);
231
228
 
232
- const r = Request.buildJson("PATCH", "/v140/organization", organization.getApiHost(), {
229
+ const r = Request.buildJson('PATCH', '/v140/organization', organization.getApiHost(), {
233
230
  id: organization.id,
234
231
  groups: changes.encode({ version: 140 }),
235
232
  });
236
- r.headers.authorization = "Bearer " + token.accessToken
233
+ r.headers.authorization = 'Bearer ' + token.accessToken;
237
234
 
238
235
  const response = await testServer.test(endpoint, r);
239
236
  expect(response.body).toBeDefined();
240
237
 
241
238
  if (!(response.body instanceof Organization)) {
242
- throw new Error("Expected Organization")
239
+ throw new Error('Expected Organization');
243
240
  }
244
241
 
245
- expect(response.body.id).toEqual(organization.id)
246
- expect(response.body.groups.map(g => g.id)).toContainEqual(put.id)
242
+ expect(response.body.id).toEqual(organization.id);
243
+ expect(response.body.groups.map(g => g.id)).toContainEqual(put.id);
247
244
  }
248
245
 
249
246
  for (const permission of invalidPermissions) {
250
247
  const user = await new UserFactory({
251
248
  organization,
252
- permissions: permission
253
- }).create()
254
- const token = await Token.createToken(user)
249
+ permissions: permission,
250
+ }).create();
251
+ const token = await Token.createToken(user);
255
252
 
256
- const changes = new PatchableArray<string, Group, AutoEncoderPatchType<Group>>()
253
+ const changes = new PatchableArray<string, Group, AutoEncoderPatchType<Group>>();
257
254
  const put = Group.create({
258
255
  cycle: 0,
259
256
  organizationId: organization.id,
260
257
  periodId: organization.periodId,
261
258
  settings: GroupSettings.create({
262
- name: "My crazy group name",
259
+ name: 'My crazy group name',
263
260
  startDate: new Date(),
264
261
  endDate: new Date(),
265
262
  registrationStartDate: new Date(),
266
263
  registrationEndDate: new Date(),
267
264
  genderType: GroupGenderType.Mixed,
268
- })
269
- })
270
- changes.addPut(put)
265
+ }),
266
+ });
267
+ changes.addPut(put);
271
268
 
272
- const r = Request.buildJson("PATCH", "/v2/organization", organization.getApiHost(), {
269
+ const r = Request.buildJson('PATCH', '/v2/organization', organization.getApiHost(), {
273
270
  id: organization.id,
274
271
  groups: changes.encode({ version: 2 }),
275
272
  });
276
- r.headers.authorization = "Bearer " + token.accessToken
273
+ r.headers.authorization = 'Bearer ' + token.accessToken;
277
274
  await expect(testServer.test(endpoint, r)).rejects.toThrow(/permissions/i);
278
275
  }
279
276
  });
280
-
281
277
  });