Skip to content

Commit

Permalink
Merge pull request #1175 from sophiemoustard/COM-1674
Browse files Browse the repository at this point in the history
Com 1674
  • Loading branch information
cmolle committed Dec 8, 2020
2 parents ca7cbc7 + 293c21d commit dd475a0
Show file tree
Hide file tree
Showing 11 changed files with 17 additions and 353 deletions.
15 changes: 0 additions & 15 deletions src/controllers/activityController.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,23 +41,8 @@ const addCard = async (req) => {
}
};

const getActivityHistory = async (req) => {
try {
const activityHistory = await ActivityHelper.getActivityHistory(req.params._id, req.auth.credentials._id);

return {
message: translate[language].activityHistoryFound,
data: { activityHistory },
};
} catch (e) {
req.log('error', e);
return Boom.isBoom(e) ? e : Boom.badImplementation(e);
}
};

module.exports = {
getById,
update,
addCard,
getActivityHistory,
};
15 changes: 0 additions & 15 deletions src/controllers/programController.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,20 +60,6 @@ const getById = async (req) => {
}
};

const getProgramForUser = async (req) => {
try {
const program = await ProgramHelper.getProgramForUser(req.params._id, req.auth.credentials);

return {
message: translate[language].programFound,
data: { program },
};
} catch (e) {
req.log('error', e);
return Boom.isBoom(e) ? e : Boom.badImplementation(e);
}
};

const update = async (req) => {
try {
await ProgramHelper.updateProgram(req.params._id, req.payload);
Expand Down Expand Up @@ -147,7 +133,6 @@ module.exports = {
listELearning,
create,
getById,
getProgramForUser,
update,
addSubProgram,
uploadImage,
Expand Down
11 changes: 0 additions & 11 deletions src/helpers/activities.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ const { ObjectID } = require('mongodb');
const Activity = require('../models/Activity');
const Step = require('../models/Step');
const Card = require('../models/Card');
const ActivityHistory = require('../models/ActivityHistory');

exports.getActivity = async activityId => Activity.findOne({ _id: activityId })
.populate({ path: 'cards', select: '-__v -createdAt -updatedAt' })
Expand Down Expand Up @@ -33,13 +32,3 @@ exports.addActivity = async (stepId, payload) => {

exports.detachActivity = async (stepId, activityId) =>
Step.updateOne({ _id: stepId }, { $pull: { activities: activityId } });

exports.getActivityHistory = async (activityId, userId) => {
const activityHistories = await ActivityHistory
.find({ activity: activityId, user: userId })
.sort([['date', -1]])
.limit(1)
.lean();

return activityHistories[0];
};
42 changes: 12 additions & 30 deletions src/helpers/programs.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,18 @@ exports.listELearning = async (credentials) => {
path: 'subPrograms',
select: 'name',
match: { _id: { $in: subPrograms } },
populate: {
path: 'courses',
select: '_id trainees',
match: { format: STRICTLY_E_LEARNING },
},
populate: [
{ path: 'courses', select: '_id trainees', match: { format: STRICTLY_E_LEARNING } },
{
path: 'steps',
select: 'activities',
populate: {
path: 'activities',
select: 'activityHistories',
populate: { path: 'activityHistories', match: { user: credentials._id } },
},
},
],
})
.lean();
};
Expand All @@ -50,31 +57,6 @@ exports.getProgram = async (programId) => {
};
};

exports.getProgramForUser = async (programId, credentials) => {
const eLearningCourse = await Course.find({ format: STRICTLY_E_LEARNING }).lean();
const subPrograms = eLearningCourse.map(course => course.subProgram);

return Program.findOne({ _id: programId })
.populate({
path: 'subPrograms',
select: 'name',
match: { _id: { $in: subPrograms } },
populate: [
{ path: 'courses', select: '_id trainees', match: { format: STRICTLY_E_LEARNING } },
{
path: 'steps',
select: 'activities',
populate: {
path: 'activities',
select: 'activityHistories',
populate: { path: 'activityHistories', match: { user: credentials._id } },
},
},
],
})
.lean();
};

exports.updateProgram = async (programId, payload) => Program.updateOne({ _id: programId }, { $set: payload });

exports.uploadImage = async (programId, payload) => {
Expand Down
17 changes: 2 additions & 15 deletions src/routes/activities.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

const Joi = require('joi');
Joi.objectId = require('joi-objectid')(Joi);
const { authorizeCardAdd, authorizeActivityUpdate, authorizeGetActivityHistory } = require('./preHandlers/activities');
const { getById, update, addCard, getActivityHistory } = require('../controllers/activityController');
const { authorizeCardAdd, authorizeActivityUpdate } = require('./preHandlers/activities');
const { getById, update, addCard } = require('../controllers/activityController');
const { CARD_TEMPLATES } = require('../models/Card');

exports.plugin = {
Expand Down Expand Up @@ -52,18 +52,5 @@ exports.plugin = {
},
handler: addCard,
});

server.route({
method: 'GET',
path: '/{_id}/activityhistory',
options: {
validate: {
params: Joi.object({ _id: Joi.objectId().required() }),
},
auth: { mode: 'required' },
pre: [{ method: authorizeGetActivityHistory }],
},
handler: getActivityHistory,
});
},
};
11 changes: 0 additions & 11 deletions src/routes/preHandlers/activities.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
const Boom = require('@hapi/boom');
const Activity = require('../../models/Activity');
const { PUBLISHED } = require('../../helpers/constants');
const ActivityHistory = require('../../models/ActivityHistory');

exports.authorizeActivityUpdate = async (req) => {
const activity = await Activity.findOne({ _id: req.params._id }).lean();
Expand All @@ -26,13 +25,3 @@ exports.authorizeCardAdd = async (req) => {

return null;
};

exports.authorizeGetActivityHistory = async (req) => {
const nbActivityHistories = await ActivityHistory.countDocuments({
activity: req.params._id,
user: req.auth.credentials._id,
}).lean();
if (nbActivityHistories === 0) throw Boom.notFound();

return null;
};
14 changes: 0 additions & 14 deletions src/routes/programs.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ const {
listELearning,
create,
getById,
getProgramForUser,
update,
uploadImage,
addSubProgram,
Expand Down Expand Up @@ -68,19 +67,6 @@ exports.plugin = {
handler: getById,
});

server.route({
method: 'GET',
path: '/{_id}/user',
options: {
validate: {
params: Joi.object({ _id: Joi.objectId().required() }),
},
auth: { mode: 'required' },
pre: [{ method: checkProgramExists }],
},
handler: getProgramForUser,
});

server.route({
method: 'PUT',
path: '/{_id}',
Expand Down
77 changes: 0 additions & 77 deletions tests/integration/activities.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@ const {
stepsList,
subProgramsList,
programsList,
activityHistoriesList,
cardsList,
} = require('./seed/activitiesSeed');
const { getToken } = require('./seed/authenticationSeed');
const { TITLE_TEXT_MEDIA } = require('../../src/helpers/constants');
Expand Down Expand Up @@ -345,78 +343,3 @@ describe('ACTIVITIES ROUTES - POST /activities/{_id}/card', () => {
});
});
});

describe('ACTIVITY ROUTES - GET /activities/{_id}/activityhistory', () => {
let authToken = null;
beforeEach(populateDB);
const activityId = activityHistoriesList[0].activity._id;

describe('VENDOR_ADMIN', () => {
beforeEach(async () => {
authToken = await getToken('vendor_admin');
});

it('should get activityhistory', async () => {
const response = await app.inject({
method: 'GET',
url: `/activities/${activityId.toHexString()}/activityhistory`,
headers: { 'x-access-token': authToken },
});

expect(response.statusCode).toBe(200);
expect(response.result.data.activityHistory).toEqual(expect.objectContaining({
_id: expect.any(ObjectID),
user: activityHistoriesList[6].user,
activity: activityHistoriesList[6].activity._id,
date: expect.any(Date),
questionnaireAnswersList: [
{ _id: expect.any(ObjectID), card: cardsList[0]._id, answerList: ['skusku'] },
],
}));
});

it('should return a 404 if no activityhistory', async () => {
const response = await app.inject({
method: 'GET',
url: `/activities/${new ObjectID()}/activityhistory`,
headers: { 'x-access-token': authToken },
});

expect(response.statusCode).toBe(404);
});
});

it('should return 401 if user is not authenticate', async () => {
const response = await app.inject({
method: 'GET',
url: `/activities/${activityId.toHexString()}/activityhistory`,
});

expect(response.statusCode).toBe(401);
});

describe('Other roles', () => {
const roles = [
{ name: 'helper', expectedCode: 200 },
{ name: 'auxiliary', expectedCode: 200 },
{ name: 'auxiliary_without_company', expectedCode: 200 },
{ name: 'coach', expectedCode: 200 },
{ name: 'client_admin', expectedCode: 200 },
{ name: 'training_organisation_manager', expectedCode: 200 },
{ name: 'trainer', expectedCode: 200 },
];

roles.forEach((role) => {
it(`should return ${role.expectedCode} as user is ${role.name}`, async () => {
authToken = await getToken(role.name);
const response = await app.inject({
method: 'GET',
url: `/activities/${activityId.toHexString()}/activityhistory`,
headers: { 'x-access-token': authToken },
});

expect(response.statusCode).toBe(role.expectedCode);
});
});
});
});
84 changes: 0 additions & 84 deletions tests/integration/programs.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,6 @@ const GCloudStorageHelper = require('../../src/helpers/gCloudStorage');
const {
populateDB,
programsList,
subProgramsList,
course,
activitiesList,
activityHistoriesList,
categoriesList,
} = require('./seed/programsSeed');
const { getToken } = require('./seed/authenticationSeed');
Expand Down Expand Up @@ -196,86 +192,6 @@ describe('PROGRAMS ROUTES - GET /programs/e-learning', () => {
});
});

describe('PROGRAMS ROUTES - GET /programs/{_id}/user', () => {
let authToken = null;
beforeEach(populateDB);

describe('VENDOR_ADMIN', () => {
beforeEach(async () => {
authToken = await getToken('vendor_admin');
});

it('should get a program', async () => {
const response = await app.inject({
method: 'GET',
url: `/programs/${programsList[1]._id}/user`,
headers: { 'x-access-token': authToken },
});

expect(response.statusCode).toBe(200);
expect(response.result.data.program).toMatchObject({
_id: programsList[1]._id,
name: 'training program',
subPrograms: [{
_id: subProgramsList[2]._id,
name: 'c\'est un sous-programme elearning',
courses: [{
_id: course._id,
trainees: course.trainees,
subProgram: subProgramsList[2]._id,
}],
steps: [{ activities: [{ _id: activitiesList[0]._id, activityHistories: [activityHistoriesList[0]] }] }],
}],
});
});

it('should return 404 if program does not exists', async () => {
const response = await app.inject({
method: 'GET',
url: `/programs/${new ObjectID()}/user`,
headers: { 'x-access-token': authToken },
});

expect(response.statusCode).toBe(404);
});

it('should return 401 if user is not connected', async () => {
const response = await app.inject({
method: 'GET',
url: `/programs/${programsList[1]._id}/user`,
headers: { 'x-access-token': '' },
});

expect(response.statusCode).toBe(401);
});
});

describe('Other roles', () => {
const roles = [
{ name: 'helper', expectedCode: 200 },
{ name: 'auxiliary', expectedCode: 200 },
{ name: 'auxiliary_without_company', expectedCode: 200 },
{ name: 'coach', expectedCode: 200 },
{ name: 'client_admin', expectedCode: 200 },
{ name: 'training_organisation_manager', expectedCode: 200 },
{ name: 'trainer', expectedCode: 200 },
];

roles.forEach((role) => {
it(`should return ${role.expectedCode} as user is ${role.name}`, async () => {
authToken = await getToken(role.name);
const response = await app.inject({
method: 'GET',
url: '/programs/e-learning',
headers: { 'x-access-token': authToken },
});

expect(response.statusCode).toBe(role.expectedCode);
});
});
});
});

describe('PROGRAMS ROUTES - GET /programs/{_id}', () => {
let authToken = null;
beforeEach(populateDB);
Expand Down

0 comments on commit dd475a0

Please sign in to comment.