diff --git a/services/web/test/acceptance/src/UserEmailsTests.js b/services/web/test/acceptance/src/UserEmailsTests.js index c9cceacb24..806907a5cb 100644 --- a/services/web/test/acceptance/src/UserEmailsTests.js +++ b/services/web/test/acceptance/src/UserEmailsTests.js @@ -1006,14 +1006,6 @@ describe('UserEmails', function () { describe('notification period', function () { let defaultEmail, userHelper, email1, email2, email3 const maxConfirmationMonths = 12 - const lastDayToReconfirm = moment() - .subtract(maxConfirmationMonths, 'months') - .toDate() - const oneDayBeforeLastDayToReconfirm = moment(lastDayToReconfirm) - .add(1, 'day') - .toDate() - const daysToBackdate = moment().diff(oneDayBeforeLastDayToReconfirm, 'day') - const daysToBackdateForAfterDate = daysToBackdate + 1 beforeEach(async function () { if (!Features.hasFeature('affiliations')) { @@ -1047,12 +1039,20 @@ describe('UserEmails', function () { await userHelper.addEmailAndConfirm(userId, email1) await userHelper.addEmailAndConfirm(userId, email2) await userHelper.addEmailAndConfirm(userId, email3) - await userHelper.backdateConfirmation(userId, email1, daysToBackdate) - await userHelper.backdateConfirmation(userId, email2, daysToBackdate) - await userHelper.backdateConfirmation( + await userHelper.changeConfirmedToNotificationPeriod( + userId, + email1, + maxConfirmationMonths + ) + await userHelper.changeConfirmedToNotificationPeriod( + userId, + email2, + maxConfirmationMonths + ) + await userHelper.changeConfirmedToPastReconfirmation( userId, email3, - daysToBackdateForAfterDate + maxConfirmationMonths ) }) @@ -1096,17 +1096,17 @@ describe('UserEmails', function () { .add(14, 'days') .toDate() const backdatedDays = moment().diff(dateInPeriodButNotExpired, 'days') - await userHelper.backdateConfirmation( + await userHelper.changeConfirmationDate( userHelper.user._id, email1, backdatedDays ) - await userHelper.backdateConfirmation( + await userHelper.changeConfirmationDate( userHelper.user._id, email2, backdatedDays ) - await userHelper.backdateConfirmation( + await userHelper.changeConfirmationDate( userHelper.user._id, email3, backdatedDays diff --git a/services/web/test/acceptance/src/helpers/UserHelper.js b/services/web/test/acceptance/src/helpers/UserHelper.js index 9e2c4e5baf..a7b3e06f2b 100644 --- a/services/web/test/acceptance/src/helpers/UserHelper.js +++ b/services/web/test/acceptance/src/helpers/UserHelper.js @@ -324,21 +324,59 @@ class UserHelper { await this.confirmEmail(userId, email) } - async backdateConfirmation(userId, email, days) { - const confirmedDate = moment().subtract(days, 'days').toDate() + async changeConfirmationDate(userId, email, date) { const query = { _id: userId, 'emails.email': email, } const update = { $set: { - 'emails.$.confirmedAt': confirmedDate, - 'emails.$.reconfirmedAt': confirmedDate, + 'emails.$.confirmedAt': date, + 'emails.$.reconfirmedAt': date, }, } await UserUpdater.promises.updateUser(query, update) } + async changeConfirmedToNotificationPeriod( + userId, + email, + maxConfirmationMonths + ) { + // set a user's confirmation date so that + // it is within the notification period to reconfirm + // but not older than the last day to reconfirm + const notificationDays = Settings.reconfirmNotificationDays + if (!notificationDays) return + + const middleOfNotificationPeriod = Math.ceil(notificationDays / 2) + // use the middle of the notification rather than the start or end due to + // variations in days in months. + + const lastDayToReconfirm = moment().subtract( + maxConfirmationMonths, + 'months' + ) + const notificationsStart = lastDayToReconfirm + .add(middleOfNotificationPeriod, 'days') + .toDate() + await this.changeConfirmationDate(userId, email, notificationsStart) + } + + async changeConfirmedToPastReconfirmation( + userId, + email, + maxConfirmationMonths + ) { + // set a user's confirmation date so that they are past the reconfirmation window + const date = moment() + .subtract(maxConfirmationMonths, 'months') + .subtract(1, 'week') + .toDate() + + await this.changeConfirmationDate(userId, email, date) + } + async confirmEmail(userId, email) { let response // UserHelper.createUser does not create a confirmation token