mirror of
https://github.com/overleaf/overleaf.git
synced 2025-02-10 17:13:37 +00:00
Merge pull request #3718 from overleaf/jel-emailHasLicence
Update emailHasLicence for reconfirmation and SAML GitOrigin-RevId: 58daf538d9f0a7db46bb3c1e21f8ca04df095446
This commit is contained in:
parent
18eea6d024
commit
1c54a15e42
4 changed files with 44 additions and 50 deletions
|
@ -16,6 +16,10 @@ function emailHasLicence(emailData) {
|
|||
if (!affiliation.licence) {
|
||||
return false
|
||||
}
|
||||
if (affiliation.pastReconfirmDate) {
|
||||
return false
|
||||
}
|
||||
|
||||
return affiliation.licence !== 'free'
|
||||
}
|
||||
|
||||
|
|
|
@ -63,9 +63,6 @@ const FeaturesUpdater = {
|
|||
bonusFeatures(cb) {
|
||||
ReferalFeatures.getBonusFeatures(userId, cb)
|
||||
},
|
||||
samlFeatures(cb) {
|
||||
FeaturesUpdater._getSamlFeatures(userId, cb)
|
||||
},
|
||||
featuresOverrides(cb) {
|
||||
FeaturesUpdater._getFeaturesOverrides(userId, cb)
|
||||
}
|
||||
|
@ -88,7 +85,6 @@ const FeaturesUpdater = {
|
|||
institutionFeatures,
|
||||
v1Features,
|
||||
bonusFeatures,
|
||||
samlFeatures,
|
||||
featuresOverrides
|
||||
} = results
|
||||
logger.log(
|
||||
|
@ -99,7 +95,6 @@ const FeaturesUpdater = {
|
|||
institutionFeatures,
|
||||
v1Features,
|
||||
bonusFeatures,
|
||||
samlFeatures,
|
||||
featuresOverrides
|
||||
},
|
||||
'merging user features'
|
||||
|
@ -109,7 +104,6 @@ const FeaturesUpdater = {
|
|||
institutionFeatures,
|
||||
v1Features,
|
||||
bonusFeatures,
|
||||
samlFeatures,
|
||||
featuresOverrides
|
||||
])
|
||||
const features = _.reduce(
|
||||
|
@ -133,30 +127,6 @@ const FeaturesUpdater = {
|
|||
)
|
||||
},
|
||||
|
||||
_getSamlFeatures(userId, callback) {
|
||||
UserGetter.getUser(userId, (err, user) => {
|
||||
if (err) {
|
||||
return callback(err)
|
||||
}
|
||||
if (
|
||||
!user ||
|
||||
!Array.isArray(user.samlIdentifiers) ||
|
||||
!user.samlIdentifiers.length
|
||||
) {
|
||||
return callback(null, {})
|
||||
}
|
||||
for (const samlIdentifier of user.samlIdentifiers) {
|
||||
if (samlIdentifier && samlIdentifier.hasEntitlement) {
|
||||
return callback(
|
||||
null,
|
||||
FeaturesUpdater._planCodeToFeatures('professional')
|
||||
)
|
||||
}
|
||||
}
|
||||
callback(null, {})
|
||||
})
|
||||
},
|
||||
|
||||
_getFeaturesOverrides(userId, callback) {
|
||||
UserGetter.getUser(userId, { featuresOverrides: 1 }, (error, user) => {
|
||||
if (error) {
|
||||
|
|
|
@ -1025,11 +1025,12 @@ describe('UserEmails', function() {
|
|||
password: userHelper.getDefaultPassword()
|
||||
})
|
||||
const institutionId = MockV1Api.createInstitution({
|
||||
commonsAccount: true,
|
||||
ssoEnabled: false,
|
||||
maxConfirmationMonths
|
||||
})
|
||||
const domain = 'example-affiliation.com'
|
||||
MockV1Api.addInstitutionDomain(institutionId, domain)
|
||||
MockV1Api.addInstitutionDomain(institutionId, domain, { confirmed: true })
|
||||
|
||||
email1 = `leonard@${domain}`
|
||||
email2 = `mccoy@${domain}`
|
||||
|
@ -1053,24 +1054,37 @@ describe('UserEmails', function() {
|
|||
)
|
||||
})
|
||||
|
||||
it('should flag inReconfirmNotificationPeriod for all affiliations in period', async function() {
|
||||
const response = await userHelper.request.get('/user/emails')
|
||||
expect(response.statusCode).to.equal(200)
|
||||
const fullEmails = JSON.parse(response.body)
|
||||
expect(fullEmails.length).to.equal(4)
|
||||
expect(fullEmails[0].affiliation).to.not.exist
|
||||
expect(
|
||||
fullEmails[1].affiliation.inReconfirmNotificationPeriod
|
||||
).to.equal(true)
|
||||
expect(fullEmails[1].affiliation.pastReconfirmDate).to.equal(false)
|
||||
expect(
|
||||
fullEmails[2].affiliation.inReconfirmNotificationPeriod
|
||||
).to.equal(true)
|
||||
expect(fullEmails[2].affiliation.pastReconfirmDate).to.equal(false)
|
||||
expect(
|
||||
fullEmails[3].affiliation.inReconfirmNotificationPeriod
|
||||
).to.equal(true)
|
||||
expect(fullEmails[3].affiliation.pastReconfirmDate).to.equal(true)
|
||||
describe('when all affiliations in notification period or past reconfirm date', function() {
|
||||
it('should flag inReconfirmNotificationPeriod for all affiliations in period', async function() {
|
||||
const response = await userHelper.request.get('/user/emails')
|
||||
expect(response.statusCode).to.equal(200)
|
||||
const fullEmails = JSON.parse(response.body)
|
||||
expect(fullEmails.length).to.equal(4)
|
||||
expect(fullEmails[0].affiliation).to.not.exist
|
||||
expect(
|
||||
fullEmails[1].affiliation.inReconfirmNotificationPeriod
|
||||
).to.equal(true)
|
||||
expect(
|
||||
fullEmails[2].affiliation.inReconfirmNotificationPeriod
|
||||
).to.equal(true)
|
||||
expect(
|
||||
fullEmails[3].affiliation.inReconfirmNotificationPeriod
|
||||
).to.equal(true)
|
||||
})
|
||||
|
||||
it('should set pastReconfirmDate and emailHasInstitutionLicence:false for lapsed confirmations', async function() {
|
||||
const response = await userHelper.request.get('/user/emails')
|
||||
expect(response.statusCode).to.equal(200)
|
||||
const fullEmails = JSON.parse(response.body)
|
||||
expect(fullEmails.length).to.equal(4)
|
||||
expect(fullEmails[0].affiliation).to.not.exist
|
||||
expect(fullEmails[1].affiliation.pastReconfirmDate).to.equal(false)
|
||||
expect(fullEmails[1].emailHasInstitutionLicence).to.equal(true)
|
||||
expect(fullEmails[2].affiliation.pastReconfirmDate).to.equal(false)
|
||||
expect(fullEmails[2].emailHasInstitutionLicence).to.equal(true)
|
||||
expect(fullEmails[3].affiliation.pastReconfirmDate).to.equal(true)
|
||||
expect(fullEmails[3].emailHasInstitutionLicence).to.equal(false)
|
||||
})
|
||||
})
|
||||
|
||||
describe('should flag emails before their confirmation expires, but within the notification period', function() {
|
||||
|
|
|
@ -212,7 +212,13 @@ class MockV1Api extends AbstractMockApi {
|
|||
|
||||
affiliation.institution.confirmed = !!domainData.confirmed
|
||||
|
||||
if (institutionData.commonsAccount) {
|
||||
affiliation.licence = 'free'
|
||||
if (
|
||||
institutionData.commonsAccount &&
|
||||
(!institutionData.sso_enabled ||
|
||||
(institutionData.sso_enabled &&
|
||||
affiliation.cached_entitlement === true))
|
||||
) {
|
||||
affiliation.licence = 'pro_plus'
|
||||
}
|
||||
return affiliation
|
||||
|
|
Loading…
Reference in a new issue