skolplattformen-backup/apps/skolplattformen-sthlm/components/__tests__/NewsListItem.test.js

87 lines
2.3 KiB
JavaScript

import { useNavigation } from '@react-navigation/native'
import { fireEvent } from '@testing-library/react-native'
import MockDate from 'mockdate'
import React from 'react'
import { render } from '../../utils/testHelpers'
import { ChildProvider } from '../childContext.component'
import { NewsListItem } from '../newsListItem.component'
jest.mock('@react-navigation/native')
jest.mock('@skolplattformen/hooks', () => ({
useApi: jest.fn().mockReturnValue({ api: { getSessionCookie: jest.fn() } }),
}))
const defaultItem = {
author: 'Köket',
intro: 'Nu blir det köttbullar',
header: 'K-bullar!',
published: '2021-02-15T09:13:28.484Z',
modified: '2021-02-15T09:13:28.484Z',
}
const setup = (customProps = {}) => {
const props = {
item: defaultItem,
...customProps,
}
return render(
<ChildProvider child={{ id: 1 }}>
<NewsListItem {...props} />
</ChildProvider>
)
}
beforeEach(() => {
MockDate.set('2021-02-15T09:30:28.484Z')
})
test('renders an article', () => {
const screen = setup()
expect(screen.getByText(/k-bullar!/i)).toBeTruthy()
expect(screen.getByText(/nu blir det köttbullar/i)).toBeTruthy()
expect(screen.getByText('Köket • för 17 minuter sedan')).toBeTruthy()
})
test('renders article without date', () => {
const itemWithInvalidDate = {
...defaultItem,
published: null,
modified: null,
}
const screen = setup({ item: itemWithInvalidDate })
expect(screen.getByText(/k-bullar!/i)).toBeTruthy()
expect(screen.getByText(/nu blir det köttbullar/i)).toBeTruthy()
expect(screen.getByText(/^köket$/i)).toBeTruthy()
})
test('falls back to modified date if no published date', () => {
const itemWithInvalidDate = {
...defaultItem,
published: null,
}
const screen = setup({ item: itemWithInvalidDate })
expect(screen.getByText(/k-bullar!/i)).toBeTruthy()
expect(screen.getByText(/nu blir det köttbullar/i)).toBeTruthy()
expect(screen.getByText('Köket • för 17 minuter sedan')).toBeTruthy()
})
test('navigates to news article on press', () => {
const navigate = jest.fn()
useNavigation.mockReturnValue({ navigate })
const screen = setup()
fireEvent.press(screen.getByText(/k-bullar!/i))
expect(navigate).toHaveBeenCalledWith('NewsItem', {
child: { id: 1 },
newsItem: defaultItem,
})
})