Files
overleaf-cep/services/web/test/unit/src/SplitTests/SplitTestMiddleware.test.mjs
T
Andrew Rumble f1e788d9b3 Merge pull request #29967 from overleaf/ar/web-remove-mocha-unit-tests
[web] remove mocha unit tests

GitOrigin-RevId: eda753af3470dbd1f385cb0bc3f06d78ade8a764
2025-12-03 09:05:37 +00:00

90 lines
2.4 KiB
JavaScript

import { vi } from 'vitest'
import sinon from 'sinon'
import MockResponse from '../helpers/MockResponse.mjs'
import MockRequest from '../helpers/MockRequest.mjs'
const modulePath = '../../../../app/src/Features/SplitTests/SplitTestMiddleware'
describe('SplitTestMiddleware', function () {
beforeEach(async function (ctx) {
vi.doMock(
'../../../../app/src/Features/SplitTests/SplitTestHandler.mjs',
() => ({
default: (ctx.SplitTestHandler = {
promises: {
getAssignment: sinon.stub().resolves(),
},
}),
})
)
ctx.SplitTestMiddleware = (await import(modulePath)).default
ctx.req = new MockRequest(vi)
ctx.res = new MockResponse(vi)
ctx.next = sinon.stub()
})
it('assign multiple split test variants in locals', async function (ctx) {
ctx.SplitTestHandler.promises.getAssignment
.withArgs(ctx.req, 'ui-overhaul')
.resolves({
variant: 'default',
})
ctx.SplitTestHandler.promises.getAssignment
.withArgs(ctx.req, 'other-test')
.resolves({
variant: 'foobar',
})
const middleware = ctx.SplitTestMiddleware.loadAssignmentsInLocals([
'ui-overhaul',
'other-test',
])
await middleware(ctx.req, ctx.res, ctx.next)
sinon.assert.calledWith(
ctx.SplitTestHandler.promises.getAssignment,
ctx.req,
ctx.res,
'ui-overhaul'
)
sinon.assert.calledWith(
ctx.SplitTestHandler.promises.getAssignment,
ctx.req,
ctx.res,
'other-test'
)
sinon.assert.calledOnce(ctx.next)
})
it('assign no split test variant in locals', async function (ctx) {
const middleware = ctx.SplitTestMiddleware.loadAssignmentsInLocals([])
await middleware(ctx.req, ctx.res, ctx.next)
sinon.assert.notCalled(ctx.SplitTestHandler.promises.getAssignment)
sinon.assert.calledOnce(ctx.next)
})
it('exception thrown by assignment does not fail the request', async function (ctx) {
ctx.SplitTestHandler.promises.getAssignment
.withArgs(ctx.req, ctx.res, 'some-test')
.throws(new Error('failure'))
const middleware = ctx.SplitTestMiddleware.loadAssignmentsInLocals([
'some-test',
])
await middleware(ctx.req, ctx.res, ctx.next)
sinon.assert.calledWith(
ctx.SplitTestHandler.promises.getAssignment,
ctx.req,
ctx.res,
'some-test'
)
sinon.assert.calledOnce(ctx.next)
})
})