import todos from './todos';

describe('todos reducer', () => {
  it('should handle initial state', () => {
    expect(todos(undefined, {})).toEqual([]);
  });

  it('should handle ADD_TODO', () => {
    expect(
      todos([], {
        type: 'ADD_TODO',
        text: 'Run the tests',
        id: 0,
      }),
    ).toEqual([
      {
        text: 'Run the tests',
        completed: false,
        id: 0,
      },
    ]);

    expect(
      todos(
        [
          {
            text: 'Run the tests',
            completed: false,
            id: 0,
          },
        ],
        {
          type: 'ADD_TODO',
          text: 'Use Redux',
          id: 1,
        },
      ),
    ).toEqual([
      {
        text: 'Run the tests',
        completed: false,
        id: 0,
      },
      {
        text: 'Use Redux',
        completed: false,
        id: 1,
      },
    ]);

    expect(
      todos(
        [
          {
            text: 'Run the tests',
            completed: false,
            id: 0,
          },
          {
            text: 'Use Redux',
            completed: false,
            id: 1,
          },
        ],
        {
          type: 'ADD_TODO',
          text: 'Fix the tests',
          id: 2,
        },
      ),
    ).toEqual([
      {
        text: 'Run the tests',
        completed: false,
        id: 0,
      },
      {
        text: 'Use Redux',
        completed: false,
        id: 1,
      },
      {
        text: 'Fix the tests',
        completed: false,
        id: 2,
      },
    ]);
  });

  it('should handle TOGGLE_TODO', () => {
    expect(
      todos(
        [
          {
            text: 'Run the tests',
            completed: false,
            id: 1,
          },
          {
            text: 'Use Redux',
            completed: false,
            id: 0,
          },
        ],
        {
          type: 'TOGGLE_TODO',
          id: 1,
        },
      ),
    ).toEqual([
      {
        text: 'Run the tests',
        completed: true,
        id: 1,
      },
      {
        text: 'Use Redux',
        completed: false,
        id: 0,
      },
    ]);
  });
});
