From bc19aba419cb106aa13b5801155b41e3f6890f9c Mon Sep 17 00:00:00 2001 From: Lucas Charrier Date: Thu, 11 Jan 2024 11:32:20 +0100 Subject: [PATCH 1/3] fix: fix getUser endpoint in dev --- src/config/email.config.ts | 2 +- src/controllers/communityController.ts | 51 ++++++++++++++++++-------- 2 files changed, 36 insertions(+), 17 deletions(-) diff --git a/src/config/email.config.ts b/src/config/email.config.ts index 7186c42d3..a6c54e15f 100644 --- a/src/config/email.config.ts +++ b/src/config/email.config.ts @@ -113,7 +113,7 @@ const { SIB_APIKEY_PRIVATE, } = EMAIL_CONFIG; -if (process.env.NODE_ENV !== 'test') { +if (process.env.NODE_ENV === 'prod') { try { const sendInBlue = makeSendinblue({ MAIL_SENDER, diff --git a/src/controllers/communityController.ts b/src/controllers/communityController.ts index 66405b264..30c55dd24 100644 --- a/src/controllers/communityController.ts +++ b/src/controllers/communityController.ts @@ -1,3 +1,5 @@ +import * as Sentry from '@sentry/node'; + import config from '../config'; import BetaGouv from '../betagouv'; import * as utils from './utils'; @@ -8,6 +10,7 @@ import betagouv from '../betagouv'; import { EMAIL_STATUS_READABLE_FORMAT } from '@/models/misc'; import { MattermostUser, getUserByEmail, searchUsers } from '@/lib/mattermost'; import { getContactInfo } from '@/config/email.config'; +import { DBUser } from '@/models/dbUser'; export async function getCommunity(req, res) { getCommunityPageData( @@ -148,6 +151,29 @@ export async function getUser(req, res) { ); } +const getMattermostUserInfo = async (dbUser) => { + let mattermostUser, mattermostUserInTeamAndActive; + try { + mattermostUser = dbUser?.primary_email + ? await getUserByEmail(dbUser.primary_email).catch((e) => null) + : null; + [mattermostUserInTeamAndActive] = dbUser?.primary_email + ? await searchUsers({ + term: dbUser.primary_email, + team_id: config.mattermostTeamId, + allow_inactive: false, + }).catch((e) => []) + : []; + } catch (e) { + Sentry.captureException(e); + } + + return { + mattermostUser, + mattermostUserInTeamAndActive, + }; +}; + async function getUserPageData(req, res, onSuccess, onError) { const { username } = req.params; const isCurrentUser = req.auth.id === username; @@ -171,31 +197,24 @@ async function getUserPageData(req, res, onSuccess, onError) { .where({ username }); const marrainageState = marrainageStateResponse[0]; - const dbUser = await knex('users').where({ username }).first(); + const dbUser: DBUser | undefined = await knex('users') + .where({ username }) + .first(); const secondaryEmail = dbUser ? dbUser.secondary_email : ''; let availableEmailPros = []; if (config.ESPACE_MEMBRE_ADMIN.includes(req.auth.id)) { availableEmailPros = await betagouv.getAvailableProEmailInfos(); } - let mattermostUser: MattermostUser = dbUser?.primary_email - ? await getUserByEmail(dbUser.primary_email).catch((e) => null) - : null; - let [mattermostUserInTeamAndActive]: MattermostUser[] = - dbUser?.primary_email - ? await searchUsers({ - term: dbUser.primary_email, - team_id: config.mattermostTeamId, - allow_inactive: false, - }).catch((e) => []) - : []; + let { mattermostUser, mattermostUserInTeamAndActive } = + await getMattermostUserInfo(dbUser); let emailServiceInfo = {}; - if (dbUser.primary_email) { - emailServiceInfo['primary_email'] = await getContactInfo({ + if (dbUser?.primary_email) { + emailServiceInfo['primaryEmail'] = await getContactInfo({ email: dbUser.primary_email, }); } - if (dbUser.secondary_email) { - emailServiceInfo['secondary_email'] = await getContactInfo({ + if (dbUser?.secondary_email) { + emailServiceInfo['secondaryEmail'] = await getContactInfo({ email: dbUser.secondary_email, }); } From e959280fd84150790e7c09e94f98982c444c8128 Mon Sep 17 00:00:00 2001 From: Lucas Charrier Date: Thu, 11 Jan 2024 15:12:24 +0100 Subject: [PATCH 2/3] build: add type MattermostUser for variable mattermostUser --- src/controllers/communityController.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/communityController.ts b/src/controllers/communityController.ts index 30c55dd24..c8eaf6ef4 100644 --- a/src/controllers/communityController.ts +++ b/src/controllers/communityController.ts @@ -152,7 +152,7 @@ export async function getUser(req, res) { } const getMattermostUserInfo = async (dbUser) => { - let mattermostUser, mattermostUserInTeamAndActive; + let mattermostUser: MattermostUser, mattermostUserInTeamAndActive: boolean; try { mattermostUser = dbUser?.primary_email ? await getUserByEmail(dbUser.primary_email).catch((e) => null) From 232fb8bf79697a868071f2cc2cdd80c76d8a918d Mon Sep 17 00:00:00 2001 From: Lucas Charrier Date: Mon, 15 Jan 2024 10:20:52 +0100 Subject: [PATCH 3/3] test(test-community): check that primaryEmail exists instead of primary_email --- tests/test-community.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tests/test-community.ts b/tests/test-community.ts index a3b0345d7..1d60dfd6d 100644 --- a/tests/test-community.ts +++ b/tests/test-community.ts @@ -226,9 +226,8 @@ describe('Community', () => { }); it('should have information about user email in email service', async () => { - const res = await chai.request(app).get('/api/community/membre.expire'); - console.log(res.body.emailServiceInfo); - res.body.emailServiceInfo['primary_email'].should.be.a('object'); + const res = await chai.request(app).get('/api/community/membre.actif'); + res.body.emailServiceInfo['primaryEmail'].should.be.a('object'); }); }); });