import React from 'react';
import sinon from 'sinon';
import { shallow } from 'enzyme';
import PageButton from '../src/page-button';
describe('PageButton', () => {
let wrapper;
const onPageChangeCallback = sinon.stub();
const props = {
onPageChange: onPageChangeCallback,
page: 2
};
describe('default PageButton', () => {
beforeEach(() => {
wrapper = shallow(
);
});
it('should rendering PageButton correctly', () => {
expect(wrapper.find('a.page-link').length).toBe(1);
expect(wrapper.text()).toEqual(`${props.page}`);
});
describe('when clicking', () => {
let preventDefault;
beforeEach(() => {
preventDefault = sinon.stub();
wrapper.find('a.page-link').simulate('click', { preventDefault });
});
afterEach(() => {
onPageChangeCallback.reset();
});
it('should calling e.preventDefault', () => {
expect(preventDefault.calledOnce).toBeTruthy();
});
it('should calling onPageChange prop', () => {
expect(onPageChangeCallback.calledOnce).toBeTruthy();
});
it('should calling onPageChange prop with correct argument', () => {
expect(onPageChangeCallback.calledWith(props.page)).toBeTruthy();
});
});
});
describe('when active prop is true', () => {
beforeEach(() => {
wrapper = shallow(
);
});
it('should render PageButton correctly', () => {
expect(wrapper.length).toBe(1);
expect(wrapper.hasClass('active')).toBeTruthy();
});
});
describe('when active prop is false', () => {
beforeEach(() => {
wrapper = shallow(
);
});
it('should render PageButton correctly', () => {
expect(wrapper.length).toBe(1);
expect(wrapper.hasClass('active')).toBeFalsy();
});
});
describe('when disabled prop is true', () => {
beforeEach(() => {
wrapper = shallow(
);
});
it('should render PageButton correctly', () => {
expect(wrapper.length).toBe(1);
expect(wrapper.hasClass('disabled')).toBeTruthy();
});
});
describe('when disabled prop is false', () => {
beforeEach(() => {
wrapper = shallow(
);
});
it('should render PageButton correctly', () => {
expect(wrapper.length).toBe(1);
expect(wrapper.hasClass('disabled')).toBeFalsy();
});
});
describe('when title prop is defined', () => {
const title = 'aTitle';
beforeEach(() => {
wrapper = shallow(
);
});
it('should render PageButton correctly', () => {
expect(wrapper.length).toBe(1);
expect(wrapper.prop('title')).toEqual(title);
});
});
});