import React from 'react'
import { mount, shallow } from 'enzyme'
import { Button } from '../button'
import { MinusIcon } from '../icon/minusIcon'
import { PlusIcon } from '../icon/plusIcon'
import { Address, Itinerary } from '../itinerary'
import { StepperDisplay } from './constants'
import { Stepper } from './Stepper'
const defaultProps = {
name: 'testName',
increaseLabel: 'Increase',
decreaseLabel: 'Decrease',
}
describe('Stepper', () => {
it('Should have classNames', () => {
const stepper = shallow(
,
)
expect(stepper.hasClass('kirk-stepper')).toBe(true)
expect(stepper.hasClass('customClassName')).toBe(true)
expect(stepper.find('.kirk-stepper-value').hasClass('valueClassName')).toBe(true)
})
it('Should have the default text & attributes', () => {
const stepper = mount(
,
)
expect(stepper.find('.kirk-stepper-content').prop('aria-label')).toEqual(
'Choose the number of passengers',
)
expect(stepper.find(Button).at(0).prop('aria-label')).toBe('Minus')
expect(stepper.find(Button).at(1).prop('aria-label')).toBe('Plus')
expect(stepper.prop('min')).toBe(Number.MIN_SAFE_INTEGER)
expect(stepper.prop('max')).toBe(Number.MAX_SAFE_INTEGER)
expect(stepper.prop('step')).toBe(1)
expect(stepper.prop('name')).toBe('test')
})
it('Should be able to increment/decrement the value', () => {
const onChange = jest.fn()
const stepper = shallow(
,
)
expect(stepper.state('value')).toBe(3)
stepper.find('.kirk-stepper-increment').simulate('click')
expect(stepper.state('value')).toBe(6)
expect(onChange).toHaveBeenCalledWith({ name: 'testName', value: 6 })
stepper.find('.kirk-stepper-decrement').simulate('click')
expect(stepper.state('value')).toBe(3)
expect(onChange).toHaveBeenCalledWith({ name: 'testName', value: 3 })
})
it('Should be able to have a max value', () => {
const stepper = shallow()
stepper.find('.kirk-stepper-increment').simulate('click')
expect(stepper.state('value')).toBe(10)
})
it('Should be able to have a min value', () => {
const stepper = shallow()
stepper.find('.kirk-stepper-decrement').simulate('click')
expect(stepper.state('value')).toBe(3)
})
it('Should have the right max value instead of wrong settings', () => {
const stepper = shallow()
expect(stepper.state('value')).toBe(5)
})
it('Should have the right min value instead of wrong settings', () => {
const stepper = shallow()
expect(stepper.state('value')).toBe(2)
})
it('Be able to format the value', () => {
const stepper = mount( `${value} €`} />)
expect(stepper.find('.kirk-stepper-value').prop('children')).toBe('2 €')
})
it('Should be able to receive props and then update the value', () => {
const stepper = mount()
// Only change the max value
stepper.setProps({ max: 3 })
expect(stepper.state('value')).toBe(3)
// Only change the min value
stepper.setProps({ min: 5 })
expect(stepper.state('value')).toBe(5)
// Set state value higher than the max value
stepper.setProps({ max: 4, min: 1, value: 5 })
expect(stepper.prop('min')).toBe(1)
expect(stepper.prop('max')).toBe(4)
expect(stepper.state('value')).toBe(4)
// Set state value lower than the min value
stepper.setProps({ min: 4, max: 8, value: 0 })
expect(stepper.prop('min')).toBe(4)
expect(stepper.prop('max')).toBe(8)
expect(stepper.state('value')).toBe(4)
})
it('Should be able to keep the right value after props change', () => {
const stepper = shallow()
stepper.find('.kirk-stepper-increment').simulate('click')
stepper.setProps({ min: 2 })
expect(stepper.state('value')).toBe(8)
})
it('Should not call onChange on componentDidMount', () => {
const onChange = jest.fn()
shallow()
expect(onChange).toHaveBeenCalledTimes(0)
})
it('Should disable buttons if disabled is true', () => {
const stepper = shallow()
expect(stepper.find(Button).at(0).prop('disabled')).toBeFalsy()
expect(stepper.find(Button).at(1).prop('disabled')).toBeFalsy()
expect(stepper.find(MinusIcon).prop('isDisabled')).toBeFalsy()
expect(stepper.find(PlusIcon).prop('isDisabled')).toBeFalsy()
stepper.setProps({ disabled: true })
expect(stepper.find(Button).at(0).prop('disabled')).toBeTruthy()
expect(stepper.find(Button).at(1).prop('disabled')).toBeTruthy()
expect(stepper.find(MinusIcon).prop('isDisabled')).toBeTruthy()
expect(stepper.find(PlusIcon).prop('isDisabled')).toBeTruthy()
})
describe('display', () => {
it('should render SMALL display', () => {
const stepper = shallow()
expect(stepper.find(MinusIcon).prop('size')).toBe(24)
expect(stepper.find(PlusIcon).prop('size')).toBe(24)
expect(stepper.find('.kirk-stepper-small').exists()).toBe(true)
})
it('should render LARGE display', () => {
const stepper = shallow()
expect(stepper.find(MinusIcon).prop('size')).toBe(48)
expect(stepper.find(PlusIcon).prop('size')).toBe(48)
expect(stepper.find('.kirk-stepper-large').exists()).toBe(true)
})
})
describe('handleFontSize', () => {
it('should call handleFontSize() on componentDidUpdate()', () => {
const stepper = shallow()
const spyHandleFontSize = jest.spyOn(Stepper.prototype, 'handleFontSize')
spyHandleFontSize.mockClear()
stepper.setProps({ value: 10 })
expect(spyHandleFontSize).toHaveBeenCalled()
})
it('should call handleFontSize() on window.resize()', () => {
shallow()
const spyHandleFontSize = jest.spyOn(Stepper.prototype, 'handleFontSize')
spyHandleFontSize.mockClear()
window.dispatchEvent(new Event('resize'))
expect(spyHandleFontSize).toHaveBeenCalled()
})
})
describe('leftAddon', () => {
const itinerary = (
)
it('should not render leftAddon if not provided', () => {
const stepper = shallow()
expect(stepper.find('.kirk-stepper-left-addon').exists()).toBe(false)
expect(stepper.find(Itinerary).exists()).toBe(false)
})
it('should not render leftAddon on large display', () => {
const stepper = shallow(
,
)
expect(stepper.find('.kirk-stepper-left-addon').exists()).toBe(false)
expect(stepper.find(Itinerary).exists()).toBe(false)
})
it('should render leftAddon on small display', () => {
const stepper = shallow(
,
)
expect(stepper.find(Itinerary).exists()).toBe(true)
})
})
})