import expect from 'expect';
import Immutable from 'immutable';
import { configLoaded, configLoading, configFailed } from '../../src/actions/config';
import { config } from '../../src/reducers/config';

describe('config', () => {
  it('should handle an empty state', () => {
    expect(
      config(undefined, {})
    ).toEqual(
      null
    );
  });

  it('should handle an update', () => {
    expect(
      config(Immutable.Map({'a': 'b', 'c': 'd'}), configLoaded({'a': 'changed', 'e': 'new'}))
    ).toEqual(
      Immutable.Map({'a': 'changed', 'e': 'new'})
    );
  });

  it('should mark the config as loading', () => {
    expect(
      config(undefined, configLoading())
    ).toEqual(
      Immutable.Map({isFetching: true})
    );
  });

  it('should handle an error', () => {
    expect(
      config(Immutable.Map({isFetching: true}), configFailed(new Error('Config could not be loaded')))
    ).toEqual(
      Immutable.Map({error: 'Error: Config could not be loaded'})
    );
  });
});