Login/component.spec.js
/* global describe, it, expect, jest */
import React from 'react'
import { Button } from 'react-native'
import { shallow } from 'enzyme'
import * as Forms from './Forms'
import Login from '../'
describe('Login component', () => {
it('can render correctly', () => {
expect(shallow(
<Login onLogin={jest.fn()} />
)).toMatchSnapshot()
})
it('can render correctly with reset password', () => {
const wrapper = shallow(
<Login onLogin={jest.fn()} onResetPassword={jest.fn()} />
)
wrapper.setState({ resetPasswordActive: true })
expect(wrapper).toMatchSnapshot()
})
it('correctly calls the onLogin when the login form is submitted', () => {
Forms.LoginForm = (props) => {
return (
<Button
title='submit'
onPress={() => props.onLogin('email', 'password')} />
)
}
Forms.LoginForm.displayName = 'LoginForm'
const onLogin = jest.fn()
const wrapper = shallow(
<Login onLogin={onLogin} />
)
wrapper.shallow().find('Button').simulate('press')
expect(onLogin.mock.calls.length).toEqual(1)
expect(onLogin.mock.calls[0]).toEqual(['email', 'password'])
})
it('correctly calls the onResetPassword when the reset password form is submitted', () => {
Forms.ResetPasswordForm = (props) => {
return (
<Button
title='submit'
onPress={() => props.onResetPassword('email')} />
)
}
Forms.ResetPasswordForm.displayName = 'ResetPasswordForm'
const onResetPassword = jest.fn()
const wrapper = shallow(
<Login onLogin={jest.fn()} onResetPassword={onResetPassword} />
)
wrapper.setState({ resetPasswordActive: true })
wrapper.shallow().find('Button').simulate('press')
expect(onResetPassword.mock.calls.length).toEqual(1)
expect(onResetPassword.mock.calls[0]).toEqual(['email'])
})
describe('navigation between login and reset password', () => {
it('shows the reset password form when the link on login is pressed', () => {
Forms.LoginForm = (props) => {
return (
<Button
title='go to reset password'
onPress={() => props.onResetPasswordClick()} />
)
}
Forms.LoginForm.displayName = 'LoginForm'
const wrapper = shallow(
<Login onLogin={jest.fn()} onResetPassword={jest.fn()} />
)
wrapper.setState({ resetPasswordActive: false })
wrapper.shallow().find('Button').simulate('press')
expect(wrapper.state('resetPasswordActive')).toEqual(true)
})
it('shows the login form when the reset password form is submited', () => {
Forms.ResetPasswordForm = (props) => {
return (
<Button
title='submit'
onPress={() => props.onResetPassword('email')} />
)
}
Forms.ResetPasswordForm.displayName = 'ResetPasswordForm'
const wrapper = shallow(
<Login onLogin={jest.fn()} onResetPassword={jest.fn()} />
)
wrapper.setState({ resetPasswordActive: true })
wrapper.shallow().find('Button').simulate('press')
expect(wrapper.state('resetPasswordActive')).toEqual(false)
})
})
})