From 8b558adb6018674d990d727ed1c3115b726050d3 Mon Sep 17 00:00:00 2001 From: AkiraFukushima Date: Tue, 18 Jun 2019 08:45:47 +0900 Subject: [PATCH] refs #209 Add integration tests for Lists/Edit --- .../TimelineSpace/Contents/Lists/Edit.spec.ts | 120 ++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 spec/renderer/integration/store/TimelineSpace/Contents/Lists/Edit.spec.ts diff --git a/spec/renderer/integration/store/TimelineSpace/Contents/Lists/Edit.spec.ts b/spec/renderer/integration/store/TimelineSpace/Contents/Lists/Edit.spec.ts new file mode 100644 index 00000000..f96bc16f --- /dev/null +++ b/spec/renderer/integration/store/TimelineSpace/Contents/Lists/Edit.spec.ts @@ -0,0 +1,120 @@ +import { Response, Account } from 'megalodon' +import mockedMegalodon from '~/spec/mock/megalodon' +import { createLocalVue } from '@vue/test-utils' +import Vuex from 'vuex' +import Edit, { EditState } from '@/store/TimelineSpace/Contents/Lists/Edit' +import { RemoveAccountFromList } from '@/types/removeAccountFromList' + +jest.mock('megalodon') + +const account: Account = { + id: '1', + username: 'h3poteto', + acct: 'h3poteto@pleroma.io', + display_name: 'h3poteto', + locked: false, + created_at: '2019-03-26T21:30:32', + followers_count: 10, + following_count: 10, + statuses_count: 100, + note: 'engineer', + url: 'https://pleroma.io', + avatar: '', + avatar_static: '', + header: '', + header_static: '', + emojis: [], + moved: null, + fields: null, + bot: false +} + +let state = (): EditState => { + return { + members: [] + } +} + +const initStore = () => { + return { + namespaced: true, + state: state(), + actions: Edit.actions, + mutations: Edit.mutations + } +} + +const timelineState = { + namespaced: true, + state: { + account: { + accessToken: 'token', + baseURL: 'http://localhost' + } + } +} + +describe('Lists/Edit', () => { + let store + let localVue + + beforeEach(() => { + localVue = createLocalVue() + localVue.use(Vuex) + store = new Vuex.Store({ + modules: { + Edit: initStore(), + TimelineSpace: timelineState + } + }) + mockedMegalodon.mockClear() + }) + + describe('fetchMembers', () => { + it('should be updated', async () => { + const mockClient = { + get: (_path: string, _params: object) => { + return new Promise>>(resolve => { + const res: Response> = { + data: [account], + status: 200, + statusText: 'OK', + headers: {} + } + resolve(res) + }) + } + } + + mockedMegalodon.mockImplementation(() => mockClient) + await store.dispatch('Edit/fetchMembers', 'id') + expect(store.state.Edit.members).toEqual([account]) + }) + }) + + describe('removeAccount', () => { + it('should be removed', async () => { + const mockClient = { + del: (_path: string, _params: object) => { + return new Promise>(resolve => { + const res: Response<{}> = { + data: {}, + status: 200, + statusText: 'OK', + headers: {} + } + resolve(res) + }) + } + } + + mockedMegalodon.mockImplementation(() => mockClient) + const removeFromList: RemoveAccountFromList = { + account: account, + listId: 'id' + } + const res = await store.dispatch('Edit/removeAccount', removeFromList) + expect(res.data).toEqual({}) + }) + }) +})