import configureStore from 'redux-mock-store';
import AccountSettingsPage from './settings.page';
import React from 'react';
import ReactTestRenderer from 'react-test-renderer';
import { MemoryRouter } from 'react-router-dom';
import { Provider } from 'react-redux';
import Enzyme, { mount } from 'enzyme/build/index';
import Adapter from 'enzyme-adapter-react-16/build/index';
import { AUTH } from 'app/common/store/auth/auth.constants';

jest.mock('app/common/store', () => ({
  history: { push: () => {} },
}));

describe('Account page tests', () => {
  Enzyme.configure({ adapter: new Adapter() });
  const countryCode = 'dk';

  const initialState = {
    user: {
      current: {
        name: 'Test name',
      },
      data:{
        country: countryCode,
        countryCode: countryCode,
      },
      role: AUTH.ROLE.USER,
      permissions: [
        'userPassword.change',
      ],
    },
  };
  const mockStore = configureStore();
  let store;

  beforeEach(() => {
    store = mockStore(initialState);
    store.dispatch = jest.fn();
  });

  it('renders page correctly', () => {
    const tree = ReactTestRenderer
      .create(
        <Provider store={store}>
          <MemoryRouter>
            <AccountSettingsPage/>
          </MemoryRouter>
        </Provider>
      )
      .toJSON();
    expect(tree).toMatchSnapshot();
  });

  it('dispatch sendChangePwdEmail action when reset password clicked', () => {
    const wrapper = mount(<Provider store={store}>
      <AccountSettingsPage />
    </Provider>);
    wrapper.find('.js-change-password-hit-area').simulate('click');
    expect(store.dispatch).toHaveBeenCalledWith({ type: AUTH.AUTH_SEND_CHANGE_PWD_EMAIL });
  });
});
