import React from 'react'
import { shallow } from 'enzyme'
import { TheVoice } from '../theVoice'
import { Grip, SLIDE_OFFSET, touchEndListener, touchMoveListener } from './Grip'
import { GripHandle } from './GripHandle'
describe('Grip', () => {
const defaultProps = {
onSlideUp: jest.fn(),
onSlideDown: jest.fn(),
onTouchMove: jest.fn(),
onTouchEnd: jest.fn(),
}
it('Should render a GripHandle', () => {
const grip = shallow()
expect(grip.find(GripHandle).exists()).toBe(true)
})
it('Should render its children', () => {
const grip = shallow(
Hello World
,
)
expect(grip.find(TheVoice).exists()).toBe(true)
})
describe('touchEndListener', () => {
const fingerYPosition = { current: 100 }
const resetFingerYPosition = jest.fn()
it('Should call onSlideUp when touch position is higher than initial touch', () => {
const slideUpMock = jest.fn()
touchEndListener(
fingerYPosition.current - SLIDE_OFFSET * 2,
fingerYPosition,
resetFingerYPosition,
{
...defaultProps,
onSlideUp: slideUpMock,
},
)
expect(slideUpMock).toHaveBeenCalled()
})
it('Should call onSlideDown when touch position is lower than initial touch', () => {
const slideDownMock = jest.fn()
touchEndListener(
fingerYPosition.current + SLIDE_OFFSET * 2,
fingerYPosition,
resetFingerYPosition,
{
...defaultProps,
onSlideDown: slideDownMock,
},
)
expect(slideDownMock).toHaveBeenCalled()
})
it('Should not do anything if touch position is within the SLIDE_OFFSET', () => {
const slideDownMock = jest.fn()
const slideUpMock = jest.fn()
touchEndListener(
fingerYPosition.current - SLIDE_OFFSET / 2,
fingerYPosition,
resetFingerYPosition,
{
...defaultProps,
onSlideUp: slideUpMock,
onSlideDown: slideDownMock,
},
)
touchEndListener(
fingerYPosition.current + SLIDE_OFFSET / 2,
fingerYPosition,
resetFingerYPosition,
{
...defaultProps,
onSlideUp: slideUpMock,
onSlideDown: slideDownMock,
},
)
expect(slideDownMock).not.toHaveBeenCalled()
expect(slideUpMock).not.toHaveBeenCalled()
})
})
describe('touchMoveListener', () => {
const fingerYPosition = { current: 100 }
it('Should call onTouchMove with the offset between current finger position and initial', () => {
const touchMoveMock = jest.fn()
touchMoveListener(fingerYPosition.current - 10, fingerYPosition, {
...defaultProps,
onTouchMove: touchMoveMock,
})
expect(touchMoveMock).toHaveBeenCalledWith(-10)
})
})
})