diff --git a/services/web/app/src/Features/User/UserGetter.js b/services/web/app/src/Features/User/UserGetter.js index 1c2d98f7bd..798aa7ba80 100644 --- a/services/web/app/src/Features/User/UserGetter.js +++ b/services/web/app/src/Features/User/UserGetter.js @@ -42,7 +42,10 @@ function _pastReconfirmDate(lastDayToReconfirm) { return moment(lastDayToReconfirm).isBefore() } -function _emailInReconfirmNotificationPeriod(lastDayToReconfirm) { +function _emailInReconfirmNotificationPeriod( + lastDayToReconfirm, + cachedPastReconfirmDate +) { const globalReconfirmPeriod = settings.reconfirmNotificationDays if (!globalReconfirmPeriod || !lastDayToReconfirm) return false @@ -52,7 +55,15 @@ function _emailInReconfirmNotificationPeriod(lastDayToReconfirm) { 'days' ) - return moment().isAfter(notificationStarts) + let inNotificationPeriod = moment().isAfter(notificationStarts) + + if (!inNotificationPeriod && cachedPastReconfirmDate) { + // show notification if cached date is past, + // even if non-cached date is not past + inNotificationPeriod = true + } + + return inNotificationPeriod } async function getUserFullEmails(userId) { @@ -224,18 +235,21 @@ const decorateFullEmails = ( role, department, licence, + past_reconfirm_date: cachedPastReconfirmDate, portal, } = affiliation const lastDayToReconfirm = _lastDayToReconfirm(emailData, institution) const pastReconfirmDate = _pastReconfirmDate(lastDayToReconfirm) const inReconfirmNotificationPeriod = _emailInReconfirmNotificationPeriod( - lastDayToReconfirm + lastDayToReconfirm, + cachedPastReconfirmDate ) emailData.affiliation = { institution, inferred, inReconfirmNotificationPeriod, lastDayToReconfirm, + cachedPastReconfirmDate, pastReconfirmDate, role, department, diff --git a/services/web/test/unit/src/User/UserGetterTests.js b/services/web/test/unit/src/User/UserGetterTests.js index fffcc419fe..9015388992 100644 --- a/services/web/test/unit/src/User/UserGetterTests.js +++ b/services/web/test/unit/src/User/UserGetterTests.js @@ -181,6 +181,7 @@ describe('UserGetter', function () { isUniversity: true, confirmed: true, }, + past_reconfirm_date: false, portal: undefined, }, ] @@ -204,6 +205,7 @@ describe('UserGetter', function () { lastDayToReconfirm: undefined, licence: affiliationsData[0].licence, inReconfirmNotificationPeriod: false, + cachedPastReconfirmDate: false, pastReconfirmDate: false, portal: undefined, }, @@ -796,6 +798,42 @@ describe('UserGetter', function () { ) }) }) + + it('should flag to show notification if v1 shows as past reconfirmation but v2 does not', function (done) { + const email = 'abc123@test.com' + const confirmedAt = new Date() + const affiliationsData = [ + { + email, + licence: 'free', + institution: institutionNonSSO, + past_reconfirm_date: true, + }, + ] + const user = { + _id: '12390i', + email, + emails: [ + { + email, + confirmedAt, + default: true, + }, + ], + } + this.getUserAffiliations.resolves(affiliationsData) + this.UserGetter.promises.getUser = sinon.stub().resolves(user) + this.UserGetter.getUserFullEmails( + this.fakeUser._id, + (error, fullEmails) => { + expect(error).to.not.exist + expect( + fullEmails[0].affiliation.inReconfirmNotificationPeriod + ).to.equal(true) + done() + } + ) + }) }) })