Skip to content

Commit

Permalink
Merge pull request #1159 from h3poteto/fix/electron-mock-ipc
Browse files Browse the repository at this point in the history
 Update jest version to 24.9.0 and fix some tests
  • Loading branch information
h3poteto committed Dec 4, 2019
2 parents d18f885 + 6d59ea6 commit 80f978b
Show file tree
Hide file tree
Showing 36 changed files with 1,085 additions and 1,192 deletions.
1,606 changes: 712 additions & 894 deletions package-lock.json

Large diffs are not rendered by default.

5 changes: 2 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -144,8 +144,7 @@
"moduleNameMapper": {
"@/router": "<rootDir>/spec/mock/router.ts",
"^@/(.+)": "<rootDir>/src/renderer/$1",
"^~/(.+)": "<rootDir>/$1",
"electron": "<rootDir>/spec/mock/electron.ts"
"^~/(.+)": "<rootDir>/$1"
},
"testMatch": [
"**/spec/**/*.spec.ts"
Expand Down Expand Up @@ -263,7 +262,7 @@
"eslint-plugin-vue": "^5.2.2",
"file-loader": "^2.0.0",
"html-webpack-plugin": "^3.2.0",
"jest": "^24.5.0",
"jest": "^24.9.0",
"jsdom": "^15.2.1",
"json-loader": "^0.5.7",
"listr": "^0.14.3",
Expand Down
5 changes: 5 additions & 0 deletions spec/main/unit/proxy.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@ import { ManualProxy, ProxyProtocol } from '~/src/types/proxy'
const preferencesDBPath = path.resolve(__dirname, '../../preferences.json')
const proxyConfiguration = new ProxyConfiguration(preferencesDBPath)

// electron.app is using in electron-json-storage
jest.mock('electron', () => ({
app: jest.fn()
}))

describe('Parser', () => {
it('do not use proxy', () => {
proxyConfiguration.setSystemProxy('DIRECT')
Expand Down
4 changes: 3 additions & 1 deletion spec/renderer/integration/store/App.spec.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
import { createLocalVue } from '@vue/test-utils'
import Vuex from 'vuex'
import { ipcMain } from '~/spec/mock/electron'
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 MyWindow).ipcRenderer = ipcRenderer

const state = () => {
return {
Expand Down
4 changes: 3 additions & 1 deletion spec/renderer/integration/store/GlobalHeader.spec.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import { createLocalVue } from '@vue/test-utils'
import Vuex from 'vuex'
import { ipcMain } from '~/spec/mock/electron'
import { ipcMain, ipcRenderer } from '~/spec/mock/electron'
import GlobalHeader, { GlobalHeaderState } from '~/src/renderer/store/GlobalHeader'
import { MyWindow } from '~/src/types/global'
;(window as MyWindow).ipcRenderer = ipcRenderer

const state = (): GlobalHeaderState => {
return {
Expand Down
4 changes: 3 additions & 1 deletion spec/renderer/integration/store/Login.spec.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import { createLocalVue } from '@vue/test-utils'
import Vuex from 'vuex'
import { ipcMain } from '~/spec/mock/electron'
import { ipcMain, ipcRenderer } from '~/spec/mock/electron'
import Mastodon, { Instance, Response } from 'megalodon'
import Login, { LoginState } from '@/store/Login'
import { MyWindow } from '~/src/types/global'
;(window as MyWindow).ipcRenderer = ipcRenderer

jest.mock('megalodon')

Expand Down
4 changes: 3 additions & 1 deletion spec/renderer/integration/store/Preferences/Account.spec.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import { createLocalVue } from '@vue/test-utils'
import Vuex from 'vuex'
import { ipcMain } from '~/spec/mock/electron'
import { ipcMain, ipcRenderer } from '~/spec/mock/electron'
import Account, { AccountState } from '@/store/Preferences/Account'
import { LocalAccount } from '~/src/types/localAccount'
import { MyWindow } from '~/src/types/global'
;(window as MyWindow).ipcRenderer = ipcRenderer

const account: LocalAccount = {
_id: 'sample',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@ import TimeFormat from '~/src/constants/timeFormat'
import { LightTheme, DarkTheme } from '~/src/constants/themeColor'
import DefaultFonts from '@/utils/fonts'
import Appearance, { AppearanceState } from '@/store/Preferences/Appearance'
import { ipcMain } from '~/spec/mock/electron'
import { ipcMain, ipcRenderer } from '~/spec/mock/electron'
import { MyWindow } from '~/src/types/global'
;(window as MyWindow).ipcRenderer = ipcRenderer

const state = (): AppearanceState => {
return {
Expand Down
4 changes: 3 additions & 1 deletion spec/renderer/integration/store/Preferences/General.spec.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import { createLocalVue } from '@vue/test-utils'
import Vuex from 'vuex'
import { ipcMain } from '~/spec/mock/electron'
import { ipcMain, ipcRenderer } from '~/spec/mock/electron'
import General, { GeneralState } from '@/store/Preferences/General'
import { MyWindow } from '~/src/types/global'
;(window as MyWindow).ipcRenderer = ipcRenderer

const state = (): GeneralState => {
return {
Expand Down
4 changes: 3 additions & 1 deletion spec/renderer/integration/store/Preferences/Language.spec.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import { createLocalVue } from '@vue/test-utils'
import Vuex from 'vuex'
import { ipcMain } from '~/spec/mock/electron'
import { ipcMain, ipcRenderer } from '~/spec/mock/electron'
import Language, { LanguageState } from '@/store/Preferences/Language'
import DefaultLanguage from '~/src/constants/language'
import { MyWindow } from '~/src/types/global'
;(window as MyWindow).ipcRenderer = ipcRenderer

const state = (): LanguageState => {
return {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import { createLocalVue } from '@vue/test-utils'
import Vuex from 'vuex'
import { ipcMain } from '~/spec/mock/electron'
import { ipcMain, ipcRenderer } from '~/spec/mock/electron'
import Notification, { NotificationState } from '@/store/Preferences/Notification'
import { MyWindow } from '~/src/types/global'
;(window as MyWindow).ipcRenderer = ipcRenderer

const state = (): NotificationState => {
return {
Expand Down
4 changes: 3 additions & 1 deletion spec/renderer/integration/store/TimelineSpace.spec.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import Mastodon, { Emoji, Instance, Response } from 'megalodon'
import { createLocalVue } from '@vue/test-utils'
import Vuex from 'vuex'
import { ipcMain } from '~/spec/mock/electron'
import { ipcMain, ipcRenderer } from '~/spec/mock/electron'
import TimelineSpace, { TimelineSpaceState, blankAccount } from '~/src/renderer/store/TimelineSpace'
import unreadSettings from '~/src/constants/unreadNotification'
import { MyWindow } from '~/src/types/global'
;(window as MyWindow).ipcRenderer = ipcRenderer

jest.mock('megalodon')

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import { IpcMainEvent } from 'electron'
import { createLocalVue } from '@vue/test-utils'
import { ipcMain } from '~/spec/mock/electron'
import { ipcMain, ipcRenderer } from '~/spec/mock/electron'
import Vuex from 'vuex'
import { LocalTag } from '~/src/types/localTag'
import List, { ListState } from '@/store/TimelineSpace/Contents/Hashtag/List'
import { MyWindow } from '~/src/types/global'
;(window as MyWindow).ipcRenderer = ipcRenderer

const tag1: LocalTag = {
tagName: 'tag1',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@ import { Response, List } from 'megalodon'
import mockedMegalodon from '~/spec/mock/megalodon'
import { createLocalVue } from '@vue/test-utils'
import Vuex from 'vuex'
import { ipcMain } from '~/spec/mock/electron'
import { ipcMain, ipcRenderer } from '~/spec/mock/electron'
import SideMenu, { SideMenuState } from '~/src/renderer/store/TimelineSpace/SideMenu'
import { LocalTag } from '~/src/types/localTag'
import { MyWindow } from '~/src/types/global'
;(window as MyWindow).ipcRenderer = ipcRenderer

jest.mock('megalodon')

Expand Down
1 change: 1 addition & 0 deletions src/main/preload.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
const electron = require('electron')
const path = require('path')
const mod = require('module')

global.ipcRenderer = electron.ipcRenderer
global.shell = electron.shell
global.clipboard = electron.clipboard
Expand Down
22 changes: 12 additions & 10 deletions src/renderer/store/App.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@ import { Notify } from '~/src/types/notify'
import { BaseConfig } from '~/src/types/preference'
import { Appearance } from '~/src/types/appearance'
import { ProxyConfig } from 'megalodon'
import { ipcRenderer } from 'electron'
import { MyWindow } from '~/src/types/global'

const win = window as MyWindow

export type AppState = {
theme: ThemeColorType
Expand Down Expand Up @@ -107,22 +109,22 @@ const mutations: MutationTree<AppState> = {

const actions: ActionTree<AppState, RootState> = {
watchShortcutsEvents: () => {
ipcRenderer.on('open-preferences', () => {
win.ipcRenderer.on('open-preferences', () => {
router.push('/preferences/general')
})
},
removeShortcutsEvents: () => {
ipcRenderer.removeAllListeners('open-preferences')
win.ipcRenderer.removeAllListeners('open-preferences')
},
loadPreferences: ({ commit, dispatch }) => {
return new Promise((resolve, reject) => {
ipcRenderer.send('get-preferences')
ipcRenderer.once('error-get-preferences', (_, err: Error) => {
ipcRenderer.removeAllListeners('response-get-preferences')
win.ipcRenderer.send('get-preferences')
win.ipcRenderer.once('error-get-preferences', (_, err: Error) => {
win.ipcRenderer.removeAllListeners('response-get-preferences')
reject(err)
})
ipcRenderer.once('response-get-preferences', (_, conf: BaseConfig) => {
ipcRenderer.removeAllListeners('error-get-preferences')
win.ipcRenderer.once('response-get-preferences', (_, conf: BaseConfig) => {
win.ipcRenderer.removeAllListeners('error-get-preferences')
dispatch('updateTheme', conf.appearance)
commit(MUTATION_TYPES.UPDATE_DISPLAY_NAME_STYLE, conf.appearance.displayNameStyle)
commit(MUTATION_TYPES.UPDATE_FONT_SIZE, conf.appearance.fontSize)
Expand Down Expand Up @@ -166,11 +168,11 @@ const actions: ActionTree<AppState, RootState> = {
},
loadProxy: ({ commit }) => {
return new Promise(resolve => {
ipcRenderer.once('response-get-proxy-configuration', (_, proxy: ProxyConfig | false) => {
win.ipcRenderer.once('response-get-proxy-configuration', (_, proxy: ProxyConfig | false) => {
commit(MUTATION_TYPES.UPDATE_PROXY_CONFIGURATION, proxy)
resolve(proxy)
})
ipcRenderer.send('get-proxy-configuration')
win.ipcRenderer.send('get-proxy-configuration')
})
}
}
Expand Down
14 changes: 8 additions & 6 deletions src/renderer/store/Authorize.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import { ipcRenderer } from 'electron'
import { Module, ActionTree } from 'vuex'
import { RootState } from '@/store'
import { MyWindow } from '~/src/types/global'

const win = window as MyWindow

export type AuthorizeState = {}

Expand All @@ -9,13 +11,13 @@ const state = (): AuthorizeState => ({})
const actions: ActionTree<AuthorizeState, RootState> = {
submit: (_, code: string) => {
return new Promise((resolve, reject) => {
ipcRenderer.send('get-access-token', code.trim())
ipcRenderer.once('response-get-access-token', (_, id: string) => {
ipcRenderer.removeAllListeners('error-get-access-token')
win.ipcRenderer.send('get-access-token', code.trim())
win.ipcRenderer.once('response-get-access-token', (_, id: string) => {
win.ipcRenderer.removeAllListeners('error-get-access-token')
resolve(id)
})
ipcRenderer.once('error-get-access-token', (_, err: Error) => {
ipcRenderer.removeAllListeners('response-get-access-token')
win.ipcRenderer.once('error-get-access-token', (_, err: Error) => {
win.ipcRenderer.removeAllListeners('response-get-access-token')
reject(err)
})
})
Expand Down
46 changes: 24 additions & 22 deletions src/renderer/store/GlobalHeader.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import { ipcRenderer } from 'electron'
import router from '@/router'
import { LocalAccount } from '~/src/types/localAccount'
import { Module, MutationTree, ActionTree } from 'vuex'
import { RootState } from '@/store'
import { StreamingError } from '~src/errors/streamingError'
import { MyWindow } from '~/src/types/global'

const win = window as MyWindow

export type GlobalHeaderState = {
accounts: Array<LocalAccount>
Expand Down Expand Up @@ -61,13 +63,13 @@ const actions: ActionTree<GlobalHeaderState, RootState> = {
},
listAccounts: ({ dispatch, commit }): Promise<Array<LocalAccount>> => {
return new Promise((resolve, reject) => {
ipcRenderer.send('list-accounts', 'list')
ipcRenderer.once('error-list-accounts', (_, err: Error) => {
ipcRenderer.removeAllListeners('response-list-accounts')
win.ipcRenderer.send('list-accounts', 'list')
win.ipcRenderer.once('error-list-accounts', (_, err: Error) => {
win.ipcRenderer.removeAllListeners('response-list-accounts')
reject(err)
})
ipcRenderer.once('response-list-accounts', (_, accounts: Array<LocalAccount>) => {
ipcRenderer.removeAllListeners('error-list-accounts')
win.ipcRenderer.once('response-list-accounts', (_, accounts: Array<LocalAccount>) => {
win.ipcRenderer.removeAllListeners('error-list-accounts')
commit(MUTATION_TYPES.UPDATE_ACCOUNTS, accounts)
dispatch('refreshAccounts')
resolve(accounts)
Expand All @@ -77,20 +79,20 @@ const actions: ActionTree<GlobalHeaderState, RootState> = {
// Fetch account informations and save current state when GlobalHeader is displayed
refreshAccounts: ({ commit }): Promise<Array<LocalAccount>> => {
return new Promise((resolve, reject) => {
ipcRenderer.send('refresh-accounts')
ipcRenderer.once('error-refresh-accounts', (_, err: Error) => {
ipcRenderer.removeAllListeners('response-refresh-accounts')
win.ipcRenderer.send('refresh-accounts')
win.ipcRenderer.once('error-refresh-accounts', (_, err: Error) => {
win.ipcRenderer.removeAllListeners('response-refresh-accounts')
reject(err)
})
ipcRenderer.once('response-refresh-accounts', (_, accounts: Array<LocalAccount>) => {
ipcRenderer.removeAllListeners('error-refresh-accounts')
win.ipcRenderer.once('response-refresh-accounts', (_, accounts: Array<LocalAccount>) => {
win.ipcRenderer.removeAllListeners('error-refresh-accounts')
commit(MUTATION_TYPES.UPDATE_ACCOUNTS, accounts)
resolve(accounts)
})
})
},
watchShortcutEvents: ({ state, commit, rootState, rootGetters }) => {
ipcRenderer.on('change-account', (_, account: LocalAccount) => {
win.ipcRenderer.on('change-account', (_, account: LocalAccount) => {
if (state.changing) {
return null
}
Expand All @@ -108,22 +110,22 @@ const actions: ActionTree<GlobalHeaderState, RootState> = {
})
},
removeShortcutEvents: async () => {
ipcRenderer.removeAllListeners('change-account')
win.ipcRenderer.removeAllListeners('change-account')
return true
},
loadHide: ({ commit }): Promise<boolean> => {
return new Promise(resolve => {
ipcRenderer.send('get-global-header')
ipcRenderer.once('response-get-global-header', (_, hide: boolean) => {
win.ipcRenderer.send('get-global-header')
win.ipcRenderer.once('response-get-global-header', (_, hide: boolean) => {
commit(MUTATION_TYPES.CHANGE_HIDE, hide)
resolve(hide)
})
})
},
switchHide: ({ dispatch }, hide: boolean): Promise<boolean> => {
return new Promise(resolve => {
ipcRenderer.send('change-global-header', hide)
ipcRenderer.once('response-change-global-header', () => {
win.ipcRenderer.send('change-global-header', hide)
win.ipcRenderer.once('response-change-global-header', () => {
dispatch('loadHide')
resolve(true)
})
Expand All @@ -132,18 +134,18 @@ const actions: ActionTree<GlobalHeaderState, RootState> = {
startUserStreamings: ({ state }): Promise<{}> => {
// @ts-ignore
return new Promise((resolve, reject) => {
ipcRenderer.once('error-start-all-user-streamings', (_, err: StreamingError) => {
win.ipcRenderer.once('error-start-all-user-streamings', (_, err: StreamingError) => {
reject(err)
})
ipcRenderer.send('start-all-user-streamings', state.accounts)
win.ipcRenderer.send('start-all-user-streamings', state.accounts)
})
},
stopUserStreamings: () => {
ipcRenderer.send('stop-all-user-streamings')
win.ipcRenderer.send('stop-all-user-streamings')
},
bindNotification: () => {
ipcRenderer.removeAllListeners('open-notification-tab')
ipcRenderer.on('open-notification-tab', (_, id: string) => {
win.ipcRenderer.removeAllListeners('open-notification-tab')
win.ipcRenderer.on('open-notification-tab', (_, id: string) => {
router.push(`/${id}/home`)
// We have to wait until change el-menu-item
setTimeout(() => router.push(`/${id}/notifications`), 500)
Expand Down
14 changes: 8 additions & 6 deletions src/renderer/store/Login.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import { ipcRenderer } from 'electron'
import Mastodon, { Instance } from 'megalodon'
import { Module, MutationTree, ActionTree } from 'vuex'
import { RootState } from '@/store'
import { MyWindow } from '~/src/types/global'

const win = window as MyWindow

export type LoginState = {
selectedInstance: string | null
Expand Down Expand Up @@ -30,13 +32,13 @@ const mutations: MutationTree<LoginState> = {
const actions: ActionTree<LoginState, RootState> = {
fetchLogin: (_, instance: string) => {
return new Promise((resolve, reject) => {
ipcRenderer.send('get-auth-url', instance)
ipcRenderer.once('error-get-auth-url', (_, err: Error) => {
ipcRenderer.removeAllListeners('response-get-auth-url')
win.ipcRenderer.send('get-auth-url', instance)
win.ipcRenderer.once('error-get-auth-url', (_, err: Error) => {
win.ipcRenderer.removeAllListeners('response-get-auth-url')
reject(err)
})
ipcRenderer.once('response-get-auth-url', (_, url: string) => {
ipcRenderer.removeAllListeners('response-get-auth-url')
win.ipcRenderer.once('response-get-auth-url', (_, url: string) => {
win.ipcRenderer.removeAllListeners('response-get-auth-url')
resolve(url)
})
})
Expand Down

0 comments on commit 80f978b

Please sign in to comment.