bntzio
8/21/2017 - 10:19 PM

HexCandy.com Reducers Tests

HexCandy.com Reducers Tests

var expect = require('expect');
var reducers = require('reducers');
var df = require('deep-freeze-strict');

describe('Reducers', () => {
  describe('candiesReducer', () => {
    it('should add new candy', () => {
      var action = {
        type: 'ADD_CANDY',
        candy: {
          id: 'zhs8a1',
          name: 'Orange',
          value: '#ff4742'
        }
      };

      var res = reducers.candiesReducer(df([]), df(action));

      expect(res.length).toEqual(1);
      expect(res[0].name).toBe(action.candy.name);
    });


    it('should add existing candies', () => {
      var candies = [{
        name: 'Blue',
        value: '#007dcc'
      }];
      var action = {
        type: 'ADD_CANDIES',
        candies
      };
      var res = reducers.candiesReducer(df([]), df(action));

      expect(res.length).toEqual(1);
      expect(res[0]).toEqual(candies[0]);
    });

    it('should remove candy', () => {
      var candies = [
        {
          id: '567',
          name: 'Pinky',
          value: '#ed317b'
        },
        {
          id: '912',
          name: 'Electric Yellow',
          value: '#fffc00'
        }
      ];
      var action = {
        type: 'REMOVE_CANDY',
        id: '567'
      };
      var res = reducers.candiesReducer(df(candies), df(action));

      expect(res.length).toEqual(1);
      expect(res[0].name).toBe('Electric Yellow');
    });

    it('should lowercase candy value before adding the candy', () => {
      var action = {
        type: 'ADD_CANDY',
        candy: {
          id: '66tfg',
          name: 'Blue',
          value: '#0000EE'
        }
      };
      var res = reducers.candiesReducer(df([]), df(action));

      expect(res[0].value).toBe('#0000ee');
    });

    it('should mofify candy value if it does not start with #', () => {
      var action = {
        type: 'ADD_CANDY',
        candy: {
          id: '49z1h2',
          name: 'Royal Purple',
          value: '6114cc'
        }
      };
      var res = reducers.candiesReducer(df([]), df(action));

      expect(res[0].value).toBe('#6114cc');
    });

    it('should wipe candies on LOGOUT', () => {
      var candies = [{
        id: '8a7stdf',
        name: 'Magenta',
        value: '#6c38b2'
      }];
      var action = {
        type: 'LOGOUT'
      };
      var res = reducers.candiesReducer(df(candies), df(action));

      expect(res.length).toEqual(0);
    });
  });

  describe('authReducer', () => {
    it('should store uid on LOGIN', () => {
      const action = {
        type: 'LOGIN',
        uid: '12fbac'
      };
      const res = reducers.authReducer(undefined, df(action));

      expect(res).toEqual({
        uid: action.uid
      });
    });

    it('should wipe auth on LOGOUT', () => {
      const authData = {
        uid: '12bhfk4'
      };
      const action = {
        type: 'LOGOUT'
      };
      const res = reducers.authReducer(df(authData), df(action));

      expect(res).toEqual({});
    });
  });
});