CoolFace
Datasetpublic

basant307/AI_Governance_Project

sourceHugging Faceapache-2.0updated 2mo agoView on Hugging Face
0likes48downloads
BatchInterceptor.test.ts256 linesDownload Raw Back to src
1import { vi, it, expect, afterEach } from 'vitest'2import { Interceptor } from './Interceptor'3import { BatchInterceptor } from './BatchInterceptor'4 5afterEach(() => {6  vi.resetAllMocks()7})8 9it('applies child interceptors', () => {10  class PrimaryInterceptor extends Interceptor<any> {11    constructor() {12      super(Symbol('primary'))13    }14  }15 16  class SecondaryInterceptor extends Interceptor<any> {17    constructor() {18      super(Symbol('secondary'))19    }20  }21 22  const instances = {23    primary: new PrimaryInterceptor(),24    secondary: new SecondaryInterceptor(),25  }26 27  const interceptor = new BatchInterceptor({28    name: 'batch-apply',29    interceptors: [instances.primary, instances.secondary],30  })31 32  const primaryApplySpy = vi.spyOn(instances.primary, 'apply')33  const secondaryApplySpy = vi.spyOn(instances.secondary, 'apply')34 35  interceptor.apply()36 37  expect(primaryApplySpy).toHaveBeenCalledTimes(1)38  expect(secondaryApplySpy).toHaveBeenCalledTimes(1)39})40 41it('proxies event listeners to the interceptors', () => {42  class PrimaryInterceptor extends Interceptor<{ hello: [string] }> {43    constructor() {44      super(Symbol('primary'))45    }46  }47 48  class SecondaryInterceptor extends Interceptor<{49    goodbye: [string]50  }> {51    constructor() {52      super(Symbol('secondary'))53    }54  }55 56  const instances = {57    primary: new PrimaryInterceptor(),58    secondary: new SecondaryInterceptor(),59  }60 61  const interceptor = new BatchInterceptor({62    name: 'batch-proxy',63    interceptors: [instances.primary, instances.secondary],64  })65 66  const helloListener = vi.fn()67  interceptor.on('hello', helloListener)68 69  const goodbyeListener = vi.fn()70  interceptor.on('goodbye', goodbyeListener)71 72  // Emulate the child interceptor emitting events.73  instances.primary['emitter'].emit('hello', 'John')74  instances.secondary['emitter'].emit('goodbye', 'Kate')75 76  // Must call the batch interceptor listener.77  expect(helloListener).toHaveBeenCalledTimes(1)78  expect(helloListener).toHaveBeenCalledWith('John')79  expect(goodbyeListener).toHaveBeenCalledTimes(1)80  expect(goodbyeListener).toHaveBeenCalledWith('Kate')81})82 83it('disposes of child interceptors', async () => {84  class PrimaryInterceptor extends Interceptor<any> {85    constructor() {86      super(Symbol('primary'))87    }88  }89 90  class SecondaryInterceptor extends Interceptor<any> {91    constructor() {92      super(Symbol('secondary'))93    }94  }95 96  const instances = {97    primary: new PrimaryInterceptor(),98    secondary: new SecondaryInterceptor(),99  }100 101  const interceptor = new BatchInterceptor({102    name: 'batch-dispose',103    interceptors: [instances.primary, instances.secondary],104  })105 106  const primaryDisposeSpy = vi.spyOn(instances.primary, 'dispose')107  const secondaryDisposeSpy = vi.spyOn(instances.secondary, 'dispose')108 109  interceptor.apply()110  interceptor.dispose()111 112  expect(primaryDisposeSpy).toHaveBeenCalledTimes(1)113  expect(secondaryDisposeSpy).toHaveBeenCalledTimes(1)114})115 116it('forwards listeners added via "on()"', () => {117  class FirstInterceptor extends Interceptor<any> {118    constructor() {119      super(Symbol('first'))120    }121  }122  class SecondaryInterceptor extends Interceptor<any> {123    constructor() {124      super(Symbol('second'))125    }126  }127 128  const firstInterceptor = new FirstInterceptor()129  const secondInterceptor = new SecondaryInterceptor()130 131  const interceptor = new BatchInterceptor({132    name: 'batch',133    interceptors: [firstInterceptor, secondInterceptor],134  })135 136  const listener = vi.fn()137  interceptor.on('foo', listener)138 139  expect(firstInterceptor['emitter'].listenerCount('foo')).toBe(1)140  expect(secondInterceptor['emitter'].listenerCount('foo')).toBe(1)141  expect(interceptor['emitter'].listenerCount('foo')).toBe(0)142})143 144it('forwards listeners removal via "off()"', () => {145  type Events = {146    foo: []147  }148 149  class FirstInterceptor extends Interceptor<Events> {150    constructor() {151      super(Symbol('first'))152    }153  }154  class SecondaryInterceptor extends Interceptor<Events> {155    constructor() {156      super(Symbol('second'))157    }158  }159 160  const firstInterceptor = new FirstInterceptor()161  const secondInterceptor = new SecondaryInterceptor()162 163  const interceptor = new BatchInterceptor({164    name: 'batch',165    interceptors: [firstInterceptor, secondInterceptor],166  })167 168  const listener = vi.fn()169  interceptor.on('foo', listener)170  interceptor.off('foo', listener)171 172  expect(firstInterceptor['emitter'].listenerCount('foo')).toBe(0)173  expect(secondInterceptor['emitter'].listenerCount('foo')).toBe(0)174})175 176it('forwards removal of all listeners by name via ".removeAllListeners()"', () => {177  type Events = {178    foo: []179    bar: []180  }181 182  class FirstInterceptor extends Interceptor<Events> {183    constructor() {184      super(Symbol('first'))185    }186  }187  class SecondaryInterceptor extends Interceptor<Events> {188    constructor() {189      super(Symbol('second'))190    }191  }192 193  const firstInterceptor = new FirstInterceptor()194  const secondInterceptor = new SecondaryInterceptor()195 196  const interceptor = new BatchInterceptor({197    name: 'batch',198    interceptors: [firstInterceptor, secondInterceptor],199  })200 201  const listener = vi.fn()202  interceptor.on('foo', listener)203  interceptor.on('foo', listener)204  interceptor.on('bar', listener)205 206  expect(firstInterceptor['emitter'].listenerCount('foo')).toBe(2)207  expect(secondInterceptor['emitter'].listenerCount('foo')).toBe(2)208  expect(firstInterceptor['emitter'].listenerCount('bar')).toBe(1)209  expect(secondInterceptor['emitter'].listenerCount('bar')).toBe(1)210 211  interceptor.removeAllListeners('foo')212 213  expect(firstInterceptor['emitter'].listenerCount('foo')).toBe(0)214  expect(secondInterceptor['emitter'].listenerCount('foo')).toBe(0)215  expect(firstInterceptor['emitter'].listenerCount('bar')).toBe(1)216  expect(secondInterceptor['emitter'].listenerCount('bar')).toBe(1)217})218 219it('forwards removal of all listeners via ".removeAllListeners()"', () => {220  class FirstInterceptor extends Interceptor<any> {221    constructor() {222      super(Symbol('first'))223    }224  }225  class SecondaryInterceptor extends Interceptor<any> {226    constructor() {227      super(Symbol('second'))228    }229  }230 231  const firstInterceptor = new FirstInterceptor()232  const secondInterceptor = new SecondaryInterceptor()233 234  const interceptor = new BatchInterceptor({235    name: 'batch',236    interceptors: [firstInterceptor, secondInterceptor],237  })238 239  const listener = vi.fn()240  interceptor.on('foo', listener)241  interceptor.on('foo', listener)242  interceptor.on('bar', listener)243 244  expect(firstInterceptor['emitter'].listenerCount('foo')).toBe(2)245  expect(secondInterceptor['emitter'].listenerCount('foo')).toBe(2)246  expect(firstInterceptor['emitter'].listenerCount('bar')).toBe(1)247  expect(secondInterceptor['emitter'].listenerCount('bar')).toBe(1)248 249  interceptor.removeAllListeners()250 251  expect(firstInterceptor['emitter'].listenerCount('foo')).toBe(0)252  expect(secondInterceptor['emitter'].listenerCount('foo')).toBe(0)253  expect(firstInterceptor['emitter'].listenerCount('bar')).toBe(0)254  expect(secondInterceptor['emitter'].listenerCount('bar')).toBe(0)255})256 
basant307/AI_Governance_Project · CoolFace