Skip to content

Commit

Permalink
refactor(api): move cancel organization invitation function
Browse files Browse the repository at this point in the history
into src/team

Co-authored-by: Benjamin Petetot <benjamin.petetot@pix.fr>
  • Loading branch information
er-lim and bpetetot committed Jul 3, 2024
1 parent 1345016 commit b3c8b5e
Show file tree
Hide file tree
Showing 7 changed files with 46 additions and 44 deletions.
3 changes: 2 additions & 1 deletion api/lib/application/organizations/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ const Joi = BaseJoi.extend(JoiDate);

import { securityPreHandlers } from '../../../src/shared/application/security-pre-handlers.js';
import { identifiersType } from '../../../src/shared/domain/types/identifiers-type.js';
import { organizationInvitationController } from '../../../src/team/application/organization-invitations/organization-invitation.controller.js';
import { BadRequestError, PayloadTooLargeError, sendJsonApiError } from '../http-errors.js';
import { organizationController } from './organization-controller.js';

Expand Down Expand Up @@ -186,7 +187,7 @@ const register = async function (server) {
organizationInvitationId: identifiersType.organizationInvitationId,
}),
},
handler: organizationController.cancelOrganizationInvitation,
handler: organizationInvitationController.cancelOrganizationInvitation,
tags: ['api', 'admin', 'invitations', 'cancel'],
notes: [
"- **Cette route est restreinte aux utilisateurs authentifiés ayant les droits d'accès**\n" +
Expand Down
7 changes: 0 additions & 7 deletions api/lib/application/organizations/organization-controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -112,12 +112,6 @@ const resendInvitation = async function (request, h) {
return h.response(organizationInvitationSerializer.serialize(organizationInvitation));
};

const cancelOrganizationInvitation = async function (request, h) {
const organizationInvitationId = request.params.organizationInvitationId;
await usecases.cancelOrganizationInvitation({ organizationInvitationId });
return h.response().code(204);
};

const sendInvitationByLangAndRole = async function (request, h, dependencies = { organizationInvitationSerializer }) {
const organizationId = request.params.id;
const invitationInformation =
Expand Down Expand Up @@ -169,7 +163,6 @@ const findChildrenOrganizationsForAdmin = async function (

const organizationController = {
archiveOrganization,
cancelOrganizationInvitation,
create,
createInBatch,
findChildrenOrganizationsForAdmin,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,18 @@
import _ from 'lodash';

import { MissingQueryParamError } from '../../../../lib/application/http-errors.js';
import { usecases as libUsecases } from '../../../../lib/domain/usecases/index.js';
import * as requestResponseUtils from '../../../shared/infrastructure/utils/request-response-utils.js';
import { usecases } from '../../domain/usecases/index.js';
import { organizationInvitationSerializer as organizationInvitationSerializer } from '../../infrastructure/serializers/jsonapi/organization-invitation.serializer.js';
import { serializer as scoOrganizationInvitationSerializer } from '../../infrastructure/serializers/jsonapi/sco-organization-invitation.serializer.js';

const cancelOrganizationInvitation = async function (request, h) {
const organizationInvitationId = request.params.organizationInvitationId;
await libUsecases.cancelOrganizationInvitation({ organizationInvitationId });
return h.response().code(204);
};

/**
*
* @param request
Expand Down Expand Up @@ -55,6 +62,7 @@ const sendScoInvitation = async function (
};

export const organizationInvitationController = {
cancelOrganizationInvitation,
getOrganizationInvitation,
sendScoInvitation,
};
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import Joi from 'joi';

import { organizationController } from '../../../../lib/application/organizations/organization-controller.js';
import { securityPreHandlers } from '../../../shared/application/security-pre-handlers.js';
import { identifiersType } from '../../../shared/domain/types/identifiers-type.js';
import { organizationInvitationController } from './organization-invitation.controller.js';
Expand Down Expand Up @@ -66,7 +65,7 @@ export const organizationInvitationRoutes = [
organizationInvitationId: identifiersType.organizationInvitationId,
}),
},
handler: (request, h) => organizationController.cancelOrganizationInvitation(request, h),
handler: (request, h) => organizationInvitationController.cancelOrganizationInvitation(request, h),
tags: ['team', 'api', 'invitations', 'cancel'],
notes: [
"- **Cette route est restreinte aux utilisateurs authentifiés en tant qu'admin d'une organisation**\n" +
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import { MissingQueryParamError } from '../../../../../lib/application/http-errors.js';
import { usecases as libUsecases } from '../../../../../lib/domain/usecases/index.js';
import { organizationInvitationController } from '../../../../../src/team/application/organization-invitations/organization-invitation.controller.js';
import { OrganizationInvitation } from '../../../../../src/team/domain/models/OrganizationInvitation.js';
import { usecases } from '../../../../../src/team/domain/usecases/index.js';
import { catchErr, expect, hFake, sinon } from '../../../../../tests/test-helper.js';
import { catchErr, domainBuilder, expect, hFake, sinon } from '../../../../../tests/test-helper.js';

describe('Unit | Team | Application | Controller | organization-invitation', function () {
describe('#getOrganizationInvitation', function () {
Expand Down Expand Up @@ -46,4 +48,33 @@ describe('Unit | Team | Application | Controller | organization-invitation', fun
expect(errorCatched).to.be.instanceof(MissingQueryParamError);
});
});

describe('#cancelOrganizationInvitation', function () {
it('calls the use case to cancel invitation with organizationInvitationId', async function () {
//given
const organizationInvitationId = 123;

const request = {
auth: { credentials: { userId: 1 } },
params: { organizationInvitationId },
};
const cancelledOrganizationInvitation = domainBuilder.buildOrganizationInvitation({
id: organizationInvitationId,
status: OrganizationInvitation.StatusType.CANCELLED,
});

sinon
.stub(libUsecases, 'cancelOrganizationInvitation')
.withArgs({
organizationInvitationId: cancelledOrganizationInvitation.id,
})
.resolves(cancelledOrganizationInvitation);

// when
const response = await organizationInvitationController.cancelOrganizationInvitation(request, hFake);

// then
expect(response.statusCode).to.equal(204);
});
});
});
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { organizationController } from '../../../../../lib/application/organizations/organization-controller.js';
import { securityPreHandlers } from '../../../../../src/shared/application/security-pre-handlers.js';
import { organizationInvitationController } from '../../../../../src/team/application/organization-invitations/organization-invitation.controller.js';
import { teamRoutes } from '../../../../../src/team/application/routes.js';
Expand Down Expand Up @@ -44,7 +43,7 @@ describe('Unit | Team | Application | Route | organization-invitation', function
it('calls the cancel organization invitation controller', async function () {
// given
sinon
.stub(organizationController, 'cancelOrganizationInvitation')
.stub(organizationInvitationController, 'cancelOrganizationInvitation')
.callsFake((request, h) => h.response('ok').code(200));
sinon.stub(securityPreHandlers, 'checkUserIsAdminInOrganization').returns(true);

Expand All @@ -59,7 +58,7 @@ describe('Unit | Team | Application | Route | organization-invitation', function

// then
expect(securityPreHandlers.checkUserIsAdminInOrganization).to.have.be.called;
expect(organizationController.cancelOrganizationInvitation).to.have.been.calledOnce;
expect(organizationInvitationController.cancelOrganizationInvitation).to.have.been.calledOnce;
});
});
});
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { organizationController } from '../../../../lib/application/organizations/organization-controller.js';
import { Membership, Organization, OrganizationInvitation } from '../../../../lib/domain/models/index.js';
import { Membership, Organization } from '../../../../lib/domain/models/index.js';
import { usecases } from '../../../../lib/domain/usecases/index.js';
import { domainBuilder, expect, generateValidRequestAuthorizationHeader, hFake, sinon } from '../../../test-helper.js';

Expand Down Expand Up @@ -235,35 +235,6 @@ describe('Unit | Application | Organizations | organization-controller', functio
});
});

describe('#cancelOrganizationInvitation', function () {
it('should call the use case to cancel invitation with organizationInvitationId', async function () {
//given
const organizationInvitationId = 123;

const request = {
auth: { credentials: { userId: 1 } },
params: { organizationInvitationId },
};
const cancelledOrganizationInvitation = domainBuilder.buildOrganizationInvitation({
id: organizationInvitationId,
status: OrganizationInvitation.StatusType.CANCELLED,
});

sinon
.stub(usecases, 'cancelOrganizationInvitation')
.withArgs({
organizationInvitationId: cancelledOrganizationInvitation.id,
})
.resolves(cancelledOrganizationInvitation);

// when
const response = await organizationController.cancelOrganizationInvitation(request, hFake);

// then
expect(response.statusCode).to.equal(204);
});
});

describe('#sendInvitationByLangAndRole', function () {
it('should call the usecase to create invitation with organizationId, email, role and lang', async function () {
//given
Expand Down

0 comments on commit b3c8b5e

Please sign in to comment.