import { fireEvent, render, within } from '@testing-library/react-native'
import * as React from 'react'
import { Provider } from 'react-redux'
import { AlertTypes } from 'src/alert/actions'
import AlertBanner from 'src/alert/AlertBanner'
import { ErrorDisplayType } from 'src/alert/reducer'
import { createMockStore } from 'test/utils'
describe('AlertBanner', () => {
describe('when message passed in', () => {
it('renders message', () => {
const { getByTestId } = render(
)
expect(
within(getByTestId('infoBanner')).getByText('This is your shadow speaking')
).toBeTruthy()
})
})
describe('when message and title passed in', () => {
it('renders title with message', () => {
const { getByTestId } = render(
)
const banner = getByTestId('infoBanner')
expect(banner).toHaveTextContent('Declaration')
expect(banner).toHaveTextContent('This is your shadow speaking')
})
})
describe('when error message passed in', () => {
it('renders error message', () => {
const { getByTestId } = render(
)
expect(within(getByTestId('errorBanner')).getByText('This is an error')).toBeTruthy()
})
})
describe('when an action is provided', () => {
it('dispatches the action when pressed', () => {
const store = createMockStore({
alert: {
type: AlertTypes.MESSAGE,
displayMethod: ErrorDisplayType.BANNER,
message: 'My message',
dismissAfter: 0,
action: { type: 'MY_ACTION' },
},
})
const { getByTestId } = render(
)
fireEvent.press(getByTestId('SmartTopAlertTouchable'))
expect(store.getActions()).toEqual([{ type: 'MY_ACTION' }])
})
})
describe('bottom toast with action alert', () => {
it('displays and dispatches the action', () => {
const store = createMockStore({
alert: {
type: AlertTypes.TOAST,
displayMethod: ErrorDisplayType.BANNER,
message: 'My precious toast',
buttonMessage: 'Some button label',
action: { type: 'MY_ACTION' },
},
})
const { getByText, queryByTestId } = render(
)
expect(getByText('My precious toast')).toBeTruthy()
expect(queryByTestId('SmartTopAlertTouchable')).toBeFalsy()
fireEvent.press(getByText('Some button label'))
expect(store.getActions()).toEqual([{ type: 'MY_ACTION' }])
})
})
})