| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- const SandboxedModule = require('sandboxed-module')
- const { expect } = require('chai')
- const { ObjectId } = require('mongodb')
- const MODULE_PATH = require('path').join(
- __dirname,
- '../../../../app/src/Features/Helpers/NewLogsUI.js'
- )
- describe('NewLogsUI helper', function () {
- let NewLogsUI
- before(function () {
- // We're disabling the Logs UI split test while rolling out the PDF Preview
- this.skip()
- })
- function userIdFromTime(time) {
- return ObjectId.createFromTime(time).toString()
- }
- function isExistingUI(variant) {
- return !variant.newLogsUI && !variant.subvariant
- }
- function isNewUIWithPopup(variant) {
- return variant.newLogsUI && variant.subvariant === 'new-logs-ui-with-popup'
- }
- function isNewUIWithoutPopup(variant) {
- return (
- variant.newLogsUI && variant.subvariant === 'new-logs-ui-without-popup'
- )
- }
- function getTestInterval(lowerBoundary, upperBoundary) {
- const midpoint = Math.floor(
- lowerBoundary + (upperBoundary - lowerBoundary) / 2
- )
- return [lowerBoundary, midpoint, upperBoundary]
- }
- beforeEach(function () {
- this.user = {
- alphaProgram: false,
- _id: ObjectId('60085414b76eeb00737d93aa'),
- }
- this.settings = {
- overleaf: {
- foo: 'bar',
- },
- }
- NewLogsUI = SandboxedModule.require(MODULE_PATH, {
- requires: {
- mongodb: { ObjectId },
- '@overleaf/settings': this.settings,
- },
- })
- })
- describe('In a non-SaaS context', function () {
- beforeEach(function () {
- delete this.settings.overleaf
- })
- it('should always show the existing UI', function () {
- for (const percentile of [0, 20, 40, 60, 80]) {
- this.user._id = userIdFromTime(percentile)
- const variant = NewLogsUI.getNewLogsUIVariantForUser(this.user)
- expect(isExistingUI(variant)).to.be.true
- }
- })
- })
- describe('For alpha users', function () {
- beforeEach(function () {
- this.user.alphaProgram = true
- })
- it('should always show the new UI with popup', function () {
- for (const percentile of [0, 20, 40, 60, 80]) {
- this.user._id = userIdFromTime(percentile)
- const variant = NewLogsUI.getNewLogsUIVariantForUser(this.user)
- expect(isNewUIWithPopup(variant)).to.be.true
- }
- })
- })
- describe('For regular users', function () {
- it('should show the new UI with popup when the id is in the [0, 5[ interval', function () {
- const testInterval = getTestInterval(0, 4)
- for (const percentile of testInterval) {
- this.user._id = userIdFromTime(percentile)
- const variant = NewLogsUI.getNewLogsUIVariantForUser(this.user)
- expect(isNewUIWithPopup(variant)).to.be.true
- }
- this.user._id = userIdFromTime(5)
- const variant = NewLogsUI.getNewLogsUIVariantForUser(this.user)
- expect(isNewUIWithPopup(variant)).to.be.false
- })
- it('should show the new UI without popup when the id is in the [5, 10[ interval', function () {
- const testInterval = getTestInterval(5, 9)
- for (const percentile of testInterval) {
- this.user._id = userIdFromTime(percentile)
- const variant = NewLogsUI.getNewLogsUIVariantForUser(this.user)
- expect(isNewUIWithoutPopup(variant)).to.be.true
- }
- this.user._id = userIdFromTime(10)
- const variant = NewLogsUI.getNewLogsUIVariantForUser(this.user)
- expect(isNewUIWithoutPopup(variant)).to.be.false
- })
- it('should show the new UI with popup when the id is in the [10, 38[ interval', function () {
- const testInterval = getTestInterval(10, 37)
- for (const percentile of testInterval) {
- this.user._id = userIdFromTime(percentile)
- const variant = NewLogsUI.getNewLogsUIVariantForUser(this.user)
- expect(isNewUIWithPopup(variant)).to.be.true
- }
- this.user._id = userIdFromTime(38)
- const variant = NewLogsUI.getNewLogsUIVariantForUser(this.user)
- expect(isNewUIWithPopup(variant)).to.be.false
- })
- it('should show the new UI without popup when the id is in the [38, 66[ interval', function () {
- const testInterval = getTestInterval(38, 65)
- for (const percentile of testInterval) {
- this.user._id = userIdFromTime(percentile)
- const variant = NewLogsUI.getNewLogsUIVariantForUser(this.user)
- expect(isNewUIWithoutPopup(variant)).to.be.true
- }
- this.user._id = userIdFromTime(66)
- const variant = NewLogsUI.getNewLogsUIVariantForUser(this.user)
- expect(isNewUIWithoutPopup(variant)).to.be.false
- })
- it('should show the existing UI when the id is in the [66, 99] interval', function () {
- const testInterval = getTestInterval(66, 99)
- for (const percentile of testInterval) {
- this.user._id = userIdFromTime(percentile)
- const variant = NewLogsUI.getNewLogsUIVariantForUser(this.user)
- expect(isExistingUI(variant)).to.be.true
- }
- this.user._id = userIdFromTime(100)
- const variant = NewLogsUI.getNewLogsUIVariantForUser(this.user)
- expect(isExistingUI(variant)).to.be.false
- })
- })
- })
|