|
|
@@ -144,112 +144,110 @@ describe('Users API Integration Tests', () => {
|
|
|
});
|
|
|
});
|
|
|
|
|
|
- // it('应该支持关键词搜索', async () => {
|
|
|
- // const mockCrudService = require('../../../utils/generic-crud.service').GenericCrudService();
|
|
|
- // mockCrudService.getList.mockResolvedValue([[], 0]);
|
|
|
-
|
|
|
- // const response = await apiClient.get('/?page=1&pageSize=10&keyword=admin');
|
|
|
-
|
|
|
- // expect(response.status).toBe(200);
|
|
|
- // expect(mockCrudService.getList).toHaveBeenCalledWith(
|
|
|
- // expect.objectContaining({
|
|
|
- // page: 1,
|
|
|
- // pageSize: 10,
|
|
|
- // keyword: 'admin'
|
|
|
- // })
|
|
|
- // );
|
|
|
- // });
|
|
|
+ it('应该支持关键词搜索', async () => {
|
|
|
+ mockCrudService.getList.mockResolvedValue([[], 0]);
|
|
|
+
|
|
|
+ const response = await apiClient.get('/?page=1&pageSize=10&keyword=admin');
|
|
|
+
|
|
|
+ expect(response.status).toBe(200);
|
|
|
+ expect(mockCrudService.getList).toHaveBeenCalledWith(
|
|
|
+ 1,
|
|
|
+ 10,
|
|
|
+ 'admin',
|
|
|
+ ['username', 'nickname', 'phone', 'email'],
|
|
|
+ undefined,
|
|
|
+ ['roles'],
|
|
|
+ expect.any(Object),
|
|
|
+ undefined
|
|
|
+ );
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ describe('GET /users/:id', () => {
|
|
|
+ it('应该返回特定用户信息', async () => {
|
|
|
+ const mockUser = { id: 1, username: 'testuser', email: 'test@example.com' };
|
|
|
+ mockCrudService.getById.mockResolvedValue(mockUser);
|
|
|
+
|
|
|
+ const response = await apiClient.get('/1');
|
|
|
+
|
|
|
+ expect(response.status).toBe(200);
|
|
|
+ expect(response.data).toEqual(mockUser);
|
|
|
+ expect(mockCrudService.getById).toHaveBeenCalledWith(1, ['roles']);
|
|
|
+ });
|
|
|
+
|
|
|
+ it('应该在用户不存在时返回404', async () => {
|
|
|
+ mockCrudService.getById.mockResolvedValue(null);
|
|
|
+
|
|
|
+ const response = await apiClient.get('/999');
|
|
|
+
|
|
|
+ expect(response.status).toBe(404);
|
|
|
+ expect(response.data).toMatchObject({
|
|
|
+ code: 404,
|
|
|
+ message: expect.any(String)
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ it('应该验证用户ID格式', async () => {
|
|
|
+ const response = await apiClient.get('/invalid');
|
|
|
+
|
|
|
+ expect(response.status).toBe(400);
|
|
|
+ expect(response.data).toMatchObject({
|
|
|
+ success: false,
|
|
|
+ error: expect.any(Object)
|
|
|
+ });
|
|
|
+ });
|
|
|
});
|
|
|
|
|
|
- // describe('GET /users/:id', () => {
|
|
|
- // it('应该返回特定用户信息', async () => {
|
|
|
- // const mockUser = { id: 1, username: 'testuser', email: 'test@example.com' };
|
|
|
- // const mockCrudService = require('../../../utils/generic-crud.service').GenericCrudService();
|
|
|
- // mockCrudService.getById.mockResolvedValue(mockUser);
|
|
|
-
|
|
|
- // const response = await apiClient.get('/1');
|
|
|
-
|
|
|
- // expect(response.status).toBe(200);
|
|
|
- // expect(response.data).toEqual(mockUser);
|
|
|
- // expect(mockCrudService.getById).toHaveBeenCalledWith(1);
|
|
|
- // });
|
|
|
-
|
|
|
- // it('应该在用户不存在时返回404', async () => {
|
|
|
- // const mockCrudService = require('../../../utils/generic-crud.service').GenericCrudService();
|
|
|
- // mockCrudService.getById.mockResolvedValue(null);
|
|
|
-
|
|
|
- // const response = await apiClient.get('/999');
|
|
|
-
|
|
|
- // expect(response.status).toBe(404);
|
|
|
- // expect(response.data).toMatchObject({
|
|
|
- // code: 404,
|
|
|
- // message: expect.any(String)
|
|
|
- // });
|
|
|
- // });
|
|
|
-
|
|
|
- // it('应该验证用户ID格式', async () => {
|
|
|
- // const response = await apiClient.get('/invalid');
|
|
|
-
|
|
|
- // expect(response.status).toBe(400);
|
|
|
- // expect(response.data).toMatchObject({
|
|
|
- // success: false,
|
|
|
- // error: expect.any(Object)
|
|
|
- // });
|
|
|
- // });
|
|
|
- // });
|
|
|
-
|
|
|
- // describe('错误处理', () => {
|
|
|
- // it('应该在服务错误时返回500状态码', async () => {
|
|
|
- // const mockCrudService = require('../../../utils/generic-crud.service').GenericCrudService();
|
|
|
- // mockCrudService.getList.mockRejectedValue(new Error('Database error'));
|
|
|
-
|
|
|
- // const response = await apiClient.get('/?page=1&pageSize=10');
|
|
|
-
|
|
|
- // expect(response.status).toBe(500);
|
|
|
- // expect(response.data).toMatchObject({
|
|
|
- // code: 500,
|
|
|
- // message: 'Database error'
|
|
|
- // });
|
|
|
- // });
|
|
|
-
|
|
|
- // it('应该在未知错误时返回通用错误消息', async () => {
|
|
|
- // const mockCrudService = require('../../../utils/generic-crud.service').GenericCrudService();
|
|
|
- // mockCrudService.getList.mockRejectedValue('Unknown error');
|
|
|
-
|
|
|
- // const response = await apiClient.get('/?page=1&pageSize=10');
|
|
|
-
|
|
|
- // expect(response.status).toBe(500);
|
|
|
- // expect(response.data).toMatchObject({
|
|
|
- // code: 500,
|
|
|
- // message: '获取用户列表失败'
|
|
|
- // });
|
|
|
- // });
|
|
|
- // });
|
|
|
-
|
|
|
- // describe('认证和授权', () => {
|
|
|
- // it('应该在缺少认证令牌时返回401', async () => {
|
|
|
- // apiClient.clearAuthToken();
|
|
|
-
|
|
|
- // const response = await apiClient.get('/');
|
|
|
-
|
|
|
- // expect(response.status).toBe(401);
|
|
|
- // expect(response.data).toMatchObject({
|
|
|
- // code: 401,
|
|
|
- // message: expect.any(String)
|
|
|
- // });
|
|
|
- // });
|
|
|
-
|
|
|
- // it('应该在无效令牌时返回401', async () => {
|
|
|
- // // 模拟认证中间件验证失败
|
|
|
- // const authMiddleware = require('../../middleware/auth.middleware').authMiddleware;
|
|
|
- // authMiddleware.mockImplementation((c: any) => {
|
|
|
- // return c.json({ error: 'Invalid token' }, 401);
|
|
|
- // });
|
|
|
-
|
|
|
- // const response = await apiClient.get('/');
|
|
|
-
|
|
|
- // expect(response.status).toBe(401);
|
|
|
- // expect(response.data).toEqual({ error: 'Invalid token' });
|
|
|
- // });
|
|
|
- // });
|
|
|
+ describe('错误处理', () => {
|
|
|
+ it('应该在服务错误时返回500状态码', async () => {
|
|
|
+ mockCrudService.getList.mockRejectedValue(new Error('Database error'));
|
|
|
+
|
|
|
+ const response = await apiClient.get('/?page=1&pageSize=10');
|
|
|
+
|
|
|
+ expect(response.status).toBe(500);
|
|
|
+ expect(response.data).toMatchObject({
|
|
|
+ code: 500,
|
|
|
+ message: 'Database error'
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ it('应该在未知错误时返回通用错误消息', async () => {
|
|
|
+ mockCrudService.getList.mockRejectedValue('Unknown error');
|
|
|
+
|
|
|
+ const response = await apiClient.get('/?page=1&pageSize=10');
|
|
|
+
|
|
|
+ expect(response.status).toBe(500);
|
|
|
+ expect(response.data).toMatchObject({
|
|
|
+ code: 500,
|
|
|
+ message: '获取用户列表失败'
|
|
|
+ });
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ describe('认证和授权', () => {
|
|
|
+ it('应该在缺少认证令牌时返回401', async () => {
|
|
|
+ apiClient.clearAuthToken();
|
|
|
+
|
|
|
+ const response = await apiClient.get('/');
|
|
|
+
|
|
|
+ expect(response.status).toBe(401);
|
|
|
+ expect(response.data).toMatchObject({
|
|
|
+ code: 401,
|
|
|
+ message: expect.any(String)
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ it('应该在无效令牌时返回401', async () => {
|
|
|
+ // 模拟认证中间件验证失败
|
|
|
+ const { authMiddleware } = await import('../../middleware/auth.middleware');
|
|
|
+ vi.mocked(authMiddleware).mockImplementation((c: any) => {
|
|
|
+ return c.json({ error: 'Invalid token' }, 401);
|
|
|
+ });
|
|
|
+
|
|
|
+ const response = await apiClient.get('/');
|
|
|
+
|
|
|
+ expect(response.status).toBe(401);
|
|
|
+ expect(response.data).toEqual({ error: 'Invalid token' });
|
|
|
+ });
|
|
|
+ });
|
|
|
});
|