Skip to content

Commit 083ab08

Browse files
refactor(api): move /api/memberships/me/disable route
to src/team
1 parent 8f36fae commit 083ab08

File tree

3 files changed

+64
-28
lines changed

3 files changed

+64
-28
lines changed

api/lib/application/memberships/index.js

-28
Original file line numberDiff line numberDiff line change
@@ -3,37 +3,9 @@ import Joi from 'joi';
33
import { securityPreHandlers } from '../../../src/shared/application/security-pre-handlers.js';
44
import { identifiersType } from '../../../src/shared/domain/types/identifiers-type.js';
55
import { membershipController } from '../../../src/team/application/membership/membership.controller.js';
6-
import { membershipController as libMembershipController } from './membership-controller.js';
76

87
const register = async function (server) {
98
server.route([
10-
{
11-
method: 'POST',
12-
path: '/api/memberships/me/disable',
13-
config: {
14-
pre: [
15-
{
16-
method: securityPreHandlers.checkUserIsAdminInOrganization,
17-
assign: 'isAdminInOrganization',
18-
},
19-
{
20-
method: securityPreHandlers.checkUserCanDisableHisOrganizationMembership,
21-
assign: 'canDisableHisOrganizationMembership',
22-
},
23-
],
24-
validate: {
25-
payload: Joi.object({
26-
organizationId: identifiersType.organizationId,
27-
}),
28-
},
29-
handler: libMembershipController.disableOwnOrganizationMembership,
30-
tags: ['api'],
31-
notes: [
32-
"- **Cette route est restreinte aux utilisateurs authentifiés en tant qu'administrateur de l'organisation\n" +
33-
"- Elle permet de se retirer d'une organisation",
34-
],
35-
},
36-
},
379
{
3810
method: 'POST',
3911
path: '/api/memberships/{id}/disable',

api/src/team/application/membership/membership.route.js

+27
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,33 @@ export const membershipRoutes = [
3535
tags: ['api', 'team', 'memberships'],
3636
},
3737
},
38+
{
39+
method: 'POST',
40+
path: '/api/memberships/me/disable',
41+
config: {
42+
pre: [
43+
{
44+
method: securityPreHandlers.checkUserIsAdminInOrganization,
45+
assign: 'isAdminInOrganization',
46+
},
47+
{
48+
method: securityPreHandlers.checkUserCanDisableHisOrganizationMembership,
49+
assign: 'canDisableHisOrganizationMembership',
50+
},
51+
],
52+
validate: {
53+
payload: Joi.object({
54+
organizationId: identifiersType.organizationId,
55+
}),
56+
},
57+
handler: (request, h) => membershipController.disableOwnOrganizationMembership(request, h),
58+
tags: ['api'],
59+
notes: [
60+
"- **Cette route est restreinte aux utilisateurs authentifiés en tant qu'administrateur de l'organisation\n" +
61+
"- Elle permet de se retirer d'une organisation",
62+
],
63+
},
64+
},
3865
{
3966
method: 'GET',
4067
path: '/api/organizations/{id}/memberships',

api/tests/team/acceptance/application/membership/membership.route.test.js

+37
Original file line numberDiff line numberDiff line change
@@ -278,4 +278,41 @@ describe('Acceptance | Team | Application | Route | membership', function () {
278278
});
279279
});
280280
});
281+
282+
describe('POST /api/memberships/me/disable', function () {
283+
context('when user is one of the admins of the organization', function () {
284+
it('disables user membership and returns a 204', async function () {
285+
// given
286+
const organizationId = databaseBuilder.factory.buildOrganization().id;
287+
const organizationAdminUserId = databaseBuilder.factory.buildUser().id;
288+
databaseBuilder.factory.buildMembership({
289+
userId: organizationAdminUserId,
290+
organizationId,
291+
organizationRole: Membership.roles.ADMIN,
292+
});
293+
databaseBuilder.factory.buildMembership({
294+
userId: databaseBuilder.factory.buildUser().id,
295+
organizationId,
296+
organizationRole: Membership.roles.ADMIN,
297+
});
298+
299+
await databaseBuilder.commit();
300+
301+
const options = {
302+
method: 'POST',
303+
url: '/api/memberships/me/disable',
304+
payload: {
305+
organizationId,
306+
},
307+
headers: generateAuthenticatedUserRequestHeaders({ userId: organizationAdminUserId }),
308+
};
309+
310+
// when
311+
const response = await server.inject(options);
312+
313+
// then
314+
expect(response.statusCode).to.equal(204);
315+
});
316+
});
317+
});
281318
});

0 commit comments

Comments
 (0)