Newer
Older
import { Button, IconButton } from '@material-ui/core'
import { mount } from 'enzyme'
import toJson from 'enzyme-to-json'
import React from 'react'
import { Provider } from 'react-redux'
import * as profileActions from 'store/profile/profile.actions'
import mockClient from '../../../tests/__mocks__/client'
import { createMockEcolyoStore } from '../../../tests/__mocks__/store'
import WelcomeModal from './WelcomeModal'
jest.mock('cozy-ui/transpiled/react/I18n', () => ({
useI18n: jest.fn(() => ({
t: (str: string) => str,
})),
}))
jest.mock('cozy-client', () => {
return {
useClient: jest.fn(() => mockClient),
}
})
jest.mock('components/Hooks/useUserInstanceSettings', () => {
// eslint-disable-next-line camelcase
public_name: 'mocked_public_name',
},
}))
})
jest.mock('services/environment.service', () => {
return jest.fn(() => {
return {
getPublicURL: () => 'https://ecolyo-agent-rec.grandlyon.com',
}
})
})
const mockSendMail = jest.fn()
jest.mock('services/mail.service', () => {
return jest.fn(() => {
return {
SendMail: mockSendMail,
}
})
})
jest.mock('notifications/welcome.hbs', () => {
return jest.fn(() => {
return {
welcomeTemplate: jest.fn(),
}
})
})
jest.mock('mjml-browser', () => {
return jest.fn(() => {
return {
mjml2html: jest.fn(),
}
})
})
const updateProfileSpy = jest.spyOn(profileActions, 'updateProfile')
describe('WelcomeModal component', () => {
beforeEach(() => {
updateProfileSpy.mockClear()
})
it('should be rendered correctly', () => {
const component = mount(
<Provider store={store}>
<WelcomeModal open={true} />
</Provider>
)
expect(toJson(component)).toMatchSnapshot()
})
it('should not be rendered', () => {
const component = mount(
<Provider store={store}>
<WelcomeModal open={false} />
</Provider>
)
expect(toJson(component)).toMatchSnapshot()
})
it('should send mail and update profile when user click on the ok button', async () => {
const component = mount(
<Provider store={store}>
<WelcomeModal open={true} />
</Provider>
)
component.find(Button).first().simulate('click')
expect(mockSendMail).toBeCalled()
expect(updateProfileSpy).toHaveBeenCalledWith({
isFirstConnection: false,
onboarding: {
isWelcomeSeen: true,
},
})
})
it('should send mail and update profile when modal is closed by user', async () => {
const component = mount(
<Provider store={store}>
<WelcomeModal open={true} />
</Provider>
)
component.find(IconButton).first().simulate('click')