From 72d79bde791b5c89d1042ad800238dce5b740d7a Mon Sep 17 00:00:00 2001 From: eisbilir Date: Thu, 29 Jul 2021 15:59:23 +0300 Subject: [PATCH 1/2] update: phase update will return members --- src/routes/phases/update.js | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/routes/phases/update.js b/src/routes/phases/update.js index 9f4c417a..698f2701 100644 --- a/src/routes/phases/update.js +++ b/src/routes/phases/update.js @@ -26,7 +26,15 @@ const updateProjectPhaseValidation = { order: Joi.number().integer().optional(), }).required(), }; - +const populateMemberDetails = async (phase, req) => { + const members = _.map(phase.members, member => _.pick(member, 'userId')); + try { + const detailedMembers = await util.getObjectsWithMemberDetails(members, ['userId', 'handle', 'photoURL'], req); + return _.assign(phase, { members: detailedMembers }); + } catch (err) { + return _.assign(phase, { members }); + } +}; module.exports = [ // validate request payload @@ -102,8 +110,14 @@ module.exports = [ updatedValue, previousValue, ROUTES.PHASES.UPDATE); - - res.json(updated); + return models.ProjectPhase.findOne({ + where: { id: phaseId, projectId }, + include: [{ + model: models.ProjectPhaseMember, + as: 'members', + }], + }).then(phaseWithMembers => populateMemberDetails(phaseWithMembers.toJSON(), req) + .then(result => res.json(result))); }) .catch(err => next(err)); }, From fc7c959b37fcb903871e025328ff19d7882a2b59 Mon Sep 17 00:00:00 2001 From: eisbilir Date: Thu, 29 Jul 2021 16:46:36 +0300 Subject: [PATCH 2/2] update: use 100 for maxPhaseProductCount --- config/default.json | 2 +- src/routes/projects/create.spec.js | 32 ++++++++++++++---------------- 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/config/default.json b/config/default.json index 9cf176ae..3fdbaa81 100644 --- a/config/default.json +++ b/config/default.json @@ -45,7 +45,7 @@ "messageApiUrl": "http://api.topcoder-dev.com/v5", "busApiToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoicHJvamVjdC1zZXJ2aWNlIiwiaWF0IjoxNTEyNzQ3MDgyLCJleHAiOjE1MjEzODcwODJ9.PHuNcFDaotGAL8RhQXQMdpL8yOKXxjB5DbBIodmt7RE", "HEALTH_CHECK_URL": "_health", - "maxPhaseProductCount": 1, + "maxPhaseProductCount": 100, "TOKEN_CACHE_TIME": "86000", "whitelistedOriginsForUserIdAuth": "[\"https:\/\/topcoder-newauth.auth0.com\/\",\"https:\/\/api.topcoder-dev.com\"]", "EMAIL_INVITE_FROM_NAME": "Topcoder", diff --git a/src/routes/projects/create.spec.js b/src/routes/projects/create.spec.js index 7dc8d551..d09acfcd 100644 --- a/src/routes/projects/create.spec.js +++ b/src/routes/projects/create.spec.js @@ -16,7 +16,8 @@ const should = chai.should(); const expect = chai.expect; describe('Project create', () => { - before((done) => { + before(function beforeHook(done) { + this.timeout(20000); testUtil.clearDb() .then(() => testUtil.clearES()) .then(() => models.ProjectType.bulkCreate([ @@ -76,8 +77,16 @@ describe('Project create', () => { updatedBy: 4, }, ])) - .then(() => models.ProjectTemplate.bulkCreate([ - { + .then(() => { + const exceededProducts = []; + for (let i = 1; i <= _.parseInt(config.get('maxPhaseProductCount')) + 1; i += 1) { + exceededProducts.push({ + id: i, + name: `product ${i}`, + productKey: `visual_design_prod${i}`, + }); + } + return models.ProjectTemplate.bulkCreate([{ id: 1, name: 'template 1', key: 'key 1', @@ -91,18 +100,7 @@ describe('Project create', () => { phase1: { name: 'phase 1', duration: 5, - products: [ - { - id: 21, - name: 'product 1', - productKey: 'visual_design_prod1', - }, - { - id: 22, - name: 'product 2', - productKey: 'visual_design_prod2', - }, - ], + products: exceededProducts, }, }, createdBy: 1, @@ -206,8 +204,8 @@ describe('Project create', () => { }, createdBy: 1, updatedBy: 2, - }, - ])) + }]); + }) .then(() => models.BuildingBlock.bulkCreate([ { id: 1,