From d95dbfa559785ef9c21bf10258acd495eaeee5f4 Mon Sep 17 00:00:00 2001 From: AkiraFukushima Date: Sun, 10 Mar 2019 22:11:53 +0900 Subject: [PATCH 1/4] refs #209 Add integration tests for AddListMember modal --- .../Modals/AddListMember.spec.js | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 spec/integration/store/TimelineSpace/Modals/AddListMember.spec.js diff --git a/spec/integration/store/TimelineSpace/Modals/AddListMember.spec.js b/spec/integration/store/TimelineSpace/Modals/AddListMember.spec.js new file mode 100644 index 00000000..896fdecf --- /dev/null +++ b/spec/integration/store/TimelineSpace/Modals/AddListMember.spec.js @@ -0,0 +1,99 @@ +import Mastodon from 'megalodon' +import { createLocalVue } from '@vue/test-utils' +import Vuex from 'vuex' +import AddListMember from '~/src/renderer/store/TimelineSpace/Modals/AddListMember' + +jest.genMockFromModule('megalodon') +jest.mock('megalodon') + +const state = () => { + return { + modalOpen: false, + accounts: [], + targetListId: null + } +} + +const initStore = () => { + return { + namespaced: true, + state: state(), + actions: AddListMember.actions, + mutations: AddListMember.mutations + } +} + +const timelineState = { + namespaced: true, + state: { + account: { + _id: '0' + } + } +} + +describe('AddListMember', () => { + let store + let localVue + + beforeEach(() => { + localVue = createLocalVue() + localVue.use(Vuex) + store = new Vuex.Store({ + modules: { + AddListMember: initStore(), + TimelineSpace: timelineState + } + }) + Mastodon.mockClear() + }) + + describe('changeModal', () => { + it('should change modal', () => { + store.dispatch('AddListMember/changeModal', true) + expect(store.state.AddListMember.modalOpen).toEqual(true) + }) + }) + + describe('search', () => { + it('should be searched', async () => { + const mockClient = { + get: () => { + return new Promise((resolve, reject) => { + resolve({ + data: [ + { id: 1, name: 'h3poteto' }, + { id: 2, name: 'akito19' } + ] + }) + }) + } + } + + Mastodon.mockImplementation(() => mockClient) + const accounts = await store.dispatch('AddListMember/search', 'akira') + expect(store.state.AddListMember.accounts).toEqual([ + { id: 1, name: 'h3poteto' }, + { id: 2, name: 'akito19' } + ]) + }) + }) + + describe('add', () => { + it('should be added a member to the list', async () => { + const mockClient = { + post: () => { + return new Promise((resolve, reject) => { + resolve({ + data: true + }) + }) + } + } + + Mastodon.mockImplementation(() => mockClient) + const result = await store.dispatch('AddListMember/add', 'akira') + expect(result.data).toEqual(true) + }) + }) +}) From bdb3b71318549489a4a58194ea2d3cdc8f1042e2 Mon Sep 17 00:00:00 2001 From: AkiraFukushima Date: Sun, 10 Mar 2019 22:14:47 +0900 Subject: [PATCH 2/4] refs #209 Fix mock store for Preferences/General --- spec/integration/store/Preferences/General.spec.js | 12 +++++++++++- .../store/TimelineSpace/Modals/AddListMember.spec.js | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/spec/integration/store/Preferences/General.spec.js b/spec/integration/store/Preferences/General.spec.js index fd47c82e..23ae4f5c 100644 --- a/spec/integration/store/Preferences/General.spec.js +++ b/spec/integration/store/Preferences/General.spec.js @@ -28,6 +28,15 @@ const initStore = () => { } } +const app = { + namespaced: true, + actions: { + loadPreferences (_) { + return true + } + } +} + describe('Preferences/General', () => { let store let localVue @@ -37,7 +46,8 @@ describe('Preferences/General', () => { localVue.use(Vuex) store = new Vuex.Store({ modules: { - Preferences: initStore() + Preferences: initStore(), + App: app } }) }) diff --git a/spec/integration/store/TimelineSpace/Modals/AddListMember.spec.js b/spec/integration/store/TimelineSpace/Modals/AddListMember.spec.js index 896fdecf..61948a5b 100644 --- a/spec/integration/store/TimelineSpace/Modals/AddListMember.spec.js +++ b/spec/integration/store/TimelineSpace/Modals/AddListMember.spec.js @@ -71,7 +71,7 @@ describe('AddListMember', () => { } Mastodon.mockImplementation(() => mockClient) - const accounts = await store.dispatch('AddListMember/search', 'akira') + await store.dispatch('AddListMember/search', 'akira') expect(store.state.AddListMember.accounts).toEqual([ { id: 1, name: 'h3poteto' }, { id: 2, name: 'akito19' } From 77247a748ad59f420c87273770dd04a13f650173 Mon Sep 17 00:00:00 2001 From: AkiraFukushima Date: Mon, 11 Mar 2019 22:03:50 +0900 Subject: [PATCH 3/4] refs #209 Change renderer spec directory --- spec/{ => renderer}/integration/store/App.spec.js | 0 spec/{ => renderer}/integration/store/GlobalHeader.spec.js | 0 .../integration/store/Preferences/Appearance.spec.js | 0 spec/{ => renderer}/integration/store/Preferences/General.spec.js | 0 .../{ => renderer}/integration/store/Preferences/Language.spec.js | 0 .../integration/store/Preferences/Notification.spec.js | 0 spec/{ => renderer}/integration/store/TimelineSpace.spec.js | 0 .../integration/store/TimelineSpace/Contents/Home.spec.js | 0 .../integration/store/TimelineSpace/HeaderMenu.spec.js | 0 .../integration/store/TimelineSpace/Modals/AddListMember.spec.js | 0 .../integration/store/TimelineSpace/Modals/Jump.spec.js | 0 .../integration/store/TimelineSpace/SideMenu.spec.js | 0 spec/{ => renderer}/unit/store/Authorize.spec.js | 0 spec/{ => renderer}/unit/store/Login.spec.js | 0 spec/{ => renderer}/unit/store/Preferences/Account.spec.js | 0 spec/{ => renderer}/unit/store/Preferences/Appearance.spec.js | 0 spec/{ => renderer}/unit/store/Preferences/General.spec.js | 0 spec/{ => renderer}/unit/store/Preferences/Language.spec.js | 0 spec/{ => renderer}/unit/store/Preferences/Notification.spec.js | 0 spec/{ => renderer}/unit/store/TimelineSpace.spec.js | 0 .../{ => renderer}/unit/store/TimelineSpace/Contents/Home.spec.js | 0 spec/{ => renderer}/unit/store/TimelineSpace/HeaderMenu.spec.js | 0 spec/{ => renderer}/unit/store/TimelineSpace/Modals/Jump.spec.js | 0 spec/{ => renderer}/unit/utils/emojify.spec.js | 0 spec/{ => renderer}/unit/utils/suggestText.spec.js | 0 spec/{ => renderer}/unit/utils/tootParser.spec.js | 0 spec/{ => renderer}/unit/utils/validator.spec.js | 0 27 files changed, 0 insertions(+), 0 deletions(-) rename spec/{ => renderer}/integration/store/App.spec.js (100%) rename spec/{ => renderer}/integration/store/GlobalHeader.spec.js (100%) rename spec/{ => renderer}/integration/store/Preferences/Appearance.spec.js (100%) rename spec/{ => renderer}/integration/store/Preferences/General.spec.js (100%) rename spec/{ => renderer}/integration/store/Preferences/Language.spec.js (100%) rename spec/{ => renderer}/integration/store/Preferences/Notification.spec.js (100%) rename spec/{ => renderer}/integration/store/TimelineSpace.spec.js (100%) rename spec/{ => renderer}/integration/store/TimelineSpace/Contents/Home.spec.js (100%) rename spec/{ => renderer}/integration/store/TimelineSpace/HeaderMenu.spec.js (100%) rename spec/{ => renderer}/integration/store/TimelineSpace/Modals/AddListMember.spec.js (100%) rename spec/{ => renderer}/integration/store/TimelineSpace/Modals/Jump.spec.js (100%) rename spec/{ => renderer}/integration/store/TimelineSpace/SideMenu.spec.js (100%) rename spec/{ => renderer}/unit/store/Authorize.spec.js (100%) rename spec/{ => renderer}/unit/store/Login.spec.js (100%) rename spec/{ => renderer}/unit/store/Preferences/Account.spec.js (100%) rename spec/{ => renderer}/unit/store/Preferences/Appearance.spec.js (100%) rename spec/{ => renderer}/unit/store/Preferences/General.spec.js (100%) rename spec/{ => renderer}/unit/store/Preferences/Language.spec.js (100%) rename spec/{ => renderer}/unit/store/Preferences/Notification.spec.js (100%) rename spec/{ => renderer}/unit/store/TimelineSpace.spec.js (100%) rename spec/{ => renderer}/unit/store/TimelineSpace/Contents/Home.spec.js (100%) rename spec/{ => renderer}/unit/store/TimelineSpace/HeaderMenu.spec.js (100%) rename spec/{ => renderer}/unit/store/TimelineSpace/Modals/Jump.spec.js (100%) rename spec/{ => renderer}/unit/utils/emojify.spec.js (100%) rename spec/{ => renderer}/unit/utils/suggestText.spec.js (100%) rename spec/{ => renderer}/unit/utils/tootParser.spec.js (100%) rename spec/{ => renderer}/unit/utils/validator.spec.js (100%) diff --git a/spec/integration/store/App.spec.js b/spec/renderer/integration/store/App.spec.js similarity index 100% rename from spec/integration/store/App.spec.js rename to spec/renderer/integration/store/App.spec.js diff --git a/spec/integration/store/GlobalHeader.spec.js b/spec/renderer/integration/store/GlobalHeader.spec.js similarity index 100% rename from spec/integration/store/GlobalHeader.spec.js rename to spec/renderer/integration/store/GlobalHeader.spec.js diff --git a/spec/integration/store/Preferences/Appearance.spec.js b/spec/renderer/integration/store/Preferences/Appearance.spec.js similarity index 100% rename from spec/integration/store/Preferences/Appearance.spec.js rename to spec/renderer/integration/store/Preferences/Appearance.spec.js diff --git a/spec/integration/store/Preferences/General.spec.js b/spec/renderer/integration/store/Preferences/General.spec.js similarity index 100% rename from spec/integration/store/Preferences/General.spec.js rename to spec/renderer/integration/store/Preferences/General.spec.js diff --git a/spec/integration/store/Preferences/Language.spec.js b/spec/renderer/integration/store/Preferences/Language.spec.js similarity index 100% rename from spec/integration/store/Preferences/Language.spec.js rename to spec/renderer/integration/store/Preferences/Language.spec.js diff --git a/spec/integration/store/Preferences/Notification.spec.js b/spec/renderer/integration/store/Preferences/Notification.spec.js similarity index 100% rename from spec/integration/store/Preferences/Notification.spec.js rename to spec/renderer/integration/store/Preferences/Notification.spec.js diff --git a/spec/integration/store/TimelineSpace.spec.js b/spec/renderer/integration/store/TimelineSpace.spec.js similarity index 100% rename from spec/integration/store/TimelineSpace.spec.js rename to spec/renderer/integration/store/TimelineSpace.spec.js diff --git a/spec/integration/store/TimelineSpace/Contents/Home.spec.js b/spec/renderer/integration/store/TimelineSpace/Contents/Home.spec.js similarity index 100% rename from spec/integration/store/TimelineSpace/Contents/Home.spec.js rename to spec/renderer/integration/store/TimelineSpace/Contents/Home.spec.js diff --git a/spec/integration/store/TimelineSpace/HeaderMenu.spec.js b/spec/renderer/integration/store/TimelineSpace/HeaderMenu.spec.js similarity index 100% rename from spec/integration/store/TimelineSpace/HeaderMenu.spec.js rename to spec/renderer/integration/store/TimelineSpace/HeaderMenu.spec.js diff --git a/spec/integration/store/TimelineSpace/Modals/AddListMember.spec.js b/spec/renderer/integration/store/TimelineSpace/Modals/AddListMember.spec.js similarity index 100% rename from spec/integration/store/TimelineSpace/Modals/AddListMember.spec.js rename to spec/renderer/integration/store/TimelineSpace/Modals/AddListMember.spec.js diff --git a/spec/integration/store/TimelineSpace/Modals/Jump.spec.js b/spec/renderer/integration/store/TimelineSpace/Modals/Jump.spec.js similarity index 100% rename from spec/integration/store/TimelineSpace/Modals/Jump.spec.js rename to spec/renderer/integration/store/TimelineSpace/Modals/Jump.spec.js diff --git a/spec/integration/store/TimelineSpace/SideMenu.spec.js b/spec/renderer/integration/store/TimelineSpace/SideMenu.spec.js similarity index 100% rename from spec/integration/store/TimelineSpace/SideMenu.spec.js rename to spec/renderer/integration/store/TimelineSpace/SideMenu.spec.js diff --git a/spec/unit/store/Authorize.spec.js b/spec/renderer/unit/store/Authorize.spec.js similarity index 100% rename from spec/unit/store/Authorize.spec.js rename to spec/renderer/unit/store/Authorize.spec.js diff --git a/spec/unit/store/Login.spec.js b/spec/renderer/unit/store/Login.spec.js similarity index 100% rename from spec/unit/store/Login.spec.js rename to spec/renderer/unit/store/Login.spec.js diff --git a/spec/unit/store/Preferences/Account.spec.js b/spec/renderer/unit/store/Preferences/Account.spec.js similarity index 100% rename from spec/unit/store/Preferences/Account.spec.js rename to spec/renderer/unit/store/Preferences/Account.spec.js diff --git a/spec/unit/store/Preferences/Appearance.spec.js b/spec/renderer/unit/store/Preferences/Appearance.spec.js similarity index 100% rename from spec/unit/store/Preferences/Appearance.spec.js rename to spec/renderer/unit/store/Preferences/Appearance.spec.js diff --git a/spec/unit/store/Preferences/General.spec.js b/spec/renderer/unit/store/Preferences/General.spec.js similarity index 100% rename from spec/unit/store/Preferences/General.spec.js rename to spec/renderer/unit/store/Preferences/General.spec.js diff --git a/spec/unit/store/Preferences/Language.spec.js b/spec/renderer/unit/store/Preferences/Language.spec.js similarity index 100% rename from spec/unit/store/Preferences/Language.spec.js rename to spec/renderer/unit/store/Preferences/Language.spec.js diff --git a/spec/unit/store/Preferences/Notification.spec.js b/spec/renderer/unit/store/Preferences/Notification.spec.js similarity index 100% rename from spec/unit/store/Preferences/Notification.spec.js rename to spec/renderer/unit/store/Preferences/Notification.spec.js diff --git a/spec/unit/store/TimelineSpace.spec.js b/spec/renderer/unit/store/TimelineSpace.spec.js similarity index 100% rename from spec/unit/store/TimelineSpace.spec.js rename to spec/renderer/unit/store/TimelineSpace.spec.js diff --git a/spec/unit/store/TimelineSpace/Contents/Home.spec.js b/spec/renderer/unit/store/TimelineSpace/Contents/Home.spec.js similarity index 100% rename from spec/unit/store/TimelineSpace/Contents/Home.spec.js rename to spec/renderer/unit/store/TimelineSpace/Contents/Home.spec.js diff --git a/spec/unit/store/TimelineSpace/HeaderMenu.spec.js b/spec/renderer/unit/store/TimelineSpace/HeaderMenu.spec.js similarity index 100% rename from spec/unit/store/TimelineSpace/HeaderMenu.spec.js rename to spec/renderer/unit/store/TimelineSpace/HeaderMenu.spec.js diff --git a/spec/unit/store/TimelineSpace/Modals/Jump.spec.js b/spec/renderer/unit/store/TimelineSpace/Modals/Jump.spec.js similarity index 100% rename from spec/unit/store/TimelineSpace/Modals/Jump.spec.js rename to spec/renderer/unit/store/TimelineSpace/Modals/Jump.spec.js diff --git a/spec/unit/utils/emojify.spec.js b/spec/renderer/unit/utils/emojify.spec.js similarity index 100% rename from spec/unit/utils/emojify.spec.js rename to spec/renderer/unit/utils/emojify.spec.js diff --git a/spec/unit/utils/suggestText.spec.js b/spec/renderer/unit/utils/suggestText.spec.js similarity index 100% rename from spec/unit/utils/suggestText.spec.js rename to spec/renderer/unit/utils/suggestText.spec.js diff --git a/spec/unit/utils/tootParser.spec.js b/spec/renderer/unit/utils/tootParser.spec.js similarity index 100% rename from spec/unit/utils/tootParser.spec.js rename to spec/renderer/unit/utils/tootParser.spec.js diff --git a/spec/unit/utils/validator.spec.js b/spec/renderer/unit/utils/validator.spec.js similarity index 100% rename from spec/unit/utils/validator.spec.js rename to spec/renderer/unit/utils/validator.spec.js From 79b8b07ad062cd4504d4670238d798d713289f24 Mon Sep 17 00:00:00 2001 From: AkiraFukushima Date: Mon, 11 Mar 2019 22:46:49 +0900 Subject: [PATCH 4/4] refs #209 Add integration tests for ImageViewer modal --- .../TimelineSpace/Modals/ImageViewer.spec.js | 208 ++++++++++++++++++ 1 file changed, 208 insertions(+) create mode 100644 spec/renderer/integration/store/TimelineSpace/Modals/ImageViewer.spec.js diff --git a/spec/renderer/integration/store/TimelineSpace/Modals/ImageViewer.spec.js b/spec/renderer/integration/store/TimelineSpace/Modals/ImageViewer.spec.js new file mode 100644 index 00000000..52681ee3 --- /dev/null +++ b/spec/renderer/integration/store/TimelineSpace/Modals/ImageViewer.spec.js @@ -0,0 +1,208 @@ +import { createLocalVue } from '@vue/test-utils' +import Vuex from 'vuex' +import ImageViewer from '~/src/renderer/store/TimelineSpace/Modals/ImageViewer' + +const state = () => { + return { + modalOpen: false, + currentIndex: -1, + mediaList: [], + loading: false + } +} + +const initStore = () => { + return { + namespaced: true, + state: state(), + actions: ImageViewer.actions, + mutations: ImageViewer.mutations, + getters: ImageViewer.getters + } +} + +describe('ImageViewer', () => { + let store + let localVue + + beforeEach(() => { + localVue = createLocalVue() + localVue.use(Vuex) + store = new Vuex.Store({ + modules: { + ImageViewer: initStore() + } + }) + }) + + // Actions + describe('openModal', () => { + it('should be changed', () => { + store.dispatch('ImageViewer/openModal', { + currentIndex: 1, + mediaList: ['media1', 'media2'] + }) + expect(store.state.ImageViewer.modalOpen).toEqual(true) + expect(store.state.ImageViewer.currentIndex).toEqual(1) + expect(store.state.ImageViewer.mediaList).toEqual(['media1', 'media2']) + expect(store.state.ImageViewer.loading).toEqual(true) + }) + }) + + describe('closeModal', () => { + beforeEach(() => { + store.dispatch('ImageViewer/openModal', { + currentIndex: 1, + mediaList: ['media1', 'media2'] + }) + }) + it('should be changed', () => { + store.dispatch('ImageViewer/closeModal') + expect(store.state.ImageViewer.modalOpen).toEqual(false) + expect(store.state.ImageViewer.currentIndex).toEqual(-1) + expect(store.state.ImageViewer.mediaList).toEqual([]) + expect(store.state.ImageViewer.loading).toEqual(false) + }) + }) + + describe('incrementIndex', () => { + it('should be changed', () => { + store.dispatch('ImageViewer/incrementIndex') + expect(store.state.ImageViewer.currentIndex).toEqual(0) + expect(store.state.ImageViewer.loading).toEqual(true) + }) + }) + + describe('decrementIndex', () => { + it('should be changed', () => { + store.dispatch('ImageViewer/decrementIndex') + expect(store.state.ImageViewer.currentIndex).toEqual(-2) + expect(store.state.ImageViewer.loading).toEqual(true) + }) + }) + + // Getters + describe('imageURL', () => { + describe('currentIndex exists', () => { + beforeEach(() => { + store.dispatch('ImageViewer/openModal', { + currentIndex: 0, + mediaList: [ + { + url: 'http://github.com' + }, + { + url: 'http://google.com' + } + ] + }) + }) + it('should return url', () => { + const url = store.getters['ImageViewer/imageURL'] + expect(url).toEqual('http://github.com') + }) + }) + }) + + describe('imageType', () => { + describe('currentIndex exists', () => { + beforeEach(() => { + store.dispatch('ImageViewer/openModal', { + currentIndex: 0, + mediaList: [ + { + type: 'image/png' + }, + { + type: 'image/jpg' + } + ] + }) + }) + it('should return type', () => { + const type = store.getters['ImageViewer/imageType'] + expect(type).toEqual('image/png') + }) + }) + }) + + describe('showLeft', () => { + describe('currentIndex > 0', () => { + describe('mediaList > 1', () => { + beforeEach(() => { + store.dispatch('ImageViewer/openModal', { + currentIndex: 1, + mediaList: [ + { + type: 'image/png' + }, + { + type: 'image/jpg' + } + ] + }) + }) + it('should return true', () => { + const left = store.getters['ImageViewer/showLeft'] + expect(left).toEqual(true) + }) + }) + describe('mediaList < 1', () => { + beforeEach(() => { + store.dispatch('ImageViewer/openModal', { + currentIndex: 0, + mediaList: [ + { + type: 'image/png' + } + ] + }) + }) + it('should not return true', () => { + const left = store.getters['ImageViewer/showLeft'] + expect(left).toEqual(false) + }) + }) + }) + }) + + describe('showRight', () => { + describe('current index is lower than media list length', () => { + describe('media list length > 1', () => { + beforeEach(() => { + store.dispatch('ImageViewer/openModal', { + currentIndex: 0, + mediaList: [ + { + type: 'image/png' + }, + { + type: 'image/jpeg' + } + ] + }) + }) + it('should return true', () => { + const right = store.getters['ImageViewer/showRight'] + expect(right).toEqual(true) + }) + }) + describe('media list length <= 1', () => { + beforeEach(() => { + store.dispatch('ImageViewer/openModal', { + currentIndex: 0, + mediaList: [ + { + type: 'image/png' + } + ] + }) + }) + it('should not return true', () => { + const right = store.getters['ImageViewer/showRight'] + expect(right).toEqual(false) + }) + }) + }) + }) +})