mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-21 20:47:08 -05:00
Merge pull request #4287 from overleaf/jpa-no-analytics-queues-server-ce-pro
[misc] do not set up analytics queues in Server CE/Pro GitOrigin-RevId: 61a62f0ff7f04d5206845e01c68097229a5954fd
This commit is contained in:
parent
37a50e295a
commit
7430d7f558
4 changed files with 158 additions and 90 deletions
|
@ -1,3 +1,4 @@
|
||||||
|
const Features = require('../../infrastructure/Features')
|
||||||
const Queues = require('../../infrastructure/Queues')
|
const Queues = require('../../infrastructure/Queues')
|
||||||
const EmailHandler = require('../Email/EmailHandler')
|
const EmailHandler = require('../Email/EmailHandler')
|
||||||
const UserUpdater = require('./UserUpdater')
|
const UserUpdater = require('./UserUpdater')
|
||||||
|
@ -34,4 +35,10 @@ class UserOnboardingEmailManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = new UserOnboardingEmailManager()
|
class NoopManager {
|
||||||
|
async scheduleOnboardingEmail() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = Features.hasFeature('saas')
|
||||||
|
? new UserOnboardingEmailManager()
|
||||||
|
: new NoopManager()
|
||||||
|
|
|
@ -4,6 +4,7 @@ const {
|
||||||
promises: InstitutionsAPIPromises,
|
promises: InstitutionsAPIPromises,
|
||||||
} = require('../Institutions/InstitutionsAPI')
|
} = require('../Institutions/InstitutionsAPI')
|
||||||
const AnalyticsManager = require('../Analytics/AnalyticsManager')
|
const AnalyticsManager = require('../Analytics/AnalyticsManager')
|
||||||
|
const Features = require('../../infrastructure/Features')
|
||||||
|
|
||||||
const ONE_DAY_MS = 24 * 60 * 60 * 1000
|
const ONE_DAY_MS = 24 * 60 * 60 * 1000
|
||||||
|
|
||||||
|
@ -47,4 +48,10 @@ async function checkAffiliations(userId) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = new UserPostRegistrationAnalyticsManager()
|
class NoopManager {
|
||||||
|
async schedulePostRegistrationAnalytics() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = Features.hasFeature('saas')
|
||||||
|
? new UserPostRegistrationAnalyticsManager()
|
||||||
|
: new NoopManager()
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
const SandboxedModule = require('sandboxed-module')
|
const SandboxedModule = require('sandboxed-module')
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
const sinon = require('sinon')
|
const sinon = require('sinon')
|
||||||
|
const { expect } = require('chai')
|
||||||
|
|
||||||
const MODULE_PATH = path.join(
|
const MODULE_PATH = path.join(
|
||||||
__dirname,
|
__dirname,
|
||||||
|
@ -17,11 +18,10 @@ describe('UserOnboardingEmailManager', function () {
|
||||||
this.queueProcessFunction = callback
|
this.queueProcessFunction = callback
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
const self = this
|
|
||||||
this.Queues = {
|
this.Queues = {
|
||||||
getOnboardingEmailsQueue: () => {
|
getOnboardingEmailsQueue: sinon
|
||||||
return self.onboardingEmailsQueue
|
.stub()
|
||||||
},
|
.returns(this.onboardingEmailsQueue),
|
||||||
}
|
}
|
||||||
this.UserGetter = {
|
this.UserGetter = {
|
||||||
promises: {
|
promises: {
|
||||||
|
@ -41,21 +41,49 @@ describe('UserOnboardingEmailManager', function () {
|
||||||
updateUser: sinon.stub().resolves(),
|
updateUser: sinon.stub().resolves(),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
this.Features = {
|
||||||
|
hasFeature: sinon.stub(),
|
||||||
|
}
|
||||||
this.request = sinon.stub().yields()
|
this.request = sinon.stub().yields()
|
||||||
|
|
||||||
|
this.init = isSAAS => {
|
||||||
|
this.Features.hasFeature.withArgs('saas').returns(isSAAS)
|
||||||
this.UserOnboardingEmailManager = SandboxedModule.require(MODULE_PATH, {
|
this.UserOnboardingEmailManager = SandboxedModule.require(MODULE_PATH, {
|
||||||
globals: {
|
globals: {
|
||||||
console: console,
|
console: console,
|
||||||
},
|
},
|
||||||
requires: {
|
requires: {
|
||||||
|
'../../infrastructure/Features': this.Features,
|
||||||
'../../infrastructure/Queues': this.Queues,
|
'../../infrastructure/Queues': this.Queues,
|
||||||
'../Email/EmailHandler': this.EmailHandler,
|
'../Email/EmailHandler': this.EmailHandler,
|
||||||
'./UserGetter': this.UserGetter,
|
'./UserGetter': this.UserGetter,
|
||||||
'./UserUpdater': this.UserUpdater,
|
'./UserUpdater': this.UserUpdater,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('in Server CE/Pro', function () {
|
||||||
|
beforeEach(function () {
|
||||||
|
this.init(false)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should not create any queue', function () {
|
||||||
|
expect(this.Queues.getOnboardingEmailsQueue).to.not.have.been.called
|
||||||
|
})
|
||||||
|
it('should not schedule any email', function () {
|
||||||
|
this.UserOnboardingEmailManager.scheduleOnboardingEmail({
|
||||||
|
_id: this.fakeUserId,
|
||||||
|
})
|
||||||
|
expect(this.onboardingEmailsQueue.add).to.not.have.been.called
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('schedule email in SAAS', function () {
|
||||||
|
beforeEach(function () {
|
||||||
|
this.init(true)
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('schedule email', function () {
|
|
||||||
it('should schedule delayed job on queue', function () {
|
it('should schedule delayed job on queue', function () {
|
||||||
this.UserOnboardingEmailManager.scheduleOnboardingEmail({
|
this.UserOnboardingEmailManager.scheduleOnboardingEmail({
|
||||||
_id: this.fakeUserId,
|
_id: this.fakeUserId,
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
const SandboxedModule = require('sandboxed-module')
|
const SandboxedModule = require('sandboxed-module')
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
const sinon = require('sinon')
|
const sinon = require('sinon')
|
||||||
|
const { expect } = require('chai')
|
||||||
|
|
||||||
const MODULE_PATH = path.join(
|
const MODULE_PATH = path.join(
|
||||||
__dirname,
|
__dirname,
|
||||||
|
@ -16,11 +17,10 @@ describe('UserPostRegistrationAnalyticsManager', function () {
|
||||||
this.queueProcessFunction = callback
|
this.queueProcessFunction = callback
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
const self = this
|
|
||||||
this.Queues = {
|
this.Queues = {
|
||||||
getPostRegistrationAnalyticsQueue: () => {
|
getPostRegistrationAnalyticsQueue: sinon
|
||||||
return self.postRegistrationAnalyticsQueue
|
.stub()
|
||||||
},
|
.returns(this.postRegistrationAnalyticsQueue),
|
||||||
}
|
}
|
||||||
this.UserGetter = {
|
this.UserGetter = {
|
||||||
promises: {
|
promises: {
|
||||||
|
@ -35,13 +35,16 @@ describe('UserPostRegistrationAnalyticsManager', function () {
|
||||||
this.AnalyticsManager = {
|
this.AnalyticsManager = {
|
||||||
setUserProperty: sinon.stub().resolves(),
|
setUserProperty: sinon.stub().resolves(),
|
||||||
}
|
}
|
||||||
|
this.Features = {
|
||||||
|
hasFeature: sinon.stub().returns(true),
|
||||||
|
}
|
||||||
|
this.init = isSAAS => {
|
||||||
|
this.Features.hasFeature.withArgs('saas').returns(isSAAS)
|
||||||
this.UserPostRegistrationAnalyticsManager = SandboxedModule.require(
|
this.UserPostRegistrationAnalyticsManager = SandboxedModule.require(
|
||||||
MODULE_PATH,
|
MODULE_PATH,
|
||||||
{
|
{
|
||||||
globals: {
|
|
||||||
console: console,
|
|
||||||
},
|
|
||||||
requires: {
|
requires: {
|
||||||
|
'../../infrastructure/Features': this.Features,
|
||||||
'../../infrastructure/Queues': this.Queues,
|
'../../infrastructure/Queues': this.Queues,
|
||||||
'./UserGetter': this.UserGetter,
|
'./UserGetter': this.UserGetter,
|
||||||
'../Institutions/InstitutionsAPI': this.InstitutionsAPI,
|
'../Institutions/InstitutionsAPI': this.InstitutionsAPI,
|
||||||
|
@ -49,9 +52,29 @@ describe('UserPostRegistrationAnalyticsManager', function () {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('schedule jobs', function () {
|
describe('in Server CE/Pro', function () {
|
||||||
|
beforeEach(function () {
|
||||||
|
this.init(false)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should schedule delayed job on queue', function () {
|
||||||
|
this.UserPostRegistrationAnalyticsManager.schedulePostRegistrationAnalytics(
|
||||||
|
{ _id: this.fakeUserId }
|
||||||
|
)
|
||||||
|
expect(this.Queues.getPostRegistrationAnalyticsQueue).to.not.have.been
|
||||||
|
.called
|
||||||
|
expect(this.postRegistrationAnalyticsQueue.add).to.not.have.been.called
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('in SAAS', function () {
|
||||||
|
beforeEach(function () {
|
||||||
|
this.init(true)
|
||||||
|
})
|
||||||
|
describe('schedule jobs in SAAS', function () {
|
||||||
it('should schedule delayed job on queue', function () {
|
it('should schedule delayed job on queue', function () {
|
||||||
this.UserPostRegistrationAnalyticsManager.schedulePostRegistrationAnalytics(
|
this.UserPostRegistrationAnalyticsManager.schedulePostRegistrationAnalytics(
|
||||||
{
|
{
|
||||||
|
@ -73,7 +96,9 @@ describe('UserPostRegistrationAnalyticsManager', function () {
|
||||||
sinon.assert.calledWith(this.UserGetter.promises.getUser, {
|
sinon.assert.calledWith(this.UserGetter.promises.getUser, {
|
||||||
_id: this.fakeUserId,
|
_id: this.fakeUserId,
|
||||||
})
|
})
|
||||||
sinon.assert.notCalled(this.InstitutionsAPI.promises.getUserAffiliations)
|
sinon.assert.notCalled(
|
||||||
|
this.InstitutionsAPI.promises.getUserAffiliations
|
||||||
|
)
|
||||||
sinon.assert.notCalled(this.AnalyticsManager.setUserProperty)
|
sinon.assert.notCalled(this.AnalyticsManager.setUserProperty)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -119,4 +144,5 @@ describe('UserPostRegistrationAnalyticsManager', function () {
|
||||||
sinon.assert.notCalled(this.AnalyticsManager.setUserProperty)
|
sinon.assert.notCalled(this.AnalyticsManager.setUserProperty)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in a new issue