159 lines
3.9 KiB
JavaScript
159 lines
3.9 KiB
JavaScript
import { fireEvent } from '@testing-library/react-native'
|
|
import React from 'react'
|
|
import RNCalendarEvents from 'react-native-calendar-events'
|
|
import Toast from 'react-native-simple-toast'
|
|
import { render } from '../../utils/testHelpers'
|
|
import { SaveToCalendar } from '../saveToCalendar.component'
|
|
|
|
jest.mock('react-native-simple-toast', () => ({
|
|
SHORT: 'short',
|
|
BOTTOM: 'bottom',
|
|
showWithGravity: jest.fn(),
|
|
}))
|
|
|
|
jest.mock('react-native', () => {
|
|
const RN = jest.requireActual('react-native')
|
|
|
|
RN.UIManager.measureInWindow = (_node, callback) => {
|
|
callback(0, 0, 42, 42)
|
|
}
|
|
|
|
RN.Linking = {
|
|
openURL: jest.fn(),
|
|
}
|
|
|
|
return RN
|
|
})
|
|
|
|
jest.mock('react-native-calendar-events', () => ({
|
|
saveEvent: jest.fn().mockResolvedValue('52'),
|
|
requestPermissions: jest.fn().mockResolvedValue('authorized'),
|
|
}))
|
|
|
|
const defaultEvent = {
|
|
title: 'Utvecklingssamtal',
|
|
startDate: '2021-06-19 13:00',
|
|
endDate: '2021-06-19 14:00',
|
|
location: 'Gubbängsskolan',
|
|
}
|
|
|
|
const defaultProps = {
|
|
event: defaultEvent,
|
|
}
|
|
|
|
const setup = (customProps = {}) => {
|
|
const props = {
|
|
...defaultProps,
|
|
...customProps,
|
|
}
|
|
|
|
return render(<SaveToCalendar {...props} />)
|
|
}
|
|
|
|
beforeAll(() => {
|
|
// Hide errors from state illegal state transition
|
|
// Probably due to mock
|
|
jest.spyOn(console, 'error').mockImplementation(() => {
|
|
// noop
|
|
})
|
|
})
|
|
|
|
beforeEach(jest.clearAllMocks)
|
|
|
|
test('renders save to calendar', () => {
|
|
const screen = setup()
|
|
|
|
fireEvent.press(screen.getByTestId('actionsButton'))
|
|
|
|
expect(screen.getByText(/Spara/i)).toBeTruthy()
|
|
})
|
|
|
|
test('requests calendar permissons', () => {
|
|
const screen = setup()
|
|
|
|
fireEvent.press(screen.getByTestId('actionsButton'))
|
|
fireEvent.press(screen.getByText(/Spara/i))
|
|
|
|
expect(RNCalendarEvents.requestPermissions).toHaveBeenCalled()
|
|
})
|
|
|
|
test('can save an event to the calendar', async () => {
|
|
const screen = setup({
|
|
event: {
|
|
...defaultEvent,
|
|
location: null,
|
|
description: null,
|
|
},
|
|
})
|
|
|
|
fireEvent.press(screen.getByTestId('actionsButton'))
|
|
fireEvent.press(screen.getByText(/Spara/i))
|
|
await RNCalendarEvents.requestPermissions()
|
|
|
|
expect(RNCalendarEvents.saveEvent).toHaveBeenCalledWith('Utvecklingssamtal', {
|
|
startDate: '2021-06-19T11:00:00.000Z',
|
|
endDate: '2021-06-19T12:00:00.000Z',
|
|
})
|
|
})
|
|
|
|
test('removes any null values from the event', async () => {
|
|
const screen = setup()
|
|
|
|
fireEvent.press(screen.getByTestId('actionsButton'))
|
|
fireEvent.press(screen.getByText(/Spara/i))
|
|
await RNCalendarEvents.requestPermissions()
|
|
|
|
expect(RNCalendarEvents.saveEvent).toHaveBeenCalledWith('Utvecklingssamtal', {
|
|
startDate: '2021-06-19T11:00:00.000Z',
|
|
endDate: '2021-06-19T12:00:00.000Z',
|
|
location: 'Gubbängsskolan',
|
|
})
|
|
})
|
|
|
|
test('calls toast with success', async () => {
|
|
const screen = setup()
|
|
|
|
fireEvent.press(screen.getByTestId('actionsButton'))
|
|
fireEvent.press(screen.getByText(/Spara/i))
|
|
await RNCalendarEvents.requestPermissions()
|
|
await RNCalendarEvents.saveEvent()
|
|
|
|
expect(Toast.showWithGravity).toHaveBeenCalledWith(
|
|
'✔️ Sparad till kalender',
|
|
'short',
|
|
'bottom'
|
|
)
|
|
})
|
|
|
|
test('says if something goes wrong', async () => {
|
|
const screen = setup()
|
|
RNCalendarEvents.saveEvent.mockRejectedValueOnce()
|
|
|
|
fireEvent.press(screen.getByTestId('actionsButton'))
|
|
fireEvent.press(screen.getByText(/Spara/i))
|
|
await RNCalendarEvents.requestPermissions()
|
|
await RNCalendarEvents.saveEvent()
|
|
|
|
expect(Toast.showWithGravity).toHaveBeenCalledWith(
|
|
'Något gick fel',
|
|
'short',
|
|
'bottom'
|
|
)
|
|
})
|
|
|
|
test('tells user if they havent authorized calendar', async () => {
|
|
const screen = setup()
|
|
RNCalendarEvents.requestPermissions.mockResolvedValueOnce('not auth')
|
|
|
|
fireEvent.press(screen.getByTestId('actionsButton'))
|
|
fireEvent.press(screen.getByText(/Spara/i))
|
|
await RNCalendarEvents.requestPermissions()
|
|
await RNCalendarEvents.saveEvent()
|
|
|
|
expect(Toast.showWithGravity).toHaveBeenCalledWith(
|
|
'Du måste godkänna åtkomst till kalendern',
|
|
'short',
|
|
'bottom'
|
|
)
|
|
})
|