blob: 1ddded36fb45689b4edd6b2a9e0a9ac6b24f85c5 [file] [log] [blame]
import todos from './todos'
import * as types from '../constants/ActionTypes'
describe('todos reducer', () => {
it('should handle initial state', () => {
expect(
todos(undefined, {})
).toEqual([
{
text: 'Use Redux',
completed: false,
id: 0
}
])
})
it('should handle ADD_TODO', () => {
expect(
todos([], {
type: types.ADD_TODO,
text: 'Run the tests'
})
).toEqual([
{
text: 'Run the tests',
completed: false,
id: 0
}
])
expect(
todos([
{
text: 'Use Redux',
completed: false,
id: 0
}
], {
type: types.ADD_TODO,
text: 'Run the tests'
})
).toEqual([
{
text: 'Run the tests',
completed: false,
id: 1
}, {
text: 'Use Redux',
completed: false,
id: 0
}
])
expect(
todos([
{
text: 'Run the tests',
completed: false,
id: 1
}, {
text: 'Use Redux',
completed: false,
id: 0
}
], {
type: types.ADD_TODO,
text: 'Fix the tests'
})
).toEqual([
{
text: 'Fix the tests',
completed: false,
id: 2
}, {
text: 'Run the tests',
completed: false,
id: 1
}, {
text: 'Use Redux',
completed: false,
id: 0
}
])
})
it('should handle DELETE_TODO', () => {
expect(
todos([
{
text: 'Run the tests',
completed: false,
id: 1
}, {
text: 'Use Redux',
completed: false,
id: 0
}
], {
type: types.DELETE_TODO,
id: 1
})
).toEqual([
{
text: 'Use Redux',
completed: false,
id: 0
}
])
})
it('should handle EDIT_TODO', () => {
expect(
todos([
{
text: 'Run the tests',
completed: false,
id: 1
}, {
text: 'Use Redux',
completed: false,
id: 0
}
], {
type: types.EDIT_TODO,
text: 'Fix the tests',
id: 1
})
).toEqual([
{
text: 'Fix the tests',
completed: false,
id: 1
}, {
text: 'Use Redux',
completed: false,
id: 0
}
])
})
it('should handle COMPLETE_TODO', () => {
expect(
todos([
{
text: 'Run the tests',
completed: false,
id: 1
}, {
text: 'Use Redux',
completed: false,
id: 0
}
], {
type: types.COMPLETE_TODO,
id: 1
})
).toEqual([
{
text: 'Run the tests',
completed: true,
id: 1
}, {
text: 'Use Redux',
completed: false,
id: 0
}
])
})
it('should handle COMPLETE_ALL', () => {
expect(
todos([
{
text: 'Run the tests',
completed: true,
id: 1
}, {
text: 'Use Redux',
completed: false,
id: 0
}
], {
type: types.COMPLETE_ALL
})
).toEqual([
{
text: 'Run the tests',
completed: true,
id: 1
}, {
text: 'Use Redux',
completed: true,
id: 0
}
])
// Unmark if all todos are currently completed
expect(
todos([
{
text: 'Run the tests',
completed: true,
id: 1
}, {
text: 'Use Redux',
completed: true,
id: 0
}
], {
type: types.COMPLETE_ALL
})
).toEqual([
{
text: 'Run the tests',
completed: false,
id: 1
}, {
text: 'Use Redux',
completed: false,
id: 0
}
])
})
it('should handle CLEAR_COMPLETED', () => {
expect(
todos([
{
text: 'Run the tests',
completed: true,
id: 1
}, {
text: 'Use Redux',
completed: false,
id: 0
}
], {
type: types.CLEAR_COMPLETED
})
).toEqual([
{
text: 'Use Redux',
completed: false,
id: 0
}
])
})
it('should not generate duplicate ids after CLEAR_COMPLETED', () => {
expect(
[
{
type: types.COMPLETE_TODO,
id: 0
}, {
type: types.CLEAR_COMPLETED
}, {
type: types.ADD_TODO,
text: 'Write more tests'
}
].reduce(todos, [
{
id: 0,
completed: false,
text: 'Use Redux'
}, {
id: 1,
completed: false,
text: 'Write tests'
}
])
).toEqual([
{
text: 'Write more tests',
completed: false,
id: 2
}, {
text: 'Write tests',
completed: false,
id: 1
}
])
})
})