Files
lpt-fe/src/__tests__/api/studySessions.spec.ts
T

86 lines
2.8 KiB
TypeScript

import { describe, it, expect, vi, beforeEach } from 'vitest'
vi.mock('@/utils/request', () => ({
default: {
get: vi.fn(),
post: vi.fn(),
put: vi.fn(),
delete: vi.fn(),
},
}))
import request from '@/utils/request'
import {
continueSession,
pauseSession,
endSession,
startOrContinueStudySession,
getSessionDetail,
} from '@/api/studySessions'
const mockedRequest = vi.mocked(request)
describe('studySessions API', () => {
beforeEach(() => {
vi.clearAllMocks()
})
it('continueSession sends POST to correct endpoint', async () => {
mockedRequest.post.mockResolvedValue({ code: 200, data: null })
await continueSession('S001')
expect(mockedRequest.post).toHaveBeenCalledWith('/study-sessions/S001/study-sessions/continue')
})
it('pauseSession sends POST with endTime param when provided', async () => {
mockedRequest.post.mockResolvedValue({ code: 200, data: null })
const endTime = new Date('2024-01-15T10:30:00Z')
await pauseSession('S001', endTime)
expect(mockedRequest.post).toHaveBeenCalledWith(
'/study-sessions/S001/study-sessions/pause',
null,
{ params: { endTime: endTime.toISOString() } }
)
})
it('pauseSession sends POST with null params when endTime not provided', async () => {
mockedRequest.post.mockResolvedValue({ code: 200, data: null })
await pauseSession('S001')
expect(mockedRequest.post).toHaveBeenCalledWith(
'/study-sessions/S001/study-sessions/pause',
null,
{ params: null }
)
})
it('endSession sends POST with default content', async () => {
mockedRequest.post.mockResolvedValue({ code: 200, data: null })
await endSession('S001')
expect(mockedRequest.post).toHaveBeenCalledWith(
'/study-sessions/S001/study-sessions/ended',
{ content: '任务结束' }
)
})
it('endSession sends POST with custom content', async () => {
mockedRequest.post.mockResolvedValue({ code: 200, data: null })
await endSession('S001', '自定义结束')
expect(mockedRequest.post).toHaveBeenCalledWith(
'/study-sessions/S001/study-sessions/ended',
{ content: '自定义结束' }
)
})
it('startOrContinueStudySession sends GET to correct endpoint', async () => {
mockedRequest.get.mockResolvedValue({ code: 200, data: { sessionNum: 'S002' } })
const result = await startOrContinueStudySession('T001')
expect(mockedRequest.get).toHaveBeenCalledWith('/tasks/T001/study-sessions/start-or-continue')
expect(result).toEqual({ code: 200, data: { sessionNum: 'S002' } })
})
it('getSessionDetail sends GET to correct endpoint', async () => {
mockedRequest.get.mockResolvedValue({ code: 200, data: { id: 1 } })
await getSessionDetail('S001')
expect(mockedRequest.get).toHaveBeenCalledWith('/study-sessions/S001')
})
})