Repository URL to install this package:
|
Version:
3.8.1 ▾
|
import { call, takeLatest, all, put } from 'redux-saga/effects';
import { cloneableGenerator } from '@redux-saga/testing-utils';
import { pushDataLayer } from '@doodle/tagmanager';
import { ActionTypes, chooseExperiment } from '../actions/abActions';
import abSaga, {
watchPostMessage,
watchActivateOptimize,
watchUserLoadedFailed,
watchUserLoaded,
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, {}),
call(watchUserLoadedFailed),
call(watchUserLoaded),
])
);
});
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 waitForUser = false;
const user = {
loading: false,
error: null,
};
const generator = cloneableGenerator(onActivateOptimize)({}, waitForUser);
generator.next();
const currentAction = generator.next(user);
expect(currentAction.value).toEqual(
put(
pushDataLayer({
language: '',
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' })));
});
});