Skip to content

Commit a353f29

Browse files
xav-carfrinyvonnick
andcommitted
feat(api): add api to retrieve campaign skill
Co-authored-by: Yvonnick Frin <yvonnick.frin@pix.fr> Co-authored-by: Xavier Carron <xavier.carron@pix.fr>
1 parent 4bf0773 commit a353f29

File tree

4 files changed

+72
-6
lines changed

4 files changed

+72
-6
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export class TargetProfileSkill {
2+
constructor({ id, level }) {
3+
this.id = id;
4+
this.level = level;
5+
}
6+
}

api/src/prescription/target-profile/application/api/target-profile-api.js

+14
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { usecases } from '../../domain/usecases/index.js';
22
import { TargetProfile } from './TargetProfile.js';
3+
import { TargetProfileSkill } from './TargetProfileSkill.js';
34

45
/**
56
* @module TargetProfileApi
@@ -30,3 +31,16 @@ export const getById = async (id) => {
3031

3132
return new TargetProfile(targetProfileForAdmin);
3233
};
34+
35+
/**
36+
* @function
37+
* @name findSkillByTargetProfileIds
38+
*
39+
* @param {Array<number>} targetProfilsIds
40+
* @returns {Promise<<Array<TargetProfileSkill>>}
41+
*/
42+
export const findSkillsByTargetProfileIds = async (targetProfileIds) => {
43+
const skillsData = await usecases.findSkillsByTargetProfileIds({ targetProfileIds });
44+
45+
return skillsData.map((skill) => new TargetProfileSkill(skill));
46+
};

api/tests/prescription/target-profile/acceptance/application/api/target-profile-api_test.js

+19-6
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,26 @@ import * as targetProfileApi from '../../../../../../src/prescription/target-pro
22
import { databaseBuilder, expect } from '../../../../../test-helper.js';
33

44
describe('Acceptance | Application | target-profile-api', function () {
5-
it('should not fail', async function () {
6-
const organizationId = databaseBuilder.factory.buildOrganization().id;
7-
databaseBuilder.factory.buildTargetProfile({ ownerOrganizationId: organizationId });
5+
describe('#getByOrganizationId', function () {
6+
it('should not fail', async function () {
7+
const organizationId = databaseBuilder.factory.buildOrganization().id;
8+
databaseBuilder.factory.buildTargetProfile({ ownerOrganizationId: organizationId });
89

9-
await databaseBuilder.commit();
10+
await databaseBuilder.commit();
1011

11-
const result = await targetProfileApi.getByOrganizationId(organizationId);
12-
expect(result).to.be.ok;
12+
const result = await targetProfileApi.getByOrganizationId(organizationId);
13+
expect(result).to.be.ok;
14+
});
15+
});
16+
17+
describe('#findSkillsByTargetProfileIds', function () {
18+
it('should not fail', async function () {
19+
const targetProfileId = databaseBuilder.factory.buildTargetProfile().id;
20+
21+
await databaseBuilder.commit();
22+
23+
const result = await targetProfileApi.findSkillsByTargetProfileIds([targetProfileId]);
24+
expect(result).to.be.ok;
25+
});
1326
});
1427
});

api/tests/prescription/target-profile/unit/application/api/target-profile-api_test.js

+33
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import * as targetProfileApi from '../../../../../../src/prescription/target-profile/application/api/target-profile-api.js';
22
import { TargetProfile } from '../../../../../../src/prescription/target-profile/application/api/TargetProfile.js';
3+
import { TargetProfileSkill } from '../../../../../../src/prescription/target-profile/application/api/TargetProfileSkill.js';
34
import { TargetProfileForSpecifier } from '../../../../../../src/prescription/target-profile/domain/read-models/TargetProfileForSpecifier.js';
45
import { usecases } from '../../../../../../src/prescription/target-profile/domain/usecases/index.js';
56
import { catchErr, expect, sinon } from '../../../../../test-helper.js';
67
import { domainBuilder } from '../../../../../tooling/domain-builder/domain-builder.js';
8+
import { buildSkill } from '../../../../../tooling/learning-content-builder/build-skill.js';
79

810
describe('Unit | API | TargetProfile', function () {
911
describe('#getById', function () {
@@ -85,4 +87,35 @@ describe('Unit | API | TargetProfile', function () {
8587
expect(result).to.have.lengthOf(0);
8688
});
8789
});
90+
91+
describe('#findSkillsByTargetProfileIds', function () {
92+
it('should return empty array if no skill found', async function () {
93+
const findSkillsByTargetProfileIdsStub = sinon.stub(usecases, 'findSkillsByTargetProfileIds');
94+
findSkillsByTargetProfileIdsStub.rejects();
95+
findSkillsByTargetProfileIdsStub.withArgs({ targetProfileIds: ['targetProfileId'] }).resolves([]);
96+
97+
// when
98+
const result = await targetProfileApi.findSkillsByTargetProfileIds(['targetProfileId']);
99+
100+
// then
101+
expect(result).to.have.lengthOf(0);
102+
});
103+
104+
it('should return an array of TargetProfileSkill', async function () {
105+
const findSkillsByTargetProfileIdsStub = sinon.stub(usecases, 'findSkillsByTargetProfileIds');
106+
findSkillsByTargetProfileIdsStub.rejects();
107+
findSkillsByTargetProfileIdsStub
108+
.withArgs({ targetProfileIds: ['targetProfileId'] })
109+
.resolves([buildSkill({ id: 'monSkillId', level: 18 })]);
110+
111+
// when
112+
const result = await targetProfileApi.findSkillsByTargetProfileIds(['targetProfileId']);
113+
114+
// then
115+
expect(result).to.have.lengthOf(1);
116+
expect(result[0]).instanceOf(TargetProfileSkill);
117+
expect(result[0].id).equals('monSkillId');
118+
expect(result[0].level).equals(18);
119+
});
120+
});
88121
});

0 commit comments

Comments
 (0)