Repository URL to install this package:
|
Version:
3.7.1 ▾
|
import { call, takeLatest, all, put } from 'redux-saga/effects';
import { cloneableGenerator } from 'redux-saga/utils';
import { pushDataLayer } from '@doodle/tagmanager';
import { ActionTypes, chooseExperiment } from '../actions/abActions';
import abSaga, { watchPostMessage, watchActivateOptimize, onActivateOptimize, onMessage } from './abSaga';
describe('abSaga', () => {
test('should call all watchers', () => {
const generator = cloneableGenerator(abSaga)();
expect(generator.next().value).toEqual(all([call(watchPostMessage, {}), call(watchActivateOptimize, {})]));
});
test('should react on opimizeActivate', () => {
const generator = cloneableGenerator(watchActivateOptimize)();
expect(generator.next().value).toEqual(takeLatest(ActionTypes.OPTIMIZE_ACTIVATE, onActivateOptimize, undefined));
});
test('should register an event listener to the "message" event on window', () => {
jest.spyOn(window, 'addEventListener');
const generator = cloneableGenerator(watchPostMessage)();
generator.next();
expect(window.addEventListener).toHaveBeenCalledWith('message', expect.any(Function));
});
test('should push event to data layer', async () => {
const generator = cloneableGenerator(onActivateOptimize)();
const currentAction = generator.next();
expect(currentAction.value).toEqual(
put(
pushDataLayer({
language: 'en-US',
event: 'optimize.activate',
})
)
);
});
test('should choose experiment variant', () => {
const generator = cloneableGenerator(onMessage)({ data: { experiment: { variant: 'var-1', name: 'name-a' } } });
expect(generator.next().value).toEqual(put(chooseExperiment({ variant: 'var-1', name: 'name-a' })));
});
});