salary.integration.test.simple.ts 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import { describe, it, expect, beforeEach } from 'vitest';
  2. import { testClient } from 'hono/testing';
  3. import { IntegrationTestDatabase, setupIntegrationDatabaseHooksWithEntities } from '@d8d/shared-test-util';
  4. import { JWTUtil } from '@d8d/shared-utils';
  5. import { UserEntity, Role } from '@d8d/user-module';
  6. import { File } from '@d8d/file-module';
  7. import { AreaEntity } from '@d8d/geo-areas';
  8. import salaryRoutes from '../../src/routes/salary.routes';
  9. import { SalaryLevel } from '../../src/entities/salary-level.entity';
  10. // 设置集成测试钩子
  11. setupIntegrationDatabaseHooksWithEntities([UserEntity, File, Role, AreaEntity, SalaryLevel])
  12. describe('薪资管理API集成测试(简化版)', () => {
  13. let client: ReturnType<typeof testClient<typeof salaryRoutes>>;
  14. let testToken: string;
  15. let testUser: UserEntity;
  16. let testProvince: AreaEntity;
  17. let testCity: AreaEntity;
  18. beforeEach(async () => {
  19. // 创建测试客户端
  20. client = testClient(salaryRoutes);
  21. // 获取数据源
  22. const dataSource = await IntegrationTestDatabase.getDataSource();
  23. // 创建测试用户
  24. const userRepository = dataSource.getRepository(UserEntity);
  25. testUser = userRepository.create({
  26. username: `test_user_${Date.now()}`,
  27. password: 'test_password',
  28. nickname: '测试用户',
  29. registrationSource: 'web'
  30. });
  31. await userRepository.save(testUser);
  32. // 生成测试用户的token
  33. testToken = JWTUtil.generateToken({
  34. id: testUser.id,
  35. username: testUser.username,
  36. roles: [{name:'user'}]
  37. });
  38. // 创建测试区域数据
  39. const areaRepository = dataSource.getRepository(AreaEntity);
  40. // 创建省份
  41. testProvince = areaRepository.create({
  42. code: '110000',
  43. name: '北京市',
  44. level: 1,
  45. parentId: null
  46. });
  47. await areaRepository.save(testProvince);
  48. // 创建城市
  49. testCity = areaRepository.create({
  50. code: '110100',
  51. name: '北京市',
  52. level: 2,
  53. parentId: testProvince.id
  54. });
  55. await areaRepository.save(testCity);
  56. });
  57. describe('基本功能测试', () => {
  58. it('应该成功创建薪资水平', async () => {
  59. const createData = {
  60. provinceId: testProvince.id,
  61. cityId: testCity.id,
  62. basicSalary: 5000.00
  63. };
  64. const response = await client.create.$post({
  65. json: createData
  66. }, {
  67. headers: {
  68. 'Authorization': `Bearer ${testToken}`
  69. }
  70. });
  71. expect(response.status).toBe(200);
  72. const result = await response.json();
  73. // 检查返回结果是否有错误码
  74. if ('code' in result) {
  75. // 如果有错误码,测试失败
  76. expect(result.code).not.toBe(400);
  77. expect(result.code).not.toBe(401);
  78. } else {
  79. // 成功情况
  80. expect(result).toHaveProperty('id');
  81. expect(result.provinceId).toBe(testProvince.id);
  82. expect(result.cityId).toBe(testCity.id);
  83. expect(result.basicSalary).toBe(5000.00);
  84. }
  85. });
  86. it('应该要求认证', async () => {
  87. const createData = {
  88. provinceId: testProvince.id,
  89. cityId: testCity.id,
  90. basicSalary: 5000.00
  91. };
  92. const response = await client.create.$post({
  93. json: createData
  94. // 不提供Authorization header
  95. });
  96. expect(response.status).toBe(401);
  97. });
  98. });
  99. });