mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-06-11 07:00:47 +02:00
b7e9f0b67f
Prepare React Pdf Preview Rollout with Split Test and disabled new Logs UI GitOrigin-RevId: 995b7ca3ed542e58596b9f9715adc93a64da597e
145 lines
5.0 KiB
JavaScript
145 lines
5.0 KiB
JavaScript
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
|
|
})
|
|
})
|
|
})
|