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 / dist / state / saga / abSaga.spec.js
Size: Mime:
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' })));
  });
});