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') }) })