Whalebird-desktop-client-ma.../spec/renderer/integration/store/App.spec.ts

111 lines
3.0 KiB
TypeScript

import { createLocalVue } from '@vue/test-utils'
import Vuex from 'vuex'
import { ipcMain, ipcRenderer } from '~/spec/mock/electron'
import App from '@/store/App'
import DisplayStyle from '~/src/constants/displayStyle'
import { LightTheme, DarkTheme } from '~/src/constants/themeColor'
import Theme from '~/src/constants/theme'
import TimeFormat from '~/src/constants/timeFormat'
import Language from '~/src/constants/language'
import DefaultFonts from '@/utils/fonts'
import { MyWindow } from '~/src/types/global'
;((window as any) as MyWindow).ipcRenderer = ipcRenderer
const state = () => {
return {
theme: LightTheme,
fontSize: 14,
displayNameStyle: DisplayStyle.DisplayNameAndUsername.value,
notify: {
reply: true,
reblog: true,
favourite: true,
follow: true
},
timeFormat: TimeFormat.Absolute.value,
language: Language.en.key,
defaultFonts: DefaultFonts,
ignoreCW: false,
ignoreNSFW: false,
hideAllAttachments: false
}
}
const initStore = () => {
return {
namespaced: true,
state: state(),
actions: App.actions,
mutations: App.mutations
}
}
describe('App', () => {
let store
let localVue
beforeEach(() => {
localVue = createLocalVue()
localVue.use(Vuex)
store = new Vuex.Store({
modules: {
App: initStore()
}
})
})
describe('loadPreferences', () => {
describe('error', () => {
it('should not change', async () => {
ipcMain.handle('get-preferences', async () => {
throw new Error()
})
await store.dispatch('App/loadPreferences').catch(err => {
expect(err instanceof Error).toEqual(true)
expect(store.state.App.theme).toEqual(LightTheme)
})
ipcMain.removeHandler('get-preferences')
})
})
describe('success', () => {
it('should be changed', async () => {
ipcMain.handle('get-preferences', () => {
return {
general: {
timeline: {
cw: true,
nsfw: true
}
},
language: {
language: Language.en.key
},
notification: {
notify: {
reply: true,
reblog: true,
favourite: true,
follow: true
}
},
appearance: {
theme: Theme.Dark.key,
fontSize: 13,
displayNameStyle: DisplayStyle.DisplayNameAndUsername.value,
timeFormat: TimeFormat.Absolute.value,
customThemeColor: LightTheme,
font: DefaultFonts[0]
}
}
})
await store.dispatch('App/loadPreferences')
expect(store.state.App.fontSize).toEqual(13)
expect(store.state.App.theme).toEqual(DarkTheme)
expect(store.state.App.ignoreCW).toEqual(true)
expect(store.state.App.ignoreNSFW).toEqual(true)
ipcMain.removeHandler('get-preferences')
})
})
})
})