live-vision / node_modules /@mswjs /interceptors /src /BatchInterceptor.test.ts
Sylvain Filoni
update gradio client
9ada4bc
import { vi, it, expect, afterEach } from 'vitest'
import { Interceptor } from './Interceptor'
import { BatchInterceptor } from './BatchInterceptor'
afterEach(() => {
vi.resetAllMocks()
})
it('applies child interceptors', () => {
class PrimaryInterceptor extends Interceptor<any> {
constructor() {
super(Symbol('primary'))
}
}
class SecondaryInterceptor extends Interceptor<any> {
constructor() {
super(Symbol('secondary'))
}
}
const instances = {
primary: new PrimaryInterceptor(),
secondary: new SecondaryInterceptor(),
}
const interceptor = new BatchInterceptor({
name: 'batch-apply',
interceptors: [instances.primary, instances.secondary],
})
const primaryApplySpy = vi.spyOn(instances.primary, 'apply')
const secondaryApplySpy = vi.spyOn(instances.secondary, 'apply')
interceptor.apply()
expect(primaryApplySpy).toHaveBeenCalledTimes(1)
expect(secondaryApplySpy).toHaveBeenCalledTimes(1)
})
it('proxies event listeners to the interceptors', () => {
class PrimaryInterceptor extends Interceptor<{ hello: [string] }> {
constructor() {
super(Symbol('primary'))
}
}
class SecondaryInterceptor extends Interceptor<{
goodbye: [string]
}> {
constructor() {
super(Symbol('secondary'))
}
}
const instances = {
primary: new PrimaryInterceptor(),
secondary: new SecondaryInterceptor(),
}
const interceptor = new BatchInterceptor({
name: 'batch-proxy',
interceptors: [instances.primary, instances.secondary],
})
const helloListener = vi.fn()
interceptor.on('hello', helloListener)
const goodbyeListener = vi.fn()
interceptor.on('goodbye', goodbyeListener)
// Emulate the child interceptor emitting events.
instances.primary['emitter'].emit('hello', 'John')
instances.secondary['emitter'].emit('goodbye', 'Kate')
// Must call the batch interceptor listener.
expect(helloListener).toHaveBeenCalledTimes(1)
expect(helloListener).toHaveBeenCalledWith('John')
expect(goodbyeListener).toHaveBeenCalledTimes(1)
expect(goodbyeListener).toHaveBeenCalledWith('Kate')
})
it('disposes of child interceptors', async () => {
class PrimaryInterceptor extends Interceptor<any> {
constructor() {
super(Symbol('primary'))
}
}
class SecondaryInterceptor extends Interceptor<any> {
constructor() {
super(Symbol('secondary'))
}
}
const instances = {
primary: new PrimaryInterceptor(),
secondary: new SecondaryInterceptor(),
}
const interceptor = new BatchInterceptor({
name: 'batch-dispose',
interceptors: [instances.primary, instances.secondary],
})
const primaryDisposeSpy = vi.spyOn(instances.primary, 'dispose')
const secondaryDisposeSpy = vi.spyOn(instances.secondary, 'dispose')
interceptor.apply()
interceptor.dispose()
expect(primaryDisposeSpy).toHaveBeenCalledTimes(1)
expect(secondaryDisposeSpy).toHaveBeenCalledTimes(1)
})
it('forwards listeners added via "on()"', () => {
class FirstInterceptor extends Interceptor<any> {
constructor() {
super(Symbol('first'))
}
}
class SecondaryInterceptor extends Interceptor<any> {
constructor() {
super(Symbol('second'))
}
}
const firstInterceptor = new FirstInterceptor()
const secondInterceptor = new SecondaryInterceptor()
const interceptor = new BatchInterceptor({
name: 'batch',
interceptors: [firstInterceptor, secondInterceptor],
})
const listener = vi.fn()
interceptor.on('foo', listener)
expect(firstInterceptor['emitter'].listenerCount('foo')).toBe(1)
expect(secondInterceptor['emitter'].listenerCount('foo')).toBe(1)
expect(interceptor['emitter'].listenerCount('foo')).toBe(0)
})
it('forwards listeners removal via "off()"', () => {
type Events = {
foo: []
}
class FirstInterceptor extends Interceptor<Events> {
constructor() {
super(Symbol('first'))
}
}
class SecondaryInterceptor extends Interceptor<Events> {
constructor() {
super(Symbol('second'))
}
}
const firstInterceptor = new FirstInterceptor()
const secondInterceptor = new SecondaryInterceptor()
const interceptor = new BatchInterceptor({
name: 'batch',
interceptors: [firstInterceptor, secondInterceptor],
})
const listener = vi.fn()
interceptor.on('foo', listener)
interceptor.off('foo', listener)
expect(firstInterceptor['emitter'].listenerCount('foo')).toBe(0)
expect(secondInterceptor['emitter'].listenerCount('foo')).toBe(0)
})
it('forwards removal of all listeners by name via ".removeAllListeners()"', () => {
type Events = {
foo: []
bar: []
}
class FirstInterceptor extends Interceptor<Events> {
constructor() {
super(Symbol('first'))
}
}
class SecondaryInterceptor extends Interceptor<Events> {
constructor() {
super(Symbol('second'))
}
}
const firstInterceptor = new FirstInterceptor()
const secondInterceptor = new SecondaryInterceptor()
const interceptor = new BatchInterceptor({
name: 'batch',
interceptors: [firstInterceptor, secondInterceptor],
})
const listener = vi.fn()
interceptor.on('foo', listener)
interceptor.on('foo', listener)
interceptor.on('bar', listener)
expect(firstInterceptor['emitter'].listenerCount('foo')).toBe(2)
expect(secondInterceptor['emitter'].listenerCount('foo')).toBe(2)
expect(firstInterceptor['emitter'].listenerCount('bar')).toBe(1)
expect(secondInterceptor['emitter'].listenerCount('bar')).toBe(1)
interceptor.removeAllListeners('foo')
expect(firstInterceptor['emitter'].listenerCount('foo')).toBe(0)
expect(secondInterceptor['emitter'].listenerCount('foo')).toBe(0)
expect(firstInterceptor['emitter'].listenerCount('bar')).toBe(1)
expect(secondInterceptor['emitter'].listenerCount('bar')).toBe(1)
})
it('forwards removal of all listeners via ".removeAllListeners()"', () => {
class FirstInterceptor extends Interceptor<any> {
constructor() {
super(Symbol('first'))
}
}
class SecondaryInterceptor extends Interceptor<any> {
constructor() {
super(Symbol('second'))
}
}
const firstInterceptor = new FirstInterceptor()
const secondInterceptor = new SecondaryInterceptor()
const interceptor = new BatchInterceptor({
name: 'batch',
interceptors: [firstInterceptor, secondInterceptor],
})
const listener = vi.fn()
interceptor.on('foo', listener)
interceptor.on('foo', listener)
interceptor.on('bar', listener)
expect(firstInterceptor['emitter'].listenerCount('foo')).toBe(2)
expect(secondInterceptor['emitter'].listenerCount('foo')).toBe(2)
expect(firstInterceptor['emitter'].listenerCount('bar')).toBe(1)
expect(secondInterceptor['emitter'].listenerCount('bar')).toBe(1)
interceptor.removeAllListeners()
expect(firstInterceptor['emitter'].listenerCount('foo')).toBe(0)
expect(secondInterceptor['emitter'].listenerCount('foo')).toBe(0)
expect(firstInterceptor['emitter'].listenerCount('bar')).toBe(0)
expect(secondInterceptor['emitter'].listenerCount('bar')).toBe(0)
})