diff --git a/src/components/Feedback/FeedbackModal.spec.tsx b/src/components/Feedback/FeedbackModal.spec.tsx index f5f66fcb4adae72eb58864a37767ac66e2dad9ec..598e7b57eb404f4f8a51e1719b13d78cd0013126 100644 --- a/src/components/Feedback/FeedbackModal.spec.tsx +++ b/src/components/Feedback/FeedbackModal.spec.tsx @@ -1,190 +1,190 @@ -import React from 'react' -import * as reactRedux from 'react-redux' -import { mount } from 'enzyme' -import FeedbackModal from 'components/Feedback/FeedbackModal' - -import Button from '@material-ui/core/Button' -import { userChallengeExplo1OnGoing } from '../../../tests/__mocks__/userChallengeData.mock' -import { Provider } from 'react-redux' -import { - createMockStore, - mockInitialEcolyoState, -} from '../../../tests/__mocks__/store' -import { act } from '@testing-library/react' - -const mockSendMail = jest.fn() -jest.mock('services/mail.service', () => { - return jest.fn(() => { - return { - SendMail: mockSendMail, - } - }) -}) - -jest.mock('cozy-ui/transpiled/react/I18n', () => { - return { - useI18n: jest.fn(() => { - return { - t: (str: string) => str, - } - }), - } -}) - -const handleFeedbackModalClose = jest.fn() - -const mockUseSelector = jest.spyOn(reactRedux, 'useSelector') -const mockUseDispatch = jest.spyOn(reactRedux, 'useDispatch') - -describe('FeedbackModal component', () => { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - let store: any - beforeEach(() => { - store = createMockStore(mockInitialEcolyoState) - }) - it('should render the component', () => { - mockUseDispatch.mockReturnValue(jest.fn()) - mockUseSelector.mockReturnValue(userChallengeExplo1OnGoing) - const component = mount( - <Provider store={store}> - <FeedbackModal - open={true} - handleCloseClick={handleFeedbackModalClose} - /> - </Provider> - ).getElement() - expect(component).toMatchSnapshot() - }) -}) -describe('FeedbackModal functionnalities', () => { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - let store: any - beforeEach(() => { - store = createMockStore(mockInitialEcolyoState) - }) - it('should should send an email to the support', () => { - mockUseDispatch.mockReturnValue(jest.fn()) - mockUseSelector.mockReturnValue(userChallengeExplo1OnGoing) - - const wrapper = mount( - <Provider store={store}> - <FeedbackModal - open={true} - handleCloseClick={handleFeedbackModalClose} - /> - </Provider> - ) - - const mockPlatform = 'platform' - const mockVendor = 'vendor' - const mockUserAgent = 'userAgent' - Object.defineProperty(navigator, 'platform', { value: mockPlatform }) - Object.defineProperty(navigator, 'vendor', { value: mockVendor }) - Object.defineProperty(navigator, 'userAgent', { value: mockUserAgent }) - - const expectedMailData = { - mode: 'from', - to: [ - { - name: 'Support', - email: 'ecolyo@grandlyon.com', - }, - ], - subject: '[Ecolyo] - Feedbacks - feedback.type_bug', - attachments: [], - parts: [ - { - type: 'text/plain', - body: - 'Type: feedback.type_bug\n' + - '\n' + - 'Description:\n' + - 'La description\n' + - 'Ecolyo\n' + - 'v0.0.0\n' + - '\n' + - 'Location: http://localhost/\n' + - '\n' + - 'Browser:\n' + - 'On null\n' + - 'From null\n' + - 'null\n' + - '\n' + - 'Navigator:' + - `\nOn ${mockPlatform}` + - `\nFrom ${mockVendor}` + - `\n${mockUserAgent}`, - }, - ], - } - - wrapper - .find('div.fb-selector-item') - .first() - .simulate('click') - wrapper.find('#idFeedbackDescription').simulate('change', { - target: { - value: 'La description', - }, - }) - wrapper.find(Button).simulate('click') - - expect(mockSendMail).toHaveBeenCalledWith( - expect.anything(), - expectedMailData - ) - }) - it('should close the modal and reset the inputs', async () => { - mockUseDispatch.mockReturnValue(jest.fn()) - mockUseSelector.mockReturnValue(userChallengeExplo1OnGoing) - const wrapper = mount( - <Provider store={store}> - <FeedbackModal - open={true} - handleCloseClick={handleFeedbackModalClose} - /> - </Provider> - ) - await act(async () => { - await new Promise(resolve => setTimeout(resolve)) - wrapper.update() - }) - wrapper.find('#idFeedbackDescription').simulate('change', { - target: { - value: 'La description', - }, - }) - wrapper - .find('.modal-paper-close-button') - .first() - .simulate('click') - expect(handleFeedbackModalClose).toHaveBeenCalledTimes(1) - setTimeout(() => { - expect(wrapper.find('#idFeedbackDescription').prop('value')).toBe('') - }) - }) - it('should upload the image', async () => { - const wrapper = mount( - <Provider store={store}> - <FeedbackModal - open={true} - handleCloseClick={handleFeedbackModalClose} - /> - </Provider> - ) - await act(async () => { - await new Promise(resolve => setTimeout(resolve)) - wrapper.update() - }) - const file = new File([new ArrayBuffer(1)], 'file.jpg') - const readAsDataURLSpy = jest.spyOn(FileReader.prototype, 'readAsDataURL') - wrapper.find('#folder').simulate('change', { target: { files: [file] } }) - expect(readAsDataURLSpy).toBeCalledWith(file) - expect( - wrapper - .find('.removeUploaded') - .first() - .simulate('click') - ) - }) -}) +import React from 'react' +import * as reactRedux from 'react-redux' +import { mount } from 'enzyme' +import FeedbackModal from 'components/Feedback/FeedbackModal' + +import Button from '@material-ui/core/Button' +import { userChallengeExplo1OnGoing } from '../../../tests/__mocks__/userChallengeData.mock' +import { Provider } from 'react-redux' +import { + createMockStore, + mockInitialEcolyoState, +} from '../../../tests/__mocks__/store' +import { act } from '@testing-library/react' + +const mockSendMail = jest.fn() +jest.mock('services/mail.service', () => { + return jest.fn(() => { + return { + SendMail: mockSendMail, + } + }) +}) + +jest.mock('cozy-ui/transpiled/react/I18n', () => { + return { + useI18n: jest.fn(() => { + return { + t: (str: string) => str, + } + }), + } +}) + +const handleFeedbackModalClose = jest.fn() + +const mockUseSelector = jest.spyOn(reactRedux, 'useSelector') +const mockUseDispatch = jest.spyOn(reactRedux, 'useDispatch') + +describe('FeedbackModal component', () => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + let store: any + beforeEach(() => { + store = createMockStore(mockInitialEcolyoState) + }) + it('should render the component', () => { + mockUseDispatch.mockReturnValue(jest.fn()) + mockUseSelector.mockReturnValue(userChallengeExplo1OnGoing) + const component = mount( + <Provider store={store}> + <FeedbackModal + open={true} + handleCloseClick={handleFeedbackModalClose} + /> + </Provider> + ).getElement() + expect(component).toMatchSnapshot() + }) +}) +describe('FeedbackModal functionnalities', () => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + let store: any + beforeEach(() => { + store = createMockStore(mockInitialEcolyoState) + }) + it('should should send an email to the support', () => { + mockUseDispatch.mockReturnValue(jest.fn()) + mockUseSelector.mockReturnValue(userChallengeExplo1OnGoing) + + const wrapper = mount( + <Provider store={store}> + <FeedbackModal + open={true} + handleCloseClick={handleFeedbackModalClose} + /> + </Provider> + ) + + const mockPlatform = 'platform' + const mockVendor = 'vendor' + const mockUserAgent = 'userAgent' + Object.defineProperty(navigator, 'platform', { value: mockPlatform }) + Object.defineProperty(navigator, 'vendor', { value: mockVendor }) + Object.defineProperty(navigator, 'userAgent', { value: mockUserAgent }) + + const expectedMailData = { + mode: 'from', + to: [ + { + name: 'Support', + email: 'ecolyo@grandlyon.com', + }, + ], + subject: '[Ecolyo - alpha] - Feedbacks - feedback.type_bug', + attachments: [], + parts: [ + { + type: 'text/plain', + body: + 'Type: feedback.type_bug\n' + + '\n' + + 'Description:\n' + + 'La description\n' + + 'Ecolyo\n' + + 'v0.0.0\n' + + '\n' + + 'Location: http://localhost/\n' + + '\n' + + 'Browser:\n' + + 'On null\n' + + 'From null\n' + + 'null\n' + + '\n' + + 'Navigator:' + + `\nOn ${mockPlatform}` + + `\nFrom ${mockVendor}` + + `\n${mockUserAgent}`, + }, + ], + } + + wrapper + .find('div.fb-selector-item') + .first() + .simulate('click') + wrapper.find('#idFeedbackDescription').simulate('change', { + target: { + value: 'La description', + }, + }) + wrapper.find(Button).simulate('click') + + expect(mockSendMail).toHaveBeenCalledWith( + expect.anything(), + expectedMailData + ) + }) + it('should close the modal and reset the inputs', async () => { + mockUseDispatch.mockReturnValue(jest.fn()) + mockUseSelector.mockReturnValue(userChallengeExplo1OnGoing) + const wrapper = mount( + <Provider store={store}> + <FeedbackModal + open={true} + handleCloseClick={handleFeedbackModalClose} + /> + </Provider> + ) + await act(async () => { + await new Promise(resolve => setTimeout(resolve)) + wrapper.update() + }) + wrapper.find('#idFeedbackDescription').simulate('change', { + target: { + value: 'La description', + }, + }) + wrapper + .find('.modal-paper-close-button') + .first() + .simulate('click') + expect(handleFeedbackModalClose).toHaveBeenCalledTimes(1) + setTimeout(() => { + expect(wrapper.find('#idFeedbackDescription').prop('value')).toBe('') + }) + }) + it('should upload the image', async () => { + const wrapper = mount( + <Provider store={store}> + <FeedbackModal + open={true} + handleCloseClick={handleFeedbackModalClose} + /> + </Provider> + ) + await act(async () => { + await new Promise(resolve => setTimeout(resolve)) + wrapper.update() + }) + const file = new File([new ArrayBuffer(1)], 'file.jpg') + const readAsDataURLSpy = jest.spyOn(FileReader.prototype, 'readAsDataURL') + wrapper.find('#folder').simulate('change', { target: { files: [file] } }) + expect(readAsDataURLSpy).toBeCalledWith(file) + expect( + wrapper + .find('.removeUploaded') + .first() + .simulate('click') + ) + }) +})