mirror of
https://github.com/h3poteto/whalebird-desktop
synced 2025-02-03 10:47:34 +01:00
refs #209 Add Preferences/Appearance store tests
This commit is contained in:
parent
5aea56631c
commit
fac9bd9de7
132
spec/unit/store/Preferences/Appearance.spec.js
Normal file
132
spec/unit/store/Preferences/Appearance.spec.js
Normal file
@ -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 {}
|
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user