Speedometer: Add a React + Redux TodoMVC implementation
[WebKit-https.git] / PerformanceTests / Speedometer / resources / todomvc / architecture-examples / react-redux / src / components / Header.spec.js
1 import React from 'react'
2 import TestUtils from 'react-addons-test-utils'
3 import Header from './Header'
4 import TodoTextInput from './TodoTextInput'
5
6 const setup = () => {
7   const props = {
8     addTodo: jest.fn()
9   }
10
11   const renderer = TestUtils.createRenderer()
12   renderer.render(<Header {...props} />)
13   const output = renderer.getRenderOutput()
14
15   return {
16     props: props,
17     output: output,
18     renderer: renderer
19   }
20 }
21
22 describe('components', () => {
23   describe('Header', () => {
24     it('should render correctly', () => {
25       const { output } = setup()
26
27       expect(output.type).toBe('header')
28       expect(output.props.className).toBe('header')
29
30       const [ h1, input ] = output.props.children
31
32       expect(h1.type).toBe('h1')
33       expect(h1.props.children).toBe('todos')
34
35       expect(input.type).toBe(TodoTextInput)
36       expect(input.props.newTodo).toBe(true)
37       expect(input.props.placeholder).toBe('What needs to be done?')
38     })
39
40     it('should call addTodo if length of text is greater than 0', () => {
41       const { output, props } = setup()
42       const input = output.props.children[1]
43       input.props.onSave('')
44       expect(props.addTodo).not.toBeCalled()
45       input.props.onSave('Use Redux')
46       expect(props.addTodo).toBeCalled()
47     })
48   })
49 })