| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- import { describe, it, expect, vi, beforeEach } from 'vitest'
- import { listUsers, getUser, createUser, updateUser, deleteUser, resetPassword } from '@/api/user'
- import * as request from '@/utils/request'
- // Mock request module
- vi.mock('@/utils/request', () => ({
- get: vi.fn(),
- post: vi.fn(),
- put: vi.fn(),
- del: vi.fn()
- }))
- describe('User API', () => {
- beforeEach(() => {
- vi.clearAllMocks()
- })
- describe('listUsers', () => {
- it('应该调用正确的 API 端点', async () => {
- const mockResponse = {
- code: 200,
- data: { rows: [], total: 0 }
- }
- vi.mocked(request.get).mockResolvedValue(mockResponse)
- await listUsers()
- expect(request.get).toHaveBeenCalledWith('/users', undefined)
- })
- it('应该传递查询参数', async () => {
- const mockResponse = {
- code: 200,
- data: { rows: [], total: 0 }
- }
- vi.mocked(request.get).mockResolvedValue(mockResponse)
- const params = { page: 1, pageSize: 10, search: 'admin', role: 'admin' as const }
- await listUsers(params)
- expect(request.get).toHaveBeenCalledWith('/users', params)
- })
- it('应该返回用户列表数据', async () => {
- const mockUsers = [
- { id: '1', username: 'admin', role: 'admin' },
- { id: '2', username: 'user1', role: 'viewer' }
- ]
- const mockResponse = {
- code: 200,
- data: { rows: mockUsers, total: 2 }
- }
- vi.mocked(request.get).mockResolvedValue(mockResponse)
- const result = await listUsers()
- expect(result.data.rows).toEqual(mockUsers)
- expect(result.data.total).toBe(2)
- })
- })
- describe('getUser', () => {
- it('应该调用正确的 API 端点', async () => {
- const mockResponse = {
- code: 200,
- data: { id: '1', username: 'admin', role: 'admin' }
- }
- vi.mocked(request.get).mockResolvedValue(mockResponse)
- await getUser('1')
- expect(request.get).toHaveBeenCalledWith('/users/1')
- })
- it('应该返回用户详情', async () => {
- const mockUser = { id: '1', username: 'admin', role: 'admin' }
- const mockResponse = {
- code: 200,
- data: mockUser
- }
- vi.mocked(request.get).mockResolvedValue(mockResponse)
- const result = await getUser('1')
- expect(result.data).toEqual(mockUser)
- })
- })
- describe('createUser', () => {
- it('应该调用正确的 API 端点', async () => {
- const mockResponse = {
- code: 200,
- data: { id: '1', username: 'newuser', role: 'viewer' }
- }
- vi.mocked(request.post).mockResolvedValue(mockResponse)
- const userData = { username: 'newuser', password: '123456', role: 'viewer' as const }
- await createUser(userData)
- expect(request.post).toHaveBeenCalledWith('/users', userData)
- })
- it('应该返回创建的用户', async () => {
- const mockUser = { id: '1', username: 'newuser', role: 'viewer' }
- const mockResponse = {
- code: 200,
- data: mockUser
- }
- vi.mocked(request.post).mockResolvedValue(mockResponse)
- const userData = { username: 'newuser', password: '123456', role: 'viewer' as const }
- const result = await createUser(userData)
- expect(result.data).toEqual(mockUser)
- })
- })
- describe('updateUser', () => {
- it('应该调用正确的 API 端点', async () => {
- const mockResponse = {
- code: 200,
- data: { id: '1', username: 'admin', role: 'admin' }
- }
- vi.mocked(request.put).mockResolvedValue(mockResponse)
- const updateData = { role: 'operator' as const }
- await updateUser('1', updateData)
- expect(request.put).toHaveBeenCalledWith('/users/1', updateData)
- })
- it('应该返回更新后的用户', async () => {
- const mockUser = { id: '1', username: 'admin', role: 'operator' }
- const mockResponse = {
- code: 200,
- data: mockUser
- }
- vi.mocked(request.put).mockResolvedValue(mockResponse)
- const updateData = { role: 'operator' as const }
- const result = await updateUser('1', updateData)
- expect(result.data).toEqual(mockUser)
- })
- })
- describe('deleteUser', () => {
- it('应该调用正确的 API 端点', async () => {
- const mockResponse = {
- code: 200,
- data: null
- }
- vi.mocked(request.del).mockResolvedValue(mockResponse)
- await deleteUser('1')
- expect(request.del).toHaveBeenCalledWith('/users/1')
- })
- it('应该返回成功响应', async () => {
- const mockResponse = {
- code: 200,
- data: null,
- message: 'success'
- }
- vi.mocked(request.del).mockResolvedValue(mockResponse)
- const result = await deleteUser('1')
- expect(result.code).toBe(200)
- })
- })
- describe('resetPassword', () => {
- it('应该调用正确的 API 端点', async () => {
- const mockResponse = {
- code: 200,
- data: null
- }
- vi.mocked(request.post).mockResolvedValue(mockResponse)
- await resetPassword('1', 'newpassword')
- expect(request.post).toHaveBeenCalledWith('/users/1/reset-password', { password: 'newpassword' })
- })
- it('应该返回成功响应', async () => {
- const mockResponse = {
- code: 200,
- data: null,
- message: 'success'
- }
- vi.mocked(request.post).mockResolvedValue(mockResponse)
- const result = await resetPassword('1', 'newpassword')
- expect(result.code).toBe(200)
- })
- })
- describe('错误处理', () => {
- it('API 错误应该被正确传递', async () => {
- const error = new Error('Network Error')
- vi.mocked(request.get).mockRejectedValue(error)
- await expect(listUsers()).rejects.toThrow('Network Error')
- })
- it('应该处理 API 返回的错误响应', async () => {
- const mockResponse = {
- code: 400,
- message: '用户名已存在',
- data: null
- }
- vi.mocked(request.post).mockResolvedValue(mockResponse)
- const userData = { username: 'existinguser', password: '123456', role: 'viewer' as const }
- const result = await createUser(userData)
- expect(result.code).toBe(400)
- expect(result.message).toBe('用户名已存在')
- })
- })
- })
|