1
0
mirror of https://github.com/h3poteto/whalebird-desktop synced 2025-01-08 15:12:15 +01:00
Whalebird-desktop-client-ma.../spec/renderer/integration/store/TimelineSpace/Contents/FollowRequests.spec.ts

222 lines
4.8 KiB
TypeScript
Raw Normal View History

2020-03-15 09:48:02 +01:00
import { Entity, Response } from 'megalodon'
2022-04-25 15:33:49 +02:00
import { createStore, Store } from 'vuex'
import FollowRequests, { FollowRequestsState } from '@/store/TimelineSpace/Contents/FollowRequests'
import { SideMenuState } from '@/store/TimelineSpace/SideMenu'
2022-04-25 15:33:49 +02:00
import { RootState } from '@/store'
2020-03-15 09:48:02 +01:00
const mockClient = {
getFollowRequests: () => {
return new Promise<Response<Array<Entity.Account>>>(resolve => {
const res: Response<Array<Entity.Account>> = {
data: [account],
status: 200,
statusText: 'OK',
headers: {}
}
resolve(res)
})
},
acceptFollowRequest: () => {
return new Promise<Response<{}>>(resolve => {
const res: Response<{}> = {
data: {},
status: 200,
statusText: 'OK',
headers: {}
}
resolve(res)
})
},
rejectFollowRequest: () => {
return new Promise<Response<{}>>(resolve => {
const res: Response<{}> = {
data: {},
status: 200,
statusText: 'OK',
headers: {}
}
resolve(res)
})
}
}
2020-03-15 09:48:02 +01:00
jest.mock('megalodon', () => ({
2020-09-13 10:24:36 +02:00
...jest.requireActual<object>('megalodon'),
2020-03-15 09:48:02 +01:00
default: jest.fn(() => mockClient),
__esModule: true
}))
const account: Entity.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 = (): FollowRequestsState => {
return {
requests: []
}
}
const initStore = () => {
return {
namespaced: true,
state: state(),
actions: FollowRequests.actions,
mutations: FollowRequests.mutations
}
}
const sideMenuState = (): SideMenuState => {
return {
unreadHomeTimeline: false,
unreadNotifications: false,
unreadMentions: false,
unreadLocalTimeline: false,
unreadDirectMessagesTimeline: false,
unreadPublicTimeline: false,
unreadFollowRequests: false,
lists: [],
tags: [],
collapse: false,
enabledTimelines: {
home: true,
notification: true,
mention: true,
direct: true,
favourite: true,
bookmark: true,
local: true,
public: true,
tag: true,
list: true
}
}
}
2022-04-25 15:33:49 +02:00
const sideMenuStore = () => ({
namespaced: true,
state: sideMenuState(),
actions: {
fetchFollowRequests: jest.fn()
},
mutations: {}
2022-04-25 15:33:49 +02:00
})
2022-04-25 15:33:49 +02:00
const contentsStore = () => ({
namespaced: true,
modules: {
2022-04-25 15:33:49 +02:00
FollowRequests: initStore()
}
})
const timelineStore = () => ({
namespaced: true,
modules: {
SideMenu: sideMenuStore(),
Contents: contentsStore()
},
state: {
account: {
accessToken: 'token',
baseURL: 'http://localhost'
2020-03-15 09:48:02 +01:00
},
sns: 'mastodon'
}
2022-04-25 15:33:49 +02:00
})
const appState = {
namespaced: true,
state: {
proxyConfiguration: false
}
}
describe('Home', () => {
2022-04-25 15:33:49 +02:00
let store: Store<RootState>
beforeEach(() => {
2022-04-25 15:33:49 +02:00
store = createStore({
modules: {
2022-04-25 15:33:49 +02:00
TimelineSpace: timelineStore(),
App: appState
}
})
})
describe('fetchRequests', () => {
it('should be updated', async () => {
2022-04-25 15:33:49 +02:00
await store.dispatch('TimelineSpace/Contents/FollowRequests/fetchRequests')
expect(store.state.TimelineSpace.Contents.FollowRequests.requests).toEqual([account])
})
})
describe('acceptRequest', () => {
beforeAll(() => {
state = () => {
return {
requests: [account]
}
}
})
it('should be succeed', async () => {
2020-03-15 09:48:02 +01:00
mockClient.getFollowRequests = () => {
return new Promise<Response<Array<Entity.Account>>>(resolve => {
const res: Response<Array<Entity.Account>> = {
data: [],
status: 200,
statusText: 'OK',
headers: {}
}
resolve(res)
})
}
2022-04-25 15:33:49 +02:00
await store.dispatch('TimelineSpace/Contents/FollowRequests/acceptRequest', account)
expect(store.state.TimelineSpace.Contents.FollowRequests.requests).toEqual([])
})
})
describe('rejectRequest', () => {
beforeAll(() => {
state = () => {
return {
requests: [account]
}
}
})
it('should be succeed', async () => {
2020-03-15 09:48:02 +01:00
mockClient.getFollowRequests = () => {
return new Promise<Response<Array<Entity.Account>>>(resolve => {
const res: Response<Array<Entity.Account>> = {
data: [],
status: 200,
statusText: 'OK',
headers: {}
}
resolve(res)
})
}
2022-04-25 15:33:49 +02:00
await store.dispatch('TimelineSpace/Contents/FollowRequests/rejectRequest', account)
expect(store.state.TimelineSpace.Contents.FollowRequests.requests).toEqual([])
})
})
})