From d4ee8d8661854f1beddb2d4f3761ec4e1a8cad4e Mon Sep 17 00:00:00 2001
From: AkiraFukushima
Date: Mon, 25 Mar 2019 23:50:11 +0900
Subject: [PATCH] refs #850 Convert some unit tests to integration test
---
package.json | 5 +
.../store/{App.spec.js => App.spec.ts} | 4 +-
spec/renderer/integration/store/Login.spec.ts | 93 +++++++++++++
.../store/Preferences/Account.spec.ts | 131 ++++++++++++++++++
.../store/Preferences/Appearance.spec.js | 94 -------------
.../store/Preferences/Appearance.spec.ts | 119 ++++++++++++++++
spec/renderer/unit/store/Authorize.spec.ts | 32 -----
spec/renderer/unit/store/Login.spec.ts | 56 --------
.../unit/store/Preferences/Account.spec.ts | 111 ---------------
.../unit/store/Preferences/Appearance.spec.ts | 53 -------
tsconfig.json | 2 +-
11 files changed, 351 insertions(+), 349 deletions(-)
rename spec/renderer/integration/store/{App.spec.js => App.spec.ts} (95%)
create mode 100644 spec/renderer/integration/store/Login.spec.ts
create mode 100644 spec/renderer/integration/store/Preferences/Account.spec.ts
delete mode 100644 spec/renderer/integration/store/Preferences/Appearance.spec.js
create mode 100644 spec/renderer/integration/store/Preferences/Appearance.spec.ts
delete mode 100644 spec/renderer/unit/store/Authorize.spec.ts
diff --git a/package.json b/package.json
index 293d43ed..0e396ecb 100644
--- a/package.json
+++ b/package.json
@@ -110,6 +110,11 @@
"testMatch": [
"**/spec/**/*.spec.ts"
],
+ "preset": "ts-jest/presets/js-with-ts",
+ "transform": {
+ "^.+\\.(js|jsx)$": "babel-jest",
+ "^.+\\.(ts|tsx)$": "ts-jest"
+ },
"globals": {
"ts-jest": {
"tsConfig": "tsconfig.json"
diff --git a/spec/renderer/integration/store/App.spec.js b/spec/renderer/integration/store/App.spec.ts
similarity index 95%
rename from spec/renderer/integration/store/App.spec.js
rename to spec/renderer/integration/store/App.spec.ts
index 57960040..bb4d5ddb 100644
--- a/spec/renderer/integration/store/App.spec.js
+++ b/spec/renderer/integration/store/App.spec.ts
@@ -55,7 +55,7 @@ describe('App', () => {
describe('loadPreferences', () => {
describe('error', () => {
it('should not change', async () => {
- ipcMain.once('get-preferences', (event, _) => {
+ ipcMain.once('get-preferences', (event: any, _) => {
event.sender.send('error-get-preferences', new Error())
})
await store.dispatch('App/loadPreferences')
@@ -67,7 +67,7 @@ describe('App', () => {
})
describe('success', () => {
it('should be changed', async () => {
- ipcMain.once('get-preferences', (event, _) => {
+ ipcMain.once('get-preferences', (event: any, _) => {
event.sender.send('response-get-preferences', {
general: {
timeline: {
diff --git a/spec/renderer/integration/store/Login.spec.ts b/spec/renderer/integration/store/Login.spec.ts
new file mode 100644
index 00000000..e19661dd
--- /dev/null
+++ b/spec/renderer/integration/store/Login.spec.ts
@@ -0,0 +1,93 @@
+import { createLocalVue } from '@vue/test-utils'
+import Vuex from 'vuex'
+import { ipcMain } from '~/spec/mock/electron'
+import axios, { AxiosStatic } from 'axios'
+import Login from '@/store/Login'
+
+jest.mock('axios')
+interface AxiosMock extends AxiosStatic {
+ mockResolvedValue: Function
+ mockRejectedValue: Function
+ mockImplementation: Function
+}
+
+const state = () => {
+ return {
+ instances: [],
+ selectedInstance: null,
+ searching: false
+ }
+}
+
+const initStore = () => {
+ return {
+ namespaced: true,
+ state: state(),
+ actions: Login.actions,
+ mutations: Login.mutations
+ }
+}
+
+describe('Login', () => {
+ let store
+ let localVue
+
+ beforeEach(() => {
+ localVue = createLocalVue()
+ localVue.use(Vuex)
+ store = new Vuex.Store({
+ modules: {
+ Login: initStore()
+ }
+ })
+ })
+
+ describe('fetchLogin', () => {
+ describe('error', () => {
+ it('should return error', async () => {
+ ipcMain.once('get-auth-url', (event, _) => {
+ event.sender.send('error-get-auth-url', new Error())
+ })
+ await store.dispatch('Login/fetchLogin', 'pleroma.io')
+ .catch((err: Error) => {
+ expect(err instanceof Error).toEqual(true)
+ })
+ })
+ })
+ describe('success', () => {
+ it('should return url', async () => {
+ ipcMain.once('get-auth-url', (event, _) => {
+ event.sender.send('response-get-auth-url', 'http://example.com/auth')
+ })
+ const url = await store.dispatch('Login/fetchLogin', 'pleroma.io')
+ expect(url).toEqual('http://example.com/auth')
+ })
+ })
+ })
+
+ describe('pageBack', () => {
+ it('should reset instance', () => {
+ store.dispatch('Login/pageBack')
+ expect(store.state.Login.selectedInstance).toEqual(null)
+ })
+ })
+
+ // TODO: Could not mock axios for finally
+ describe.skip('confirmInstance', () => {
+ it('should change instance', async () => {
+ // Provide Promise.resolve for finally keywrod.
+ // https://github.com/facebook/jest/issues/6552
+ const mockedAxios = axios as AxiosMock
+ const res: Promise