salsify-experiences-sdk
Version:
SDK to be used by commerce websites to implement product experiences.
68 lines (52 loc) • 1.95 kB
text/typescript
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<string, unknown> | 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)
})
})
})