| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 |
- const Path = require('path')
- const SandboxedModule = require('sandboxed-module')
- const sinon = require('sinon')
- const { expect } = require('chai')
- const MODULE_PATH = Path.join(
- __dirname,
- '../../../../app/src/Features/SplitTests/SplitTestSessionHandler'
- )
- describe('SplitTestSessionHandler', function () {
- beforeEach(function () {
- this.SplitTestCache = {
- get: sinon.stub().resolves(),
- }
- this.SplitTestUserGetter = {}
- this.Metrics = {}
- this.SplitTestSessionHandler = SandboxedModule.require(MODULE_PATH, {
- requires: {
- './SplitTestCache': this.SplitTestCache,
- './SplitTestUserGetter': this.SplitTestUserGetter,
- '@overleaf/metrics': this.Metrics,
- },
- })
- })
- it('should read from the splitTests field', async function () {
- const session = {
- splitTests: {
- 'anon-test-1': [
- {
- variantName: 'default',
- versionNumber: 1,
- phase: 'release',
- assignedAt: new Date(1712872800000), // 2024-04-11 22:00:00
- },
- ],
- 'anon-test-2': [
- {
- variantName: 'default',
- versionNumber: 1,
- phase: 'release',
- assignedAt: new Date(1712307600000), // 2024-04-05 09:00:00
- },
- {
- variantName: 'v-2',
- versionNumber: 2,
- phase: 'release',
- assignedAt: new Date(1712581200000), // 2024-04-08 13:00:00
- },
- ],
- },
- sta: ``,
- }
- const assignments =
- await this.SplitTestSessionHandler.promises.getAssignments(session)
- expect(assignments).to.deep.equal({
- 'anon-test-1': [
- {
- variantName: 'default',
- versionNumber: 1,
- phase: 'release',
- assignedAt: new Date(1712872800000),
- },
- ],
- 'anon-test-2': [
- {
- variantName: 'default',
- versionNumber: 1,
- phase: 'release',
- assignedAt: new Date(1712307600000),
- },
- {
- variantName: 'v-2',
- versionNumber: 2,
- phase: 'release',
- assignedAt: new Date(1712581200000),
- },
- ],
- })
- })
- it('should not read from the sta field', async function () {
- this.SplitTestCache.get = sinon.stub().resolves(
- new Map(
- Object.entries({
- 'anon-test-1': {
- _id: '661f92a4669764bb03f73e37',
- name: 'anon-test-1',
- versions: [
- {
- versionNumber: 1,
- variants: [
- {
- name: 'enabled',
- },
- ],
- },
- ],
- },
- 'anon-test-2': {
- _id: '661f92a9d68ea711d6bf2df4',
- name: 'anon-test-2',
- versions: [
- {
- versionNumber: 1,
- variants: [
- {
- name: 'v-1',
- },
- {
- name: 'v-2',
- },
- ],
- },
- ],
- },
- })
- )
- )
- const session = {
- sta: `Zh+SpGaXZLsD9z43_1=d:sbrvs0;Zh+SqdaOpxHWvy30_1=d:sbtqg0;Zh+SqdaOpxHWvy30_2=1:sbsi00`,
- }
- const assignments =
- await this.SplitTestSessionHandler.promises.getAssignments(session)
- expect(assignments).to.deep.equal({
- 'anon-test-1': [
- {
- variantName: 'default',
- versionNumber: 1,
- phase: 'release',
- assignedAt: new Date(1712829600000),
- },
- ],
- 'anon-test-2': [
- {
- variantName: 'default',
- versionNumber: 1,
- phase: 'release',
- assignedAt: new Date(1712916000000),
- },
- {
- variantName: 'v-2',
- versionNumber: 2,
- phase: 'release',
- assignedAt: new Date(1712858400000),
- },
- ],
- })
- })
- it('should merge assignments from both splitTests and sta fields', async function () {
- this.SplitTestCache.get = sinon.stub().resolves(
- new Map(
- Object.entries({
- 'anon-test-1': {
- _id: '661f92a4669764bb03f73e37',
- name: 'anon-test-1',
- versions: [
- {
- versionNumber: 1,
- variants: [
- {
- name: 'enabled',
- },
- ],
- },
- ],
- },
- 'anon-test-2': {
- _id: '661f92a9d68ea711d6bf2df4',
- name: 'anon-test-2',
- versions: [
- {
- versionNumber: 1,
- variants: [
- {
- name: 'v-1',
- },
- {
- name: 'v-2',
- },
- ],
- },
- ],
- },
- })
- )
- )
- const session = {
- splitTests: {
- 'anon-test-1': [
- {
- variantName: 'default',
- versionNumber: 1,
- phase: 'release',
- assignedAt: new Date(1712872800000),
- },
- ],
- 'anon-test-2': [
- {
- variantName: 'default',
- versionNumber: 1,
- phase: 'release',
- assignedAt: new Date(1712307600000),
- },
- ],
- },
- sta: `Zh+SqdaOpxHWvy30_2=1:sbsi00`,
- }
- const assignments =
- await this.SplitTestSessionHandler.promises.getAssignments(session)
- expect(assignments).to.deep.equal({
- 'anon-test-1': [
- {
- variantName: 'default',
- versionNumber: 1,
- phase: 'release',
- assignedAt: new Date(1712872800000),
- },
- ],
- 'anon-test-2': [
- {
- variantName: 'default',
- versionNumber: 1,
- phase: 'release',
- assignedAt: new Date(1712307600000),
- },
- {
- variantName: 'v-2',
- versionNumber: 2,
- phase: 'release',
- assignedAt: new Date(1712858400000),
- },
- ],
- })
- })
- })
|