import React from 'react';
import { configure, mount } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import { Provider } from 'react-redux';
import StoriesSummary, {
  reducer,
  actions,
  actionTypes,
  middleware,
} from './index';
import StoriesSummaryTable from './components/StoriesSummaryTable';
import mockStories from './mocks';

configure({ adapter: new Adapter() });
const storeFake = state => ({
  default: () => {},
  subscribe: () => {},
  dispatch: () => {},
  getState: () => ({ ...state }),
});

describe('StoriesSummaryTable', () => {
  it('should render with empty metrics', () => {
    const store = storeFake({
      storiesSummary: {
        loading: false,
        metrics: [],
      },
      date: {
        statDate: '23/07/2019',
        endDate: '30/07/2019',
      },
    });
    const wrapper = mount(
      <Provider store={store}>
        <StoriesSummary />
      </Provider>,
    );
    expect(wrapper.find(StoriesSummaryTable).length)
      .toBe(1);
  });

  it('should render with loading screen', () => {
    const store = storeFake({
      storiesSummary: {
        loading: true,
        metrics: [],
      },
      date: {
        statDate: '23/07/2019',
        endDate: '30/07/2019',
      },
    });
    const wrapper = mount(
      <Provider store={store}>
        <StoriesSummary />
      </Provider>,
    );
    expect(wrapper.find(StoriesSummaryTable).length)
      .toBe(1);
  });

  it('should render with metrics', () => {
    const store = storeFake({
      storiesSummary: {
        loading: false,
        metrics: mockStories,
      },
      date: {
        statDate: '23/07/2019',
        endDate: '30/07/2019',
      },
    });
    const wrapper = mount(
      <Provider store={store}>
        <StoriesSummary />
      </Provider>,
    );
    expect(wrapper.find(StoriesSummaryTable).length)
      .toBe(1);
  });

  it('should export reducer', () => {
    expect(reducer)
      .toBeDefined();
  });

  it('should export actions', () => {
    expect(actions)
      .toBeDefined();
  });

  it('should export actionTypes', () => {
    expect(actionTypes)
      .toBeDefined();
  });

  it('should export middleware', () => {
    expect(middleware)
      .toBeDefined();
  });
});
