From 839b5f68f90d42ad1031b697557ffde10ebd35c8 Mon Sep 17 00:00:00 2001
From: AkiraFukushima
Date: Thu, 13 Jun 2019 23:29:05 +0900
Subject: [PATCH] refs #209 Add integration tests for Local
---
.../Contents/DirectMessages.spec.ts | 4 +-
.../store/TimelineSpace/Contents/Home.spec.ts | 2 +-
.../TimelineSpace/Contents/Local.spec.ts | 195 ++++++++++++++++++
3 files changed, 198 insertions(+), 3 deletions(-)
create mode 100644 spec/renderer/integration/store/TimelineSpace/Contents/Local.spec.ts
diff --git a/spec/renderer/integration/store/TimelineSpace/Contents/DirectMessages.spec.ts b/spec/renderer/integration/store/TimelineSpace/Contents/DirectMessages.spec.ts
index 2e4d839c..f5c596b2 100644
--- a/spec/renderer/integration/store/TimelineSpace/Contents/DirectMessages.spec.ts
+++ b/spec/renderer/integration/store/TimelineSpace/Contents/DirectMessages.spec.ts
@@ -1,5 +1,5 @@
import { Response, Status, Account, Application } from 'megalodon'
-import mockedMegalodon from '~/spec/mock/megalodon.ts'
+import mockedMegalodon from '~/spec/mock/megalodon'
import { createLocalVue } from '@vue/test-utils'
import Vuex from 'vuex'
import DirectMessages, { DirectMessagesState } from '@/store/TimelineSpace/Contents/DirectMessages'
@@ -186,7 +186,7 @@ describe('Home', () => {
}
}
mockedMegalodon.mockImplementation(() => mockClient)
- await store.dispatch('DirectMessages/lazyFetchTimeline', { id: 20 })
+ await store.dispatch('DirectMessages/lazyFetchTimeline', status1)
expect(store.state.DirectMessages.lazyLoading).toEqual(false)
expect(store.state.DirectMessages.timeline).toEqual([status1, status2])
})
diff --git a/spec/renderer/integration/store/TimelineSpace/Contents/Home.spec.ts b/spec/renderer/integration/store/TimelineSpace/Contents/Home.spec.ts
index 6fe78568..f096c08d 100644
--- a/spec/renderer/integration/store/TimelineSpace/Contents/Home.spec.ts
+++ b/spec/renderer/integration/store/TimelineSpace/Contents/Home.spec.ts
@@ -188,7 +188,7 @@ describe('Home', () => {
}
}
mockedMegalodon.mockImplementation(() => mockClient)
- await store.dispatch('Home/lazyFetchTimeline', { id: 20 })
+ await store.dispatch('Home/lazyFetchTimeline', status1)
expect(store.state.Home.lazyLoading).toEqual(false)
expect(store.state.Home.timeline).toEqual([status1, status2])
})
diff --git a/spec/renderer/integration/store/TimelineSpace/Contents/Local.spec.ts b/spec/renderer/integration/store/TimelineSpace/Contents/Local.spec.ts
new file mode 100644
index 00000000..ef8314e9
--- /dev/null
+++ b/spec/renderer/integration/store/TimelineSpace/Contents/Local.spec.ts
@@ -0,0 +1,195 @@
+import { Response, Status, Account, Application } from 'megalodon'
+import mockedMegalodon from '~/spec/mock/megalodon'
+import { createLocalVue } from '@vue/test-utils'
+import Vuex from 'vuex'
+import Local, { LocalState } from '@/store/TimelineSpace/Contents/Local'
+
+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
+}
+const status1: Status = {
+ id: '1',
+ uri: 'http://example.com',
+ url: 'http://example.com',
+ account: account,
+ in_reply_to_id: null,
+ in_reply_to_account_id: null,
+ reblog: null,
+ content: 'hoge',
+ created_at: '2019-03-26T21:40:32',
+ emojis: [],
+ replies_count: 0,
+ reblogs_count: 0,
+ favourites_count: 0,
+ reblogged: null,
+ favourited: null,
+ muted: null,
+ sensitive: false,
+ spoiler_text: '',
+ visibility: 'public',
+ media_attachments: [],
+ mentions: [],
+ tags: [],
+ card: null,
+ application: {
+ name: 'Web'
+ } as Application,
+ language: null,
+ pinned: null
+}
+const status2: Status = {
+ id: '2',
+ uri: 'http://example.com',
+ url: 'http://example.com',
+ account: account,
+ in_reply_to_id: null,
+ in_reply_to_account_id: null,
+ reblog: null,
+ content: 'fuga',
+ created_at: '2019-03-26T21:40:32',
+ emojis: [],
+ replies_count: 0,
+ reblogs_count: 0,
+ favourites_count: 0,
+ reblogged: null,
+ favourited: null,
+ muted: null,
+ sensitive: false,
+ spoiler_text: '',
+ visibility: 'public',
+ media_attachments: [],
+ mentions: [],
+ tags: [],
+ card: null,
+ application: {
+ name: 'Web'
+ } as Application,
+ language: null,
+ pinned: null
+}
+
+let state = (): LocalState => {
+ return {
+ lazyLoading: false,
+ heading: true,
+ timeline: [],
+ unreadTimeline: [],
+ filter: ''
+ }
+}
+
+const initStore = () => {
+ return {
+ namespaced: true,
+ state: state(),
+ actions: Local.actions,
+ mutations: Local.mutations
+ }
+}
+
+const timelineState = {
+ namespaced: true,
+ state: {
+ account: {
+ accessToken: 'token',
+ baseURL: 'http://localhost'
+ }
+ }
+}
+
+describe('Home', () => {
+ let store
+ let localVue
+
+ beforeEach(() => {
+ localVue = createLocalVue()
+ localVue.use(Vuex)
+ store = new Vuex.Store({
+ modules: {
+ Local: initStore(),
+ TimelineSpace: timelineState
+ }
+ })
+ mockedMegalodon.mockClear()
+ })
+
+ describe('fetchLocalTimeline', () => {
+ it('should be updated', async () => {
+ const mockClient = {
+ get: (_path: string, _params: object) => {
+ return new Promise>>(resolve => {
+ const res: Response> = {
+ data: [status1],
+ status: 200,
+ statusText: 'OK',
+ headers: {}
+ }
+ resolve(res)
+ })
+ }
+ }
+
+ mockedMegalodon.mockImplementation(() => mockClient)
+ const statuses = await store.dispatch('Local/fetchLocalTimeline')
+ expect(statuses).toEqual([status1])
+ expect(store.state.Local.timeline).toEqual([status1])
+ })
+ })
+
+ describe('lazyFetchTimeline', () => {
+ describe('success', () => {
+ beforeAll(() => {
+ state = () => {
+ return {
+ lazyLoading: false,
+ heading: true,
+ timeline: [status1],
+ unreadTimeline: [],
+ filter: '',
+ showReblogs: true,
+ showReplies: true
+ }
+ }
+ })
+ it('should be updated', async () => {
+ const mockClient = {
+ get: (_path: string, _params: object) => {
+ return new Promise>>(resolve => {
+ const res: Response> = {
+ data: [status2],
+ status: 200,
+ statusText: 'OK',
+ headers: {}
+ }
+ resolve(res)
+ })
+ }
+ }
+ mockedMegalodon.mockImplementation(() => mockClient)
+ await store.dispatch('Local/lazyFetchTimeline', status1)
+ expect(store.state.Local.lazyLoading).toEqual(false)
+ expect(store.state.Local.timeline).toEqual([status1, status2])
+ })
+ })
+ })
+})