From 237085ad9f6ebebb52d6b63ab5a948fd61e42c8f Mon Sep 17 00:00:00 2001 From: "Victor R. Braga de Sales Mascarenhasm" Date: Wed, 6 Mar 2019 18:45:36 -0300 Subject: [PATCH] about app unit test --- spec/__mocks__/electron.ts | 6 +- spec/__snapshots__/aboutApp.spec.ts.snap | 203 +++++++++++++++++++++++ spec/aboutApp.spec.ts | 38 +++++ 3 files changed, 246 insertions(+), 1 deletion(-) create mode 100644 spec/__snapshots__/aboutApp.spec.ts.snap create mode 100644 spec/aboutApp.spec.ts diff --git a/spec/__mocks__/electron.ts b/spec/__mocks__/electron.ts index 2d231defb..f7b343f0f 100644 --- a/spec/__mocks__/electron.ts +++ b/spec/__mocks__/electron.ts @@ -101,13 +101,17 @@ const ipcRenderer: IIpcRenderer = { }, }; +const remote: object = { + app, +}; + export = { app, ipcMain, ipcRenderer, powerMonitor, + remote, require: jest.fn(), match: jest.fn(), - remote: jest.fn(), dialog: jest.fn(), }; diff --git a/spec/__snapshots__/aboutApp.spec.ts.snap b/spec/__snapshots__/aboutApp.spec.ts.snap new file mode 100644 index 000000000..1c4df27d5 --- /dev/null +++ b/spec/__snapshots__/aboutApp.spec.ts.snap @@ -0,0 +1,203 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`about app should render correctly 1`] = ` +ShallowWrapper { + Symbol(enzyme.__root__): [Circular], + Symbol(enzyme.__unrendered__): , + Symbol(enzyme.__renderer__): Object { + "batchedUpdates": [Function], + "checkPropTypes": [Function], + "getNode": [Function], + "render": [Function], + "simulateError": [Function], + "simulateEvent": [Function], + "unmount": [Function], + }, + Symbol(enzyme.__node__): Object { + "instance": null, + "key": undefined, + "nodeType": "host", + "props": Object { + "children": Array [ + , + + Symphony + , + + Version 0-N/A () + , + + Copyright © 2019 Symphony + , + ], + "className": "AboutApp", + }, + "ref": null, + "rendered": Array [ + Object { + "instance": null, + "key": undefined, + "nodeType": "host", + "props": Object { + "className": "AboutApp-logo", + "src": "../assets/symphony-logo.png", + }, + "ref": null, + "rendered": null, + "type": "img", + }, + Object { + "instance": null, + "key": undefined, + "nodeType": "host", + "props": Object { + "children": "Symphony", + "className": "AboutApp-name", + }, + "ref": null, + "rendered": "Symphony", + "type": "span", + }, + Object { + "instance": null, + "key": undefined, + "nodeType": "host", + "props": Object { + "children": "Version 0-N/A ()", + "className": "AboutApp-versionText", + }, + "ref": null, + "rendered": "Version 0-N/A ()", + "type": "span", + }, + Object { + "instance": null, + "key": undefined, + "nodeType": "host", + "props": Object { + "children": "Copyright © 2019 Symphony", + "className": "AboutApp-copyrightText", + }, + "ref": null, + "rendered": "Copyright © 2019 Symphony", + "type": "span", + }, + ], + "type": "div", + }, + Symbol(enzyme.__nodes__): Array [ + Object { + "instance": null, + "key": undefined, + "nodeType": "host", + "props": Object { + "children": Array [ + , + + Symphony + , + + Version 0-N/A () + , + + Copyright © 2019 Symphony + , + ], + "className": "AboutApp", + }, + "ref": null, + "rendered": Array [ + Object { + "instance": null, + "key": undefined, + "nodeType": "host", + "props": Object { + "className": "AboutApp-logo", + "src": "../assets/symphony-logo.png", + }, + "ref": null, + "rendered": null, + "type": "img", + }, + Object { + "instance": null, + "key": undefined, + "nodeType": "host", + "props": Object { + "children": "Symphony", + "className": "AboutApp-name", + }, + "ref": null, + "rendered": "Symphony", + "type": "span", + }, + Object { + "instance": null, + "key": undefined, + "nodeType": "host", + "props": Object { + "children": "Version 0-N/A ()", + "className": "AboutApp-versionText", + }, + "ref": null, + "rendered": "Version 0-N/A ()", + "type": "span", + }, + Object { + "instance": null, + "key": undefined, + "nodeType": "host", + "props": Object { + "children": "Copyright © 2019 Symphony", + "className": "AboutApp-copyrightText", + }, + "ref": null, + "rendered": "Copyright © 2019 Symphony", + "type": "span", + }, + ], + "type": "div", + }, + ], + Symbol(enzyme.__options__): Object { + "adapter": ReactSixteenAdapter { + "options": Object { + "enableComponentDidUpdateOnSetState": true, + "legacyContextMode": "parent", + "lifecycles": Object { + "componentDidUpdate": Object { + "onSetState": true, + }, + "getChildContext": Object { + "calledByRenderer": false, + }, + "getDerivedStateFromProps": true, + "getSnapshotBeforeUpdate": true, + "setState": Object { + "skipsComponentDidUpdateOnNullish": true, + }, + }, + }, + }, + }, + Symbol(enzyme.__childContext__): null, +} +`; diff --git a/spec/aboutApp.spec.ts b/spec/aboutApp.spec.ts new file mode 100644 index 000000000..769c0d9b6 --- /dev/null +++ b/spec/aboutApp.spec.ts @@ -0,0 +1,38 @@ +import { shallow, ShallowWrapper } from 'enzyme'; +import * as React from 'react'; +import AboutApp from '../src/renderer/components/about-app'; + +describe('about app', () => { + const { ipcRenderer } = require('./__mocks__/electron'); + const aboutAppDataLabel: string = 'about-app-data'; + const aboutDataMock: object = { buildNumber: '4.x.x', clientVersion: '1', version: 'x.x.x' }; + const onLabelEvent: string = 'on'; + const removeListenerLabelEvent: string = 'removeListener'; + + it('should render correctly', () => { + const wrapper: ShallowWrapper = shallow(React.createElement(AboutApp)); + expect(wrapper).toMatchSnapshot(); + }); + + it('should call `about-app-data` event when component is mounted', () => { + const spy: jest.SpyInstance = jest.spyOn(ipcRenderer, onLabelEvent); + shallow(React.createElement(AboutApp)); + expect(spy).toBeCalledWith(aboutAppDataLabel, expect.any(Function)); + }); + + it('should remove listener `about-app-data` when component is unmounted', () => { + const spyMount: jest.SpyInstance = jest.spyOn(ipcRenderer, onLabelEvent); + const spyUnmount: jest.SpyInstance = jest.spyOn(ipcRenderer, removeListenerLabelEvent); + const wrapper: ShallowWrapper = shallow(React.createElement(AboutApp)); + expect(spyMount).toBeCalledWith(aboutAppDataLabel, expect.any(Function)); + wrapper.unmount(); + expect(spyUnmount).toBeCalledWith(aboutAppDataLabel, expect.any(Function)); + }); + + it('should call `updateState` when component is mounted', () => { + const spy: jest.SpyInstance = jest.spyOn(AboutApp.prototype, 'setState'); + shallow(React.createElement(AboutApp)); + ipcRenderer.send('about-app-data', aboutDataMock); + expect(spy).toBeCalledWith(aboutDataMock); + }); +});