kitten-components
Version:
Front-end components library
172 lines (142 loc) • 4.23 kB
JavaScript
import React from 'react'
import renderer from 'react-test-renderer'
import {
Carousel,
getNumColumnsForWidth,
getNumPagesForColumnsAndDataLength,
checkPage,
} from 'kitten/components/carousel/carousel'
import {
ProjectCard,
MIN_WIDTH as ProjectCardMinWidth,
MARGIN_BETWEEN as ProjectCardMarginBetween,
} from 'kitten/components/cards/project-card'
const createMockMediaMatcher = matches => () => ({
matches,
addListener: () => {},
removeListener: () => {},
})
describe('<Carousel />', () => {
let originalMatchMedia
beforeEach(() => {
originalMatchMedia = window.matchMedia
})
afterEach(() => {
window.matchMedia = originalMatchMedia
})
describe('by default on desktop', () => {
window.matchMedia = createMockMediaMatcher(false) // desktop
const carousel = renderer
.create(
<Carousel
data={[{ title: 'A' }]}
itemMinWidth={ProjectCardMinWidth}
baseItemMarginBetween={ProjectCardMarginBetween}
renderItem={({ item }) => {
return <ProjectCard title={item.title} />
}}
/>,
)
.toJSON()
it('is a <Grid />', () => {
expect(carousel).toMatchSnapshot()
})
})
describe('with withoutLeftOffset on desktop', () => {
window.matchMedia = createMockMediaMatcher(false) // desktop
const carousel = renderer
.create(
<Carousel
data={[{ title: 'A' }]}
itemMinWidth={ProjectCardMinWidth}
baseItemMarginBetween={ProjectCardMarginBetween}
withoutLeftOffset={true}
renderItem={({ item }) => {
return <ProjectCard title={item.title} />
}}
/>,
)
.toJSON()
it('is a <Grid />', () => {
expect(carousel).toMatchSnapshot()
})
})
describe('by default on mobile', () => {
window.matchMedia = createMockMediaMatcher(true) // mobile
const carousel = renderer
.create(
<Carousel
data={[{ title: 'A' }]}
itemMinWidth={ProjectCardMinWidth}
baseItemMarginBetween={ProjectCardMarginBetween}
renderItem={({ item }) => {
return <ProjectCard title={item.title} />
}}
/>,
)
.toJSON()
it('is not a <Grid />', () => {
expect(carousel).toMatchSnapshot()
})
})
describe('getNumColumnsForWidth', () => {
it('5 columns', () => {
expect(getNumColumnsForWidth(1000, 150, 50)).toBe(5)
})
it('1 column', () => {
expect(getNumColumnsForWidth(300, 150, 20)).toBe(1)
})
it('0 column if no width', () => {
expect(getNumColumnsForWidth(0, 100, 10)).toBe(0)
})
it('0 column if no itemWidth', () => {
expect(getNumColumnsForWidth(800, 0, 0)).toBe(0)
})
it('NaN if not number', () => {
expect(getNumColumnsForWidth('0', '0', '0')).toBeNaN()
})
})
describe('getNumPagesForColumnsAndDataLength', () => {
it('3 pages', () => {
expect(getNumPagesForColumnsAndDataLength(7, 3)).toBe(3)
})
it('1 page', () => {
expect(getNumPagesForColumnsAndDataLength(2, 2)).toBe(1)
})
it('0 page if no dataLength', () => {
expect(getNumPagesForColumnsAndDataLength(0, 3)).toBe(0)
})
it('0 page if no numColumns', () => {
expect(getNumPagesForColumnsAndDataLength(5, 0)).toBe(0)
})
it('NaN if not number', () => {
expect(getNumPagesForColumnsAndDataLength('0', '0')).toBeNaN()
})
})
describe('checkPage', () => {
it('to page number 2', () => {
expect(checkPage(4, 2)).toBe(2)
})
it('to page number 3', () => {
expect(checkPage(4, 3)).toBe(3)
})
it('stay page number 3', () => {
expect(checkPage(4, 4)).toBe(3)
})
it('to page number 1', () => {
expect(checkPage(4, 1)).toBe(1)
})
it('to page number 0', () => {
expect(checkPage(4, 0)).toBe(0)
})
it('stay page number 0 if newPage negative', () => {
expect(checkPage(4, -1)).toBe(0)
})
it('stay page number 0 if no numPages', () => {
expect(checkPage(0, 3)).toBe(0)
})
it('stay page 0 if not number', () => {
expect(checkPage('0', '0')).toBe(0)
})
})
})