Merge pull request #23248 from overleaf/jdt-institutional-policies-include-past-affiliates

Policy checks apply for lapsed affiliates

GitOrigin-RevId: b4d42a2dc2d43b531886fb4eb8c4c6d990e324e7
This commit is contained in:
Jimmy Domagala-Tang
2025-02-06 12:26:39 -06:00
committed by Copybot
parent e43da5569c
commit a249c8e643
2 changed files with 47 additions and 8 deletions

View File

@@ -18,6 +18,19 @@ async function getCurrentAffiliations(userId) {
.map(emailData => emailData.affiliation)
}
async function getCurrentAndPastAffiliationIds(userId) {
let fullEmails = await UserGetter.promises.getUserFullEmails(userId)
// current are those confirmed and not with lapsed reconfirmations
fullEmails = fullEmails
.filter(
emailData =>
emailData.confirmedAt && emailData.affiliation?.institution?.confirmed
)
.map(emailData => emailData.affiliation.institution.id)
// remove dupes
return [...new Set(fullEmails)]
}
async function getCurrentInstitutionIds(userId) {
// current are those confirmed and not with lapsed reconfirmations
// only 1 record returned per current institutionId
@@ -81,6 +94,7 @@ InstitutionsGetter.promises = {
getCurrentAffiliations,
getCurrentInstitutionIds,
getCurrentInstitutionsWithLicence,
getCurrentAndPastAffiliationIds,
getManagedInstitutions: promisify(InstitutionsGetter.getManagedInstitutions),
}

View File

@@ -124,6 +124,15 @@ describe('InstitutionsGetter', function () {
},
},
]
this.fullEmailCollection = [
this.licencedAffiliation,
this.licencedAffiliation,
this.licencedAffiliationPastReconfirmation,
this.confirmedAffiliation,
this.confirmedAffiliationPastReconfirmation,
this.unconfirmedDomainLicensedAffiliation,
this.unconfirmedEmailLicensedAffiliation,
]
})
describe('getCurrentInstitutionIds', function () {
@@ -158,16 +167,32 @@ describe('InstitutionsGetter', function () {
})
})
describe('getCurrentAndPastAffiliationIds', function () {
it('filters unconfirmed affiliations, preserves those past reconfirmation, and returns only 1 result per institution', async function () {
this.UserGetter.promises.getUserFullEmails.resolves(
this.fullEmailCollection
)
const institutions =
await this.InstitutionsGetter.promises.getCurrentAndPastAffiliationIds(
this.userId
)
expect(institutions).to.deep.equal([777, 888, 456, 135])
})
it('handles empty response', async function () {
this.UserGetter.promises.getUserFullEmails.resolves([])
const institutions =
await this.InstitutionsGetter.promises.getCurrentInstitutionIds(
this.userId
)
expect(institutions).to.deep.equal([])
})
})
describe('getCurrentInstitutionsWithLicence', function () {
it('returns one result per institution and filters out affiliations without license', async function () {
this.UserGetter.promises.getUserFullEmails.resolves([
this.licencedAffiliation,
this.licencedAffiliation,
this.licencedAffiliationPastReconfirmation,
this.confirmedAffiliation,
this.unconfirmedDomainLicensedAffiliation,
this.unconfirmedEmailLicensedAffiliation,
])
this.UserGetter.promises.getUserFullEmails.resolves(
this.fullEmailCollection
)
const institutions =
await this.InstitutionsGetter.promises.getCurrentInstitutionsWithLicence(
this.userId