Skip to content
Snippets Groups Projects
WelcomeModal.spec.tsx 2.94 KiB
Newer Older
  • Learn to ignore specific revisions
  • import { Button, IconButton } from '@material-ui/core'
    
    import { mount } from 'enzyme'
    import toJson from 'enzyme-to-json'
    
    import { Provider } from 'react-redux'
    import * as profileActions from 'store/profile/profile.actions'
    import mockClient from '../../../tests/__mocks__/client'
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
    import { createMockEcolyoStore } from '../../../tests/__mocks__/store'
    
    import WelcomeModal from './WelcomeModal'
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
    jest.mock('cozy-ui/transpiled/react/I18n', () => ({
      useI18n: jest.fn(() => ({
        t: (str: string) => str,
      })),
    }))
    
    jest.mock('cozy-client', () => {
      return {
        useClient: jest.fn(() => mockClient),
      }
    })
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
    jest.mock('components/Hooks/useUserInstanceSettings', () => {
    
      return jest.fn(() => ({
        data: {
    
          // 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(),
        }
      })
    })
    
    jest.mock('services/profile.service')
    
    
    const updateProfileSpy = jest.spyOn(profileActions, 'updateProfile')
    
    describe('WelcomeModal component', () => {
      beforeEach(() => {
        updateProfileSpy.mockClear()
      })
    
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
      const store = createMockEcolyoStore()
    
      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')
    
        expect(mockSendMail).toBeCalled()
        expect(updateProfileSpy).toHaveBeenCalledWith({
          isFirstConnection: false,
          onboarding: {
            isWelcomeSeen: true,
          },
        })
      })
    })