| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- import { vi } from 'vitest'
- import sinon from 'sinon'
- import MockResponse from '../helpers/MockResponse.js'
- import MockRequest from '../helpers/MockRequest.js'
- const modulePath = '../../../../app/src/Features/SplitTests/SplitTestMiddleware'
- describe('SplitTestMiddleware', function () {
- beforeEach(async function (ctx) {
- vi.doMock(
- '../../../../app/src/Features/SplitTests/SplitTestHandler.js',
- () => ({
- default: (ctx.SplitTestHandler = {
- promises: {
- getAssignment: sinon.stub().resolves(),
- },
- }),
- })
- )
- ctx.SplitTestMiddleware = (await import(modulePath)).default
- ctx.req = new MockRequest()
- ctx.res = new MockResponse()
- 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)
- })
- })
|