Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@doodle/ab-connector / src / state / saga / abSaga.spec.js
Size: Mime:
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' })));
  });
});