Files
overleaf-cep/services/web/test/unit/src/Tutorial/TutorialHandlerTests.js
T
M Fahru f9bb5ab484 Merge pull request #20371 from overleaf/mf-us-gov-banner
[web] Add US gov banner based on inclusion and exclusion criteria

GitOrigin-RevId: c45ed280c8ef2dbdf9f3b84488e767c06fcc1ae1
2024-10-14 11:02:15 +00:00

88 lines
2.4 KiB
JavaScript

const SandboxedModule = require('sandboxed-module')
const { expect } = require('chai')
const sinon = require('sinon')
const { ObjectId } = require('mongodb-legacy')
const MODULE_PATH = '../../../../app/src/Features/Tutorial/TutorialHandler'
describe('TutorialHandler', function () {
beforeEach(function () {
this.clock = sinon.useFakeTimers()
const THIRTY_DAYS_AGO = Date.now() - 30 * 24 * 60 * 60 * 1000
const TOMORROW = Date.now() + 24 * 60 * 60 * 1000
const YESTERDAY = Date.now() - 24 * 60 * 60 * 1000
this.user = {
_id: new ObjectId(),
completedTutorials: {
'legacy-format': new Date(Date.now() - 1000),
completed: {
state: 'completed',
updatedAt: new Date(Date.now() - 1000),
},
'postponed-recently': {
state: 'postponed',
updatedAt: new Date(Date.now() - 1000),
},
'postponed-long-ago': {
state: 'postponed',
updatedAt: new Date(THIRTY_DAYS_AGO),
},
'postponed-until-tomorrow': {
state: 'postponed',
updatedAt: new Date(THIRTY_DAYS_AGO),
postponedUntil: new Date(TOMORROW),
},
'postponed-until-yesterday': {
state: 'postponed',
updatedAt: new Date(THIRTY_DAYS_AGO),
postponedUntil: new Date(YESTERDAY),
},
},
}
this.UserUpdater = {
promises: {
updateUser: sinon.stub().resolves(),
},
}
this.TutorialHandler = SandboxedModule.require(MODULE_PATH, {
requires: {
'../User/UserUpdater': this.UserUpdater,
},
})
})
afterEach(function () {
this.clock.restore()
})
describe('getInactiveTutorials', function () {
it('returns all recorded tutorials except when they were posponed long ago', function () {
const hiddenTutorials = this.TutorialHandler.getInactiveTutorials(
this.user
)
expect(hiddenTutorials).to.have.members([
'legacy-format',
'completed',
'postponed-recently',
'postponed-until-tomorrow',
])
expect(hiddenTutorials).to.have.lengthOf(4)
const shownTutorials = Object.keys(this.user.completedTutorials).filter(
key => !hiddenTutorials.includes(key)
)
expect(shownTutorials).to.have.members([
'postponed-long-ago',
'postponed-until-yesterday',
])
expect(shownTutorials).to.have.lengthOf(2)
})
})
})