| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- 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)
- })
- })
- })
|