import BaseEventHandler from '../index' import { EventCallbackOptions } from '../index' import { createLogger } from '../../../utils/logger' import SdkSettings from '../../../settings' import { EcRenderConfig } from '../../../enhancedContent' import { makeContext, makeSettings } from '../../../__tests__/helpers' const logger = createLogger(makeContext(), makeSettings()) describe('BaseEventHandler', () => { describe('#event_name', () => { test('implementing class overwrites base event name', () => { class EventNameClass extends BaseEventHandler { public eventName = 'test_event' } const _subject = new EventNameClass(logger) expect(_subject.eventName).toBe('test_event') }) }) describe('#handle', () => { let loggerSpy: jest.SpyInstance< void, [string, (Record | SdkSettings | EcRenderConfig | undefined)?] > beforeEach(() => { loggerSpy = jest.spyOn(logger, 'log').mockImplementation() }) afterEach(() => { loggerSpy.mockClear() }) const options = { productIdType: 'test', productId: 'test' } test('implementing class overwrites handle method', () => { const testStub = jest.fn() class HandleMethodClass extends BaseEventHandler { public eventName = 'test_event' public handle(options: EventCallbackOptions): void { // some side effect goes here testStub(options) } } const _subject = new HandleMethodClass(logger) _subject.handle(options) expect(testStub).toHaveBeenCalledTimes(1) }) test('implementing class has default handle method when not overridden', () => { class DefaultHandleClass extends BaseEventHandler { public eventName = 'test_method' } const _subject = new DefaultHandleClass(logger) _subject.handle(options) expect(loggerSpy).toHaveBeenCalledTimes(1) }) }) })