77 lines
1.8 KiB
JavaScript
77 lines
1.8 KiB
JavaScript
import {Map, fromJS} from 'immutable';
|
|
import {expect} from 'chai';
|
|
|
|
import reducer from '../src/reducer';
|
|
|
|
describe('reducer', () => {
|
|
|
|
it('handles SET_ENTRIES', () => {
|
|
const initialState = Map();
|
|
const action = {type: 'SET_ENTRIES', entries: ['Trainspotting']};
|
|
const nextState = reducer(initialState, action);
|
|
|
|
expect(nextState).to.equal(fromJS({
|
|
entries: ['Trainspotting']
|
|
}));
|
|
});
|
|
|
|
it('handles NEXT', () => {
|
|
const initialState = fromJS({
|
|
entries: ['Trainspotting', '28 Days Later']
|
|
});
|
|
const action = {type: 'NEXT'};
|
|
const nextState = reducer(initialState, action);
|
|
|
|
expect(nextState).to.equal(fromJS({
|
|
vote: {
|
|
pair: ['Trainspotting', '28 Days Later']
|
|
},
|
|
entries: []
|
|
}));
|
|
});
|
|
|
|
it('handles VOTE', () => {
|
|
const initialState = fromJS({
|
|
vote: {
|
|
pair: ['Trainspotting', '28 Days Later']
|
|
},
|
|
entries: []
|
|
});
|
|
const action = {type: 'VOTE', entry: 'Trainspotting'};
|
|
const nextState = reducer(initialState, action);
|
|
|
|
expect(nextState).to.equal(fromJS({
|
|
vote: {
|
|
pair: ['Trainspotting', '28 Days Later'],
|
|
tally: {
|
|
Trainspotting: 1
|
|
}
|
|
},
|
|
entries: []
|
|
}));
|
|
});
|
|
|
|
it('has an initial state', () => {
|
|
const action = {type: 'SET_ENTRIES', entries: ['Trainspotting']};
|
|
const nextState = reducer(undefined, action);
|
|
expect(nextState).to.equal(fromJS({
|
|
entries: ['Trainspotting']
|
|
}));
|
|
});
|
|
|
|
it('can be used with reduce', () => {
|
|
const actions = [
|
|
{type: 'SET_ENTRIES', entries: ['Trainspotting', '28 Days Later']},
|
|
{type: 'NEXT'},
|
|
{type: 'VOTE', entry: 'Trainspotting'},
|
|
{type: 'VOTE', entry: '28 Days Later'},
|
|
{type: 'VOTE', entry: 'Trainspotting'},
|
|
{type: 'NEXT'}
|
|
];
|
|
const finalState = actions.reduce(reducer, Map());
|
|
|
|
expect(finalState).to.equal(fromJS({
|
|
winner: 'Trainspotting'
|
|
}));
|
|
});
|
|
}); |