Files
Verso/services/web/test/unit/src/Institutions/InstitutionsGetterTests.js
T
Jessica LawsheandCopybot 6a0da3d204 Merge pull request #6375 from overleaf/jel-reconfirm-check
[web] Use v1 date for reconfirm notification check

GitOrigin-RevId: e14f1b6a1a6ab629628858d962a3757a6078cf79
2022-01-26 09:03:50 +00:00

181 lines
5.3 KiB
JavaScript

const SandboxedModule = require('sandboxed-module')
const { expect } = require('chai')
const sinon = require('sinon')
const modulePath = require('path').join(
__dirname,
'../../../../app/src/Features/Institutions/InstitutionsGetter.js'
)
describe('InstitutionsGetter', function () {
beforeEach(function () {
this.UserGetter = {
getUserFullEmails: sinon.stub(),
promises: {
getUserFullEmails: sinon.stub(),
},
}
this.InstitutionsGetter = SandboxedModule.require(modulePath, {
requires: {
'../User/UserGetter': this.UserGetter,
'../UserMembership/UserMembershipsHandler':
(this.UserMembershipsHandler = {}),
'../UserMembership/UserMembershipEntityConfigs':
(this.UserMembershipEntityConfigs = {}),
},
})
this.userId = '12345abcde'
this.confirmedAffiliation = {
confirmedAt: new Date(),
affiliation: {
institution: { id: 456, confirmed: true },
cachedPastReconfirmDate: false,
pastReconfirmDate: false,
},
}
this.confirmedAffiliationPastReconfirmation = {
confirmedAt: new Date('2000-01-01'),
affiliation: {
institution: { id: 135, confirmed: true },
cachedPastReconfirmDate: true,
pastReconfirmDate: true,
},
}
this.licencedAffiliation = {
confirmedAt: new Date(),
affiliation: {
licence: 'pro_plus',
institution: { id: 777, confirmed: true },
cachedPastReconfirmDate: false,
pastReconfirmDate: false,
},
}
this.licencedAffiliationPastReconfirmation = {
confirmedAt: new Date('2000-01-01'),
affiliation: {
licence: 'pro_plus',
institution: { id: 888, confirmed: true },
cachedPastReconfirmDate: true,
pastReconfirmDate: true,
},
}
this.unconfirmedEmailLicensedAffiliation = {
confirmedAt: null,
affiliation: {
licence: 'pro_plus',
institution: {
id: 123,
confirmed: true,
cachedPastReconfirmDate: false,
pastReconfirmDate: false,
},
},
}
this.unconfirmedDomainLicensedAffiliation = {
confirmedAt: new Date(),
affiliation: {
licence: 'pro_plus',
institution: {
id: 789,
confirmed: false,
cachedPastReconfirmDate: false,
pastReconfirmDate: false,
},
},
}
this.userEmails = [
{
confirmedAt: null,
affiliation: {
institution: {
id: 123,
confirmed: true,
cachedPastReconfirmDate: false,
pastReconfirmDate: false,
},
},
},
this.confirmedAffiliation,
this.confirmedAffiliation,
this.confirmedAffiliationPastReconfirmation,
{
confirmedAt: new Date(),
affiliation: null,
cachedPastReconfirmDate: false,
pastReconfirmDate: false,
},
{
confirmedAt: new Date(),
affiliation: {
institution: null,
cachedPastReconfirmDate: false,
pastReconfirmDate: false,
},
},
{
confirmedAt: new Date(),
affiliation: {
institution: {
id: 789,
confirmed: false,
cachedPastReconfirmDate: false,
pastReconfirmDate: false,
},
},
},
]
})
describe('getCurrentInstitutionIds', function () {
it('filters unconfirmed affiliations, those past reconfirmation, and returns only 1 result per institution', async function () {
this.UserGetter.promises.getUserFullEmails.resolves(this.userEmails)
const institutions =
await this.InstitutionsGetter.promises.getCurrentInstitutionIds(
this.userId
)
expect(institutions.length).to.equal(1)
expect(institutions[0]).to.equal(456)
})
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([])
})
it('handles errors', async function () {
this.UserGetter.promises.getUserFullEmails.rejects(new Error('oops'))
let e
try {
await this.InstitutionsGetter.promises.getCurrentInstitutionIds(
this.userId
)
} catch (error) {
e = error
}
expect(e.message).to.equal('oops')
})
})
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,
])
const institutions =
await this.InstitutionsGetter.promises.getCurrentInstitutionsWithLicence(
this.userId
)
expect(institutions.map(institution => institution.id)).to.deep.equal([
this.licencedAffiliation.affiliation.institution.id,
])
})
})
})