@stamhoofd/backend 2.39.1 → 2.40.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.
- package/eslint.config.mjs +5 -0
- package/index.ts +81 -74
- package/jest.config.cjs +10 -0
- package/migrations.ts +16 -14
- package/package.json +11 -11
- package/src/crons/clear-excel-cache.test.ts +48 -50
- package/src/crons/clear-excel-cache.ts +18 -18
- package/src/crons/setup-steps.ts +2 -2
- package/src/crons.ts +325 -306
- package/src/decoders/StringArrayDecoder.ts +7 -7
- package/src/decoders/StringNullableDecoder.ts +1 -2
- package/src/email-recipient-loaders/members.ts +22 -22
- package/src/endpoints/admin/memberships/ChargeMembershipsEndpoint.ts +8 -9
- package/src/endpoints/admin/memberships/GetChargeMembershipsSummaryEndpoint.ts +39 -40
- package/src/endpoints/admin/organizations/GetOrganizationsCountEndpoint.ts +8 -8
- package/src/endpoints/admin/organizations/GetOrganizationsEndpoint.ts +44 -45
- package/src/endpoints/admin/organizations/PatchOrganizationsEndpoint.ts +58 -57
- package/src/endpoints/auth/CreateAdminEndpoint.ts +48 -45
- package/src/endpoints/auth/CreateTokenEndpoint.test.ts +31 -31
- package/src/endpoints/auth/CreateTokenEndpoint.ts +146 -147
- package/src/endpoints/auth/DeleteTokenEndpoint.ts +7 -7
- package/src/endpoints/auth/DeleteUserEndpoint.ts +15 -15
- package/src/endpoints/auth/ForgotPasswordEndpoint.ts +17 -18
- package/src/endpoints/auth/GetOtherUserEndpoint.ts +9 -10
- package/src/endpoints/auth/GetUserEndpoint.test.ts +32 -35
- package/src/endpoints/auth/GetUserEndpoint.ts +5 -6
- package/src/endpoints/auth/PatchApiUserEndpoint.ts +35 -33
- package/src/endpoints/auth/PatchUserEndpoint.ts +55 -52
- package/src/endpoints/auth/PollEmailVerificationEndpoint.ts +9 -9
- package/src/endpoints/auth/RetryEmailVerificationEndpoint.ts +8 -8
- package/src/endpoints/auth/SignupEndpoint.ts +37 -36
- package/src/endpoints/auth/VerifyEmailEndpoint.ts +29 -28
- package/src/endpoints/global/addresses/SearchRegionsEndpoint.ts +33 -33
- package/src/endpoints/global/addresses/ValidateAddressEndpoint.ts +7 -7
- package/src/endpoints/global/caddy/CheckDomainCertEndpoint.ts +37 -37
- package/src/endpoints/global/email/CreateEmailEndpoint.ts +30 -30
- package/src/endpoints/global/email/GetEmailAddressEndpoint.ts +13 -13
- package/src/endpoints/global/email/GetEmailEndpoint.ts +13 -13
- package/src/endpoints/global/email/ManageEmailAddressEndpoint.ts +16 -16
- package/src/endpoints/global/email/PatchEmailEndpoint.ts +25 -25
- package/src/endpoints/global/events/GetEventsEndpoint.ts +43 -44
- package/src/endpoints/global/events/PatchEventsEndpoint.ts +127 -172
- package/src/endpoints/global/files/ExportToExcelEndpoint.ts +49 -50
- package/src/endpoints/global/files/GetFileCache.ts +13 -13
- package/src/endpoints/global/files/UploadFile.ts +51 -54
- package/src/endpoints/global/files/UploadImage.ts +53 -53
- package/src/endpoints/global/groups/GetGroupsEndpoint.ts +25 -25
- package/src/endpoints/global/members/GetMemberFamilyEndpoint.ts +24 -23
- package/src/endpoints/global/members/GetMembersCountEndpoint.ts +8 -8
- package/src/endpoints/global/members/GetMembersEndpoint.ts +105 -102
- package/src/endpoints/global/members/PatchOrganizationMembersEndpoint.ts +240 -239
- package/src/endpoints/global/organizations/CheckRegisterCodeEndpoint.ts +12 -14
- package/src/endpoints/global/organizations/CreateOrganizationEndpoint.test.ts +32 -33
- package/src/endpoints/global/organizations/CreateOrganizationEndpoint.ts +48 -57
- package/src/endpoints/global/organizations/GetOrganizationFromDomainEndpoint.test.ts +21 -22
- package/src/endpoints/global/organizations/GetOrganizationFromDomainEndpoint.ts +28 -28
- package/src/endpoints/global/organizations/GetOrganizationFromUriEndpoint.ts +18 -18
- package/src/endpoints/global/organizations/SearchOrganizationEndpoint.test.ts +20 -20
- package/src/endpoints/global/organizations/SearchOrganizationEndpoint.ts +17 -17
- package/src/endpoints/global/payments/StripeWebhookEndpoint.ts +81 -75
- package/src/endpoints/global/platform/GetPlatformAdminsEndpoint.ts +14 -14
- package/src/endpoints/global/platform/GetPlatformEnpoint.ts +11 -11
- package/src/endpoints/global/platform/PatchPlatformEnpoint.ts +71 -68
- package/src/endpoints/global/registration/GetPaymentRegistrations.ts +27 -27
- package/src/endpoints/global/registration/GetUserBillingStatusEndpoint.ts +30 -30
- package/src/endpoints/global/registration/GetUserDetailedBillingStatusEndpoint.ts +34 -34
- package/src/endpoints/global/registration/GetUserDocumentsEndpoint.ts +26 -26
- package/src/endpoints/global/registration/GetUserMembersEndpoint.ts +12 -12
- package/src/endpoints/global/registration/PatchUserMembersEndpoint.ts +90 -90
- package/src/endpoints/global/registration/RegisterMembersEndpoint.test.ts +118 -121
- package/src/endpoints/global/registration/RegisterMembersEndpoint.ts +362 -350
- package/src/endpoints/global/registration-periods/GetRegistrationPeriodsEndpoint.ts +8 -9
- package/src/endpoints/global/registration-periods/PatchRegistrationPeriodsEndpoint.ts +21 -21
- package/src/endpoints/global/webshops/GetWebshopFromDomainEndpoint.ts +65 -65
- package/src/endpoints/organization/dashboard/billing/GetOrganizationBillingStatusEndpoint.ts +9 -9
- package/src/endpoints/organization/dashboard/billing/GetOrganizationDetailedBillingStatusEndpoint.ts +14 -14
- package/src/endpoints/organization/dashboard/documents/GetDocumentTemplateXML.ts +17 -17
- package/src/endpoints/organization/dashboard/documents/GetDocumentTemplatesEndpoint.ts +21 -21
- package/src/endpoints/organization/dashboard/documents/GetDocumentsEndpoint.ts +15 -15
- package/src/endpoints/organization/dashboard/documents/PatchDocumentEndpoint.ts +52 -52
- package/src/endpoints/organization/dashboard/documents/PatchDocumentTemplateEndpoint.ts +37 -37
- package/src/endpoints/organization/dashboard/email/CheckEmailBouncesEndpoint.ts +14 -14
- package/src/endpoints/organization/dashboard/email/EmailEndpoint.ts +113 -112
- package/src/endpoints/organization/dashboard/email-templates/GetEmailTemplatesEndpoint.ts +29 -29
- package/src/endpoints/organization/dashboard/email-templates/PatchEmailTemplatesEndpoint.ts +48 -47
- package/src/endpoints/organization/dashboard/mollie/CheckMollieEndpoint.ts +22 -21
- package/src/endpoints/organization/dashboard/mollie/ConnectMollieEndpoint.ts +13 -14
- package/src/endpoints/organization/dashboard/mollie/DisconnectMollieEndpoint.ts +12 -13
- package/src/endpoints/organization/dashboard/mollie/GetMollieDashboardEndpoint.ts +24 -24
- package/src/endpoints/organization/dashboard/nolt/CreateNoltTokenEndpoint.ts +10 -12
- package/src/endpoints/organization/dashboard/organization/GetOrganizationArchivedGroups.ts +14 -14
- package/src/endpoints/organization/dashboard/organization/GetOrganizationDeletedGroups.ts +13 -13
- package/src/endpoints/organization/dashboard/organization/GetOrganizationSSOEndpoint.ts +12 -12
- package/src/endpoints/organization/dashboard/organization/PatchOrganizationEndpoint.test.ts +120 -124
- package/src/endpoints/organization/dashboard/organization/PatchOrganizationEndpoint.ts +172 -173
- package/src/endpoints/organization/dashboard/organization/SetOrganizationDomainEndpoint.ts +88 -89
- package/src/endpoints/organization/dashboard/organization/SetOrganizationSSOEndpoint.ts +12 -12
- package/src/endpoints/organization/dashboard/payments/GetMemberBalanceEndpoint.ts +17 -17
- package/src/endpoints/organization/dashboard/payments/GetPaymentsCountEndpoint.ts +8 -8
- package/src/endpoints/organization/dashboard/payments/GetPaymentsEndpoint.ts +66 -67
- package/src/endpoints/organization/dashboard/payments/PatchBalanceItemsEndpoint.ts +47 -47
- package/src/endpoints/organization/dashboard/payments/PatchPaymentsEndpoint.ts +93 -91
- package/src/endpoints/organization/dashboard/registration-periods/GetOrganizationRegistrationPeriodsEndpoint.ts +16 -17
- package/src/endpoints/organization/dashboard/registration-periods/PatchOrganizationRegistrationPeriodsEndpoint.ts +170 -167
- package/src/endpoints/organization/dashboard/registration-periods/SetupStepReviewEndpoint.ts +25 -24
- package/src/endpoints/organization/dashboard/stripe/ConnectStripeEndpoint.ts +22 -23
- package/src/endpoints/organization/dashboard/stripe/DeleteStripeAccountEndpoint.ts +22 -22
- package/src/endpoints/organization/dashboard/stripe/GetStripeAccountLinkEndpoint.ts +17 -18
- package/src/endpoints/organization/dashboard/stripe/GetStripeAccountsEndpoint.ts +8 -9
- package/src/endpoints/organization/dashboard/stripe/GetStripeLoginLinkEndpoint.ts +17 -18
- package/src/endpoints/organization/dashboard/stripe/UpdateStripeAccountEndpoint.ts +14 -15
- package/src/endpoints/organization/dashboard/users/CreateApiUserEndpoint.ts +19 -19
- package/src/endpoints/organization/dashboard/users/DeleteUserEndpoint.ts +19 -19
- package/src/endpoints/organization/dashboard/users/GetApiUsersEndpoint.ts +14 -14
- package/src/endpoints/organization/dashboard/users/GetOrganizationAdminsEndpoint.ts +12 -12
- package/src/endpoints/organization/dashboard/webshops/CreateWebshopEndpoint.ts +103 -100
- package/src/endpoints/organization/dashboard/webshops/DeleteWebshopEndpoint.ts +11 -12
- package/src/endpoints/organization/dashboard/webshops/GetDiscountCodesEndpoint.ts +15 -15
- package/src/endpoints/organization/dashboard/webshops/GetWebshopOrdersEndpoint.ts +14 -14
- package/src/endpoints/organization/dashboard/webshops/GetWebshopTicketsEndpoint.ts +14 -14
- package/src/endpoints/organization/dashboard/webshops/GetWebshopUriAvailabilityEndpoint.ts +23 -23
- package/src/endpoints/organization/dashboard/webshops/PatchDiscountCodesEndpoint.ts +54 -52
- package/src/endpoints/organization/dashboard/webshops/PatchWebshopEndpoint.ts +84 -81
- package/src/endpoints/organization/dashboard/webshops/PatchWebshopOrdersEndpoint.ts +120 -111
- package/src/endpoints/organization/dashboard/webshops/PatchWebshopTicketsEndpoint.ts +24 -24
- package/src/endpoints/organization/dashboard/webshops/VerifyWebshopDomainEndpoint.ts +18 -18
- package/src/endpoints/organization/shared/ExchangePaymentEndpoint.ts +141 -130
- package/src/endpoints/organization/shared/GetDocumentHtml.ts +25 -25
- package/src/endpoints/organization/shared/GetPaymentEndpoint.ts +18 -18
- package/src/endpoints/organization/shared/auth/GetOrganizationEndpoint.test.ts +36 -37
- package/src/endpoints/organization/shared/auth/GetOrganizationEndpoint.ts +9 -9
- package/src/endpoints/organization/shared/auth/OpenIDConnectCallbackEndpoint.ts +11 -11
- package/src/endpoints/organization/shared/auth/OpenIDConnectStartEndpoint.ts +28 -27
- package/src/endpoints/organization/webshops/CheckWebshopDiscountCodesEndpoint.ts +20 -20
- package/src/endpoints/organization/webshops/GetOrderByPaymentEndpoint.ts +22 -22
- package/src/endpoints/organization/webshops/GetOrderEndpoint.ts +14 -14
- package/src/endpoints/organization/webshops/GetTicketsEndpoint.ts +57 -56
- package/src/endpoints/organization/webshops/GetWebshopEndpoint.test.ts +65 -66
- package/src/endpoints/organization/webshops/GetWebshopEndpoint.ts +18 -17
- package/src/endpoints/organization/webshops/PlaceOrderEndpoint.test.ts +124 -128
- package/src/endpoints/organization/webshops/PlaceOrderEndpoint.ts +154 -145
- package/src/excel-loaders/members.ts +275 -273
- package/src/excel-loaders/payments.ts +155 -156
- package/src/helpers/AddressValidator.test.ts +32 -32
- package/src/helpers/AddressValidator.ts +128 -122
- package/src/helpers/AdminPermissionChecker.ts +339 -236
- package/src/helpers/AuthenticatedStructures.ts +233 -134
- package/src/helpers/BuckarooHelper.ts +134 -134
- package/src/helpers/CheckSettlements.ts +94 -88
- package/src/helpers/Context.ts +87 -86
- package/src/helpers/CookieHelper.ts +23 -22
- package/src/helpers/EmailResumer.ts +10 -10
- package/src/helpers/FileCache.ts +62 -62
- package/src/helpers/ForwardHandler.test.ts +122 -124
- package/src/helpers/ForwardHandler.ts +76 -70
- package/src/helpers/MemberUserSyncer.ts +101 -96
- package/src/helpers/MembershipCharger.ts +69 -69
- package/src/helpers/MembershipHelper.ts +11 -12
- package/src/helpers/OpenIDConnectHelper.ts +85 -82
- package/src/helpers/PeriodHelper.ts +65 -70
- package/src/helpers/StripeHelper.ts +146 -137
- package/src/helpers/StripePayoutChecker.ts +51 -52
- package/src/helpers/ViesHelper.ts +46 -44
- package/src/helpers/fetchToAsyncIterator.ts +14 -14
- package/src/helpers/xlsxAddressTransformerColumnFactory.ts +58 -60
- package/src/middleware/ContextMiddleware.ts +5 -5
- package/src/migrations/1646578856-validate-addresses.ts +6 -9
- package/src/seeds/0000000000-example.ts +3 -5
- package/src/seeds/1715028563-user-permissions.ts +16 -18
- package/src/seeds/1722256498-group-update-occupancy.ts +12 -12
- package/src/seeds/1722344162-sync-member-users.ts +14 -15
- package/src/seeds/1722344162-update-membership.ts +6 -6
- package/src/seeds/1726055544-balance-item-paid.ts +4 -4
- package/src/seeds/1726055545-balance-item-pending.ts +4 -4
- package/src/seeds/1726494419-update-cached-outstanding-balance.ts +16 -16
- package/src/seeds/1726494420-update-cached-outstanding-balance-from-items.ts +12 -12
- package/src/seeds/1726572303-schedule-stock-updates.ts +12 -12
- package/src/seeds/1726847064-setup-steps.ts +16 -0
- package/src/sql-filters/balance-item-payments.ts +7 -7
- package/src/sql-filters/events.ts +14 -14
- package/src/sql-filters/members.ts +96 -96
- package/src/sql-filters/organizations.ts +139 -75
- package/src/sql-filters/payments.ts +28 -28
- package/src/sql-filters/registrations.ts +14 -14
- package/src/sql-sorters/events.ts +25 -25
- package/src/sql-sorters/members.ts +26 -26
- package/src/sql-sorters/organizations.ts +36 -36
- package/src/sql-sorters/payments.ts +26 -26
- package/tests/e2e/stock.test.ts +616 -621
- package/tests/e2e/tickets.test.ts +255 -260
- package/tests/helpers/StripeMocker.ts +177 -179
- package/tests/helpers/TestServer.ts +9 -9
- package/tests/jest.global.setup.ts +14 -13
- package/tests/jest.setup.ts +33 -32
- package/.eslintrc.js +0 -61
- package/jest.config.js +0 -11
- package/src/helpers/SetupStepsUpdater.ts +0 -359
- 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
|
|
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(
|
|
9
|
+
describe('Endpoint.PatchOrganization', () => {
|
|
10
10
|
// Test endpoint
|
|
11
11
|
const endpoint = new PatchOrganizationEndpoint();
|
|
12
12
|
|
|
13
|
-
test(
|
|
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(
|
|
19
|
+
const r = Request.buildJson('PATCH', '/v2/organization', organization.getApiHost(), {
|
|
20
20
|
id: organization.id,
|
|
21
|
-
name:
|
|
21
|
+
name: 'My crazy name',
|
|
22
22
|
});
|
|
23
|
-
r.headers.authorization =
|
|
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(
|
|
29
|
+
throw new Error('Expected Organization');
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
expect(response.body.id).toEqual(organization.id)
|
|
33
|
-
expect(response.body.name).toEqual(
|
|
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(
|
|
41
|
+
const r = Request.buildJson('PATCH', '/organization', organization.getApiHost(), {
|
|
42
42
|
id: organization.id,
|
|
43
|
-
name:
|
|
43
|
+
name: 'My crazy name',
|
|
44
44
|
});
|
|
45
|
-
r.headers.authorization =
|
|
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(
|
|
55
|
+
const r = Request.buildJson('PATCH', '/organization', organization.getApiHost(), {
|
|
56
56
|
id: organization.id,
|
|
57
|
-
name:
|
|
57
|
+
name: 'My crazy name',
|
|
58
58
|
});
|
|
59
|
-
r.headers.authorization =
|
|
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(
|
|
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:
|
|
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:
|
|
102
|
-
})
|
|
103
|
-
}))
|
|
101
|
+
name: 'My crazy group name',
|
|
102
|
+
}),
|
|
103
|
+
}));
|
|
104
104
|
|
|
105
|
-
const r = Request.buildJson(
|
|
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 =
|
|
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(
|
|
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(
|
|
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
|
-
|
|
124
|
+
const organization = await new OrganizationFactory({}).create();
|
|
125
125
|
const role = PermissionRoleDetailed.create({
|
|
126
|
-
name:
|
|
127
|
-
})
|
|
126
|
+
name: 'Role',
|
|
127
|
+
});
|
|
128
128
|
const role2 = PermissionRoleDetailed.create({
|
|
129
|
-
name:
|
|
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
|
-
|
|
169
|
-
|
|
170
|
-
}).create()
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
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
|
-
|
|
193
|
-
const
|
|
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:
|
|
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(
|
|
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 =
|
|
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(
|
|
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:
|
|
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(
|
|
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 =
|
|
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
|
});
|