import * as React from 'react';
import {shallow, mount, ReactWrapper, ShallowWrapper} from 'enzyme';
import PokemonShow from 'packs/frontend/components/pages/pokemon/show';
import {instance} from 'packs/frontend/api';
import {StaticRouter} from 'react-router-dom';
import MockAdapter from 'axios-mock-adapter';
const defaultProps = {
match: {
params: {
id: '1',
},
url: '/pokemon/show/1',
path: '',
isExact: false,
},
location: {} as any,
history: {} as any,
pokemon: {},
};
function setup(props = defaultProps): ShallowWrapper {
return shallow();
}
function mountSetup(props = defaultProps): ReactWrapper {
return mount(
);
}
describe('', (): void => {
it('sets default state', (): void => {
const wrapper = setup();
expect(wrapper.state('pokemon')).toEqual({id: null, nickname: null});
});
describe('componentDidMount()', (): void => {
let mock;
beforeEach(
(): void => {
mock = new MockAdapter(instance);
}
);
afterEach(
(): void => {
mock.restore();
}
);
it('persists fetched pokemon to state', async (): Promise => {
const mockData = {
id: 1,
nickname: 'Bulbasaur',
};
mock.onGet(`/api/v1/pokemon/${mockData.id}`).reply(200, mockData);
const wrapper = mountSetup();
const component = wrapper.find(PokemonShow);
await component.instance().componentDidMount();
expect(component.state('pokemon')).toEqual(mockData);
});
});
});