import { beforeEach, describe, expect, it, vi } from 'vitest' const getMock = vi.fn() const postMock = vi.fn() const putMock = vi.fn() const delMock = vi.fn() vi.mock('@/lib/http/client', () => ({ get: getMock, post: postMock, put: putMock, del: delMock, })) describe('users service', () => { beforeEach(() => { getMock.mockReset() postMock.mockReset() putMock.mockReset() delMock.mockReset() }) it('normalizes backend user list payloads that use users/limit/offset fields', async () => { getMock.mockResolvedValue({ users: [ { id: 7, username: 'e2e_admin', email: 'admin@example.com', nickname: '管理员', status: '1', }, ], total: 1, limit: 20, offset: 0, }) const { listUsers } = await import('./users') const result = await listUsers({ page: 1, page_size: 20 }) expect(getMock).toHaveBeenCalledWith('/users', { page: 1, page_size: 20 }) expect(result).toEqual({ items: [ { id: 7, username: 'e2e_admin', email: 'admin@example.com', phone: '', nickname: '管理员', avatar: '', gender: 0, birthday: '', region: '', bio: '', status: 1, last_login_at: '', last_login_ip: '', created_at: '', updated_at: '', }, ], total: 1, page: 1, page_size: 20, }) }) it('creates a user through the protected users endpoint', async () => { const payload = { username: 'new-user', password: 'Pass123!@#', role_ids: [2], } const { createUser } = await import('./users') await createUser(payload) expect(postMock).toHaveBeenCalledWith('/users', payload) }) })