@rocketsofawesome/mirage
Version:
[Live Demo of the Pattern Library](https://rocketsofawesome.github.io/mirage/)
88 lines (78 loc) • 2.8 kB
JavaScript
import React from 'react'
import 'jest-styled-components'
import { OutfitSizePicker } from 'SRC'
const { mountWithTheme } = global
const defaultProps = {
products: [
{
image: {
alt: 'Fuzzy Tiger Tee front',
src: 'https://d2lknnt52h7uhg.cloudfront.net/roa-canon/image/upload/c_scale,w_122/v1548780269/production/catalog/rfxx1bcmwy7zych1pmof.png'
},
variants: [
{sku: 'sku-1', size: 3, inStock: true},
{sku: 'sku-2', size: 4, inStock: true},
{sku: 'sku-3', size: 5, inStock: true},
{sku: 'sku-4', size: 6, inStock: true},
{sku: 'sku-5', size: 7, inStock: false},
{sku: 'sku-6', size: 9, inStock: true},
{sku: 'sku-7', size: 12, inStock: true},
],
id: '12345'
},
{
image: {
alt: 'Cool Down Active Short front',
src: 'https://d2lknnt52h7uhg.cloudfront.net/roa-canon/image/upload/c_scale,w_122/v1548780269/production/catalog/xrpiecxqwmiso3acxucc.png'
},
variants: [
{sku: 'sku-20', size: 3, inStock: true},
{sku: 'sku-21', size: 4, inStock: true},
{sku: 'sku-22', size: 5, inStock: true},
{sku: 'sku-23', size: 6, inStock: true},
{sku: 'sku-24', size: 7, inStock: false},
{sku: 'sku-25', size: 9, inStock: true},
{sku: 'sku-26', size: 12, inStock: true},
],
id: '12346'
},
],
evergreenPromoItemCount: '6',
evergreenPromoPercent: '15',
onSizeSelect: () => {}
}
describe('() OutfitSizePicker', () => {
const createOutfitSizePicker = (inProps) => {
const props = {
...defaultProps,
...inProps
}
return mountWithTheme(<OutfitSizePicker {...props} />)
}
test('matching the snapshot', () => {
expect(createOutfitSizePicker())
.toMatchSnapshot()
})
test('renders proper amount of products', () => {
expect(createOutfitSizePicker().find('.roa-product').length).toEqual(defaultProps.products.length)
})
test('fires onSizeSelect on render, setting the product id', () => {
const onSizeSelect = jest.fn()
createOutfitSizePicker({onSizeSelect: onSizeSelect})
expect(onSizeSelect.mock.calls.length).toEqual(defaultProps.products.length)
expect(onSizeSelect.mock.calls[0][0]).toBe(defaultProps.products[0].id);
expect(onSizeSelect.mock.calls[1][0]).toBe(defaultProps.products[1].id);
})
test('size should be selected when currentSizes are provided', () => {
const component = createOutfitSizePicker({
currentSizes: {
12345: 'sku-1',
12346: 'sku-26'
}
})
const selectedInputs = component.find('.selected')
expect(selectedInputs.length).toEqual(2)
expect(selectedInputs.first().text()).toEqual('3')
expect(selectedInputs.last().text()).toEqual('12')
})
})