From fb378a6d24b747bdc713942f1b240040ab41c5e5 Mon Sep 17 00:00:00 2001
From: AkiraFukushima
Date: Thu, 4 Apr 2019 22:24:24 +0900
Subject: [PATCH] refs #850 Replace Login with typescript
---
spec/renderer/integration/store/Login.spec.ts | 9 ++-
spec/renderer/unit/store/Login.spec.ts | 9 ++-
src/renderer/store/App.ts | 2 +-
src/renderer/store/Login.js | 48 --------------
src/renderer/store/Login.ts | 66 +++++++++++++++++++
5 files changed, 75 insertions(+), 59 deletions(-)
delete mode 100644 src/renderer/store/Login.js
create mode 100644 src/renderer/store/Login.ts
diff --git a/spec/renderer/integration/store/Login.spec.ts b/spec/renderer/integration/store/Login.spec.ts
index c33aeb10..e2f13af5 100644
--- a/spec/renderer/integration/store/Login.spec.ts
+++ b/spec/renderer/integration/store/Login.spec.ts
@@ -2,13 +2,12 @@ import { createLocalVue } from '@vue/test-utils'
import Vuex from 'vuex'
import { ipcMain } from '~/spec/mock/electron'
import axios from 'axios'
-import Login from '@/store/Login'
+import Login, { LoginState } from '@/store/Login'
jest.mock('axios')
-const state = () => {
+const state = (): LoginState => {
return {
- instances: [],
selectedInstance: null,
searching: false
}
@@ -79,8 +78,8 @@ describe('Login', () => {
})
})
mockedAxios.get.mockImplementation(() => res)
- const data = await store.dispatch('Login/confirmInstance', 'pleroma.io')
- expect(data).toEqual('test')
+ const result = await store.dispatch('Login/confirmInstance', 'pleroma.io')
+ expect(result).toEqual(true)
expect(store.state.Login.selectedInstance).toEqual('pleroma.io')
})
})
diff --git a/spec/renderer/unit/store/Login.spec.ts b/spec/renderer/unit/store/Login.spec.ts
index 31fa25c9..a35fb807 100644
--- a/spec/renderer/unit/store/Login.spec.ts
+++ b/spec/renderer/unit/store/Login.spec.ts
@@ -1,24 +1,23 @@
-import Login from '@/store/Login'
+import Login, { LoginState, MUTATION_TYPES } from '@/store/Login'
describe('Login', () => {
describe('mutations', () => {
- let state: any
+ let state: LoginState
beforeEach(() => {
state = {
- instances: [],
selectedInstance: null,
searching: false
}
})
describe('changeInstance', () => {
it('should be changed', () => {
- Login.mutations.changeInstance(state, 'pleroma.io')
+ Login.mutations![MUTATION_TYPES.CHANGE_INSTANCE](state, 'pleroma.io')
expect(state.selectedInstance).toEqual('pleroma.io')
})
})
describe('changeSearching', () => {
it('should be changed', () => {
- Login.mutations.changeSearching(state, true)
+ Login.mutations![MUTATION_TYPES.CHANGE_SEARCHING](state, true)
expect(state.searching).toEqual(true)
})
})
diff --git a/src/renderer/store/App.ts b/src/renderer/store/App.ts
index 30a75396..79a23e10 100644
--- a/src/renderer/store/App.ts
+++ b/src/renderer/store/App.ts
@@ -106,7 +106,7 @@ const actions: ActionTree = {
loadPreferences: ({ commit, dispatch }) => {
return new Promise((resolve, reject) => {
ipcRenderer.send('get-preferences')
- ipcRenderer.once('error-get-preferences', (_, err) => {
+ ipcRenderer.once('error-get-preferences', (_, err: Error) => {
ipcRenderer.removeAllListeners('response-get-preferences')
reject(err)
})
diff --git a/src/renderer/store/Login.js b/src/renderer/store/Login.js
deleted file mode 100644
index ec4c7ac8..00000000
--- a/src/renderer/store/Login.js
+++ /dev/null
@@ -1,48 +0,0 @@
-import { ipcRenderer } from 'electron'
-import axios from 'axios'
-
-const Login = {
- namespaced: true,
- state: {
- instances: [],
- selectedInstance: null,
- searching: false
- },
- mutations: {
- changeInstance (state, instance) {
- state.selectedInstance = instance
- },
- changeSearching (state, value) {
- state.searching = value
- }
- },
- actions: {
- fetchLogin (_, instance) {
- return new Promise((resolve, reject) => {
- ipcRenderer.send('get-auth-url', instance)
- ipcRenderer.once('error-get-auth-url', (event, err) => {
- ipcRenderer.removeAllListeners('response-get-auth-url')
- reject(err)
- })
- ipcRenderer.once('response-get-auth-url', (event, url) => {
- ipcRenderer.removeAllListeners('response-get-auth-url')
- resolve(url)
- })
- })
- },
- pageBack ({ commit }) {
- commit('changeInstance', null)
- },
- async confirmInstance ({ commit }, domain) {
- commit('changeSearching', true)
- const res = await axios.get(`https://${domain}/api/v1/instance`)
- .finally(() => {
- commit('changeSearching', false)
- })
- commit('changeInstance', domain)
- return res.data
- }
- }
-}
-
-export default Login
diff --git a/src/renderer/store/Login.ts b/src/renderer/store/Login.ts
new file mode 100644
index 00000000..7bb20de2
--- /dev/null
+++ b/src/renderer/store/Login.ts
@@ -0,0 +1,66 @@
+import { ipcRenderer } from 'electron'
+import axios from 'axios'
+import { Module, MutationTree, ActionTree } from 'vuex'
+
+export interface LoginState {
+ selectedInstance: string | null,
+ searching: boolean
+}
+
+const state = (): LoginState => ({
+ selectedInstance: null,
+ searching: false
+})
+
+export const MUTATION_TYPES = {
+ CHANGE_INSTANCE: 'changeInstance',
+ CHANGE_SEARCHING: 'changeSearching'
+}
+
+const mutations: MutationTree = {
+ [MUTATION_TYPES.CHANGE_INSTANCE]: (state: LoginState, instance: string) => {
+ state.selectedInstance = instance
+ },
+ [MUTATION_TYPES.CHANGE_SEARCHING]: (state: LoginState, searching: boolean) => {
+ state.searching = searching
+ }
+}
+
+// TODO: use type of rootState
+const actions: ActionTree = {
+ 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')
+ reject(err)
+ })
+ ipcRenderer.once('response-get-auth-url', (_, url: string) => {
+ ipcRenderer.removeAllListeners('response-get-auth-url')
+ resolve(url)
+ })
+ })
+ },
+ pageBack: ({ commit }) => {
+ commit(MUTATION_TYPES.CHANGE_INSTANCE, null)
+ },
+ confirmInstance: async ({ commit }, domain: string): Promise => {
+ commit(MUTATION_TYPES.CHANGE_SEARCHING, true)
+ await axios.get(`https://${domain}/api/v1/instance`)
+ .finally(() => {
+ commit(MUTATION_TYPES.CHANGE_SEARCHING, false)
+ })
+ commit(MUTATION_TYPES.CHANGE_INSTANCE, domain)
+ return true
+ }
+}
+
+// TODO: use type of rootState
+const Login: Module = {
+ namespaced: true,
+ state: state,
+ mutations: mutations,
+ actions: actions
+}
+
+export default Login