From fac9bd9de709f08e8da585011c66edc78900b755 Mon Sep 17 00:00:00 2001
From: AkiraFukushima
Date: Sat, 29 Dec 2018 23:53:12 +0900
Subject: [PATCH] refs #209 Add Preferences/Appearance store tests
---
.../unit/store/Preferences/Appearance.spec.js | 132 ++++++++++++++++++
src/renderer/store/Preferences/Appearance.js | 20 +--
2 files changed, 144 insertions(+), 8 deletions(-)
create mode 100644 spec/unit/store/Preferences/Appearance.spec.js
diff --git a/spec/unit/store/Preferences/Appearance.spec.js b/spec/unit/store/Preferences/Appearance.spec.js
new file mode 100644
index 00000000..edfed799
--- /dev/null
+++ b/spec/unit/store/Preferences/Appearance.spec.js
@@ -0,0 +1,132 @@
+import Theme from '~/src/constants/theme'
+import DisplayStyle from '~/src/constants/displayStyle'
+import TimeFormat from '~/src/constants/timeFormat'
+import { LightTheme } from '~/src/renderer/utils/theme'
+import DefaultFonts from '@/utils/fonts'
+import Appearance from '@/store/Preferences/Appearance'
+import { ipcMain } from '~/spec/mock/electron'
+
+describe('Preferences/Appearance', () => {
+ let state
+ beforeEach(() => {
+ state = {
+ appearance: {
+ theme: Theme.Light.key,
+ fontSize: 14,
+ displayNameStyle: DisplayStyle.DisplayNameAndUsername.value,
+ timeFormat: TimeFormat.Absolute.value,
+ customThemeColor: LightTheme,
+ font: DefaultFonts[0]
+ },
+ fonts: []
+ }
+ })
+ describe('mutations', () => {
+ describe('updateAppearance', () => {
+ it('should be changed', () => {
+ Appearance.mutations.updateAppearance(state, {
+ theme: Theme.Dark.key
+ })
+ expect(state.appearance.theme).toEqual(Theme.Dark.key)
+ })
+ })
+ describe('updateFonts', () => {
+ it('should be changed', () => {
+ Appearance.mutations.updateFonts(state, ['font'])
+ expect(state.fonts).toEqual(['font'])
+ })
+ })
+ })
+
+ describe('actions', () => {
+ describe('loadAppearance', () => {
+ it('error', async () => {
+ ipcMain.once('get-preferences', (event, _) => {
+ event.sender.send('error-get-preferences', new LoadAppearanceError())
+ })
+ const commitMock = jest.fn()
+ await Appearance.actions.loadAppearance({ commit: commitMock })
+ .catch((err) => {
+ expect(err instanceof LoadAppearanceError).toEqual(true)
+ })
+ })
+ it('success', async () => {
+ const conf = {
+ appearance: {
+ theme: Theme.Dark.key
+ }
+ }
+ ipcMain.once('get-preferences', (event, _) => {
+ event.sender.send('response-get-preferences', conf)
+ })
+ const commitMock = jest.fn()
+ const c = await Appearance.actions.loadAppearance({ commit: commitMock })
+ expect(c).toEqual(conf)
+ expect(commitMock).toHaveBeenCalledWith('updateAppearance', conf.appearance)
+ })
+ })
+ describe('loadFonts', () => {
+ it('error', async () => {
+ ipcMain.once('list-fonts', (event, _) => {
+ event.sender.send('error-list-fonts', new ListFontsError())
+ })
+ const commitMock = jest.fn()
+ await Appearance.actions.loadFonts({ commit: commitMock })
+ .catch((err) => {
+ expect(err instanceof ListFontsError).toEqual(true)
+ })
+ })
+ it('success', async () => {
+ ipcMain.once('list-fonts', (event, _) => {
+ event.sender.send('response-list-fonts', ['fonts'])
+ })
+ const commitMock = jest.fn()
+ const fonts = await Appearance.actions.loadFonts({ commit: commitMock })
+ expect(fonts).toEqual(['fonts'])
+ expect(commitMock).toHaveBeenCalledWith('updateFonts', [DefaultFonts[0]].concat(['fonts']))
+ })
+ })
+ })
+ describe('updateTheme', () => {
+ it('error', async () => {
+ ipcMain.once('update-preferences', (event, _) => {
+ event.sender.send('error-update-preferences', new UpdateThemeError())
+ })
+ const dispatchMock = jest.fn()
+ const commitMock = jest.fn()
+ await Appearance.actions.updateTheme({ dispatch: dispatchMock, commit: commitMock, state: state }, Theme.Dark.key)
+ .catch((err) => {
+ expect(err instanceof UpdateThemeError).toEqual(true)
+ })
+ })
+ it('success', async () => {
+ ipcMain.once('update-preferences', (event, config) => {
+ event.sender.send('response-update-preferences', config)
+ })
+ const dispatchMock = jest.fn()
+ const commitMock = jest.fn()
+ const appearance = await Appearance.actions.updateTheme({ dispatch: dispatchMock, commit: commitMock, state: state }, Theme.Dark.key)
+ expect(appearance).toEqual({
+ theme: Theme.Dark.key,
+ fontSize: 14,
+ displayNameStyle: DisplayStyle.DisplayNameAndUsername.value,
+ timeFormat: TimeFormat.Absolute.value,
+ customThemeColor: LightTheme,
+ font: DefaultFonts[0]
+ })
+ expect(commitMock).toHaveBeenCalledWith('updateAppearance', {
+ theme: Theme.Dark.key,
+ fontSize: 14,
+ displayNameStyle: DisplayStyle.DisplayNameAndUsername.value,
+ timeFormat: TimeFormat.Absolute.value,
+ customThemeColor: LightTheme,
+ font: DefaultFonts[0]
+ })
+ expect(dispatchMock).toHaveBeenCalledWith('App/loadPreferences', null, { root: true })
+ })
+ })
+})
+
+class LoadAppearanceError extends Error {}
+class ListFontsError extends Error {}
+class UpdateThemeError extends Error {}
diff --git a/src/renderer/store/Preferences/Appearance.js b/src/renderer/store/Preferences/Appearance.js
index e19ecfd6..6788d4c5 100644
--- a/src/renderer/store/Preferences/Appearance.js
+++ b/src/renderer/store/Preferences/Appearance.js
@@ -62,14 +62,18 @@ export default {
const config = {
appearance: newAppearance
}
- ipcRenderer.send('update-preferences', config)
- ipcRenderer.once('error-update-preferences', (event, err) => {
- ipcRenderer.removeAllListeners('response-update-preferences')
- })
- ipcRenderer.once('response-update-preferences', (event, conf) => {
- ipcRenderer.removeAllListeners('error-update-preferences')
- commit('updateAppearance', conf.appearance)
- dispatch('App/loadPreferences', null, { root: true })
+ return new Promise((resolve, reject) => {
+ ipcRenderer.send('update-preferences', config)
+ ipcRenderer.once('error-update-preferences', (event, err) => {
+ ipcRenderer.removeAllListeners('response-update-preferences', err)
+ reject(err)
+ })
+ ipcRenderer.once('response-update-preferences', (event, conf) => {
+ ipcRenderer.removeAllListeners('error-update-preferences')
+ commit('updateAppearance', conf.appearance)
+ dispatch('App/loadPreferences', null, { root: true })
+ resolve(conf.appearance)
+ })
})
},
updateFontSize ({ dispatch, commit, state }, fontSize) {