Browse Source

✨ feat(server): add api.ts barrel file for server exports
- 创建packages/server/src/api.ts文件,统一导出服务器模块

♻️ refactor(tests): update server import paths to use @d8d namespace
- 将所有测试文件中的服务器模块导入路径从@/server改为@d8d/server
- 更新tsconfig.json中的路径映射,支持@d8d/server/*格式导入
- 涉及auth、backup、files、users等多个测试文件的路径调整

yourname 1 month ago
parent
commit
9d3093a489

+ 1 - 0
packages/server/src/api.ts

@@ -0,0 +1 @@
+export * from './index'

+ 5 - 5
web/tests/integration/server/auth.integration.test.ts

@@ -5,11 +5,11 @@ import {
   setupIntegrationDatabaseHooks,
   TestDataFactory
 } from '~/utils/server/integration-test-db';
-import { UserEntity } from '@/server/modules/users/user.entity';
-import { authRoutes } from '@/server/api';
-import { AuthService } from '@/server/modules/auth/auth.service';
-import { UserService } from '@/server/modules/users/user.service';
-import { DisabledStatus } from '@/share/types';
+import { UserEntity } from '@d8d/server/modules/users/user.entity';
+import { authRoutes } from '@d8d/server/api';
+import { AuthService } from '@d8d/server/modules/auth/auth.service';
+import { UserService } from '@d8d/server/modules/users/user.service';
+import { DisabledStatus } from '@d8d/server/share/types';
 
 // 设置集成测试钩子
 setupIntegrationDatabaseHooks()

+ 3 - 3
web/tests/integration/server/backup.integration.test.ts

@@ -1,6 +1,6 @@
 import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'
-import { databaseBackup } from '../../../src/server/utils/backup'
-import { databaseRestore } from '../../../src/server/utils/restore'
+import { databaseBackup } from '@d8d/server/utils/backup'
+import { databaseRestore } from '@d8d/server/utils/restore'
 import path from 'path'
 
 // Mock pg-dump-restore for integration tests
@@ -43,7 +43,7 @@ vi.mock('node-cron', async (importOriginal) => {
 })
 
 // Mock logger
-vi.mock('../../../src/server/utils/logger', () => ({
+vi.mock('@d8d/server/utils/logger', () => ({
   logger: {
     db: vi.fn(),
     error: vi.fn(),

+ 9 - 9
web/tests/integration/server/files/files.integration.test.ts

@@ -1,14 +1,14 @@
 import { describe, it, expect, beforeEach, vi, afterEach } from 'vitest';
 import { testClient } from 'hono/testing';
-import { FileService } from '@/server/modules/files/file.service';
-import { authMiddleware } from '@/server/middleware/auth.middleware';
-import { fileApiRoutes } from '@/server/api';
-import { ConcreteCrudService } from '@/server/utils/concrete-crud.service';
+import { FileService } from '@d8d/server/modules/files/file.service';
+import { authMiddleware } from '@d8d/server/middleware/auth.middleware';
+import { fileApiRoutes } from '@d8d/server/api';
+import { ConcreteCrudService } from '@d8d/server/utils/concrete-crud.service';
 
-vi.mock('@/server/modules/files/file.service');
-vi.mock('@/server/middleware/auth.middleware');
-vi.mock('@/server/data-source');
-vi.mock('@/server/utils/concrete-crud.service');
+vi.mock('@d8d/server/modules/files/file.service');
+vi.mock('@d8d/server/middleware/auth.middleware');
+vi.mock('@d8d/server/data-source');
+vi.mock('@d8d/server/utils/concrete-crud.service');
 
 describe('File API Integration Tests', () => {
   let client: ReturnType<typeof testClient<typeof fileApiRoutes>>['api']['v1'];
@@ -39,7 +39,7 @@ describe('File API Integration Tests', () => {
     vi.clearAllMocks();
 
     // Mock auth middleware to bypass authentication
-    vi.mocked(authMiddleware).mockImplementation(async (c, next) => {
+    vi.mocked(authMiddleware).mockImplementation(async (c: any, next: any) => {
       const authHeader = c.req.header('Authorization');
       if (!authHeader) {
         return c.json({ message: 'Authorization header missing' }, 401);

+ 3 - 3
web/tests/integration/server/files/minio.integration.test.ts

@@ -1,11 +1,11 @@
 import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
-import { MinioService } from '@/server/modules/files/minio.service';
+import { MinioService } from '@d8d/server/modules/files/minio.service';
 import { Client } from 'minio';
-import { logger } from '@/server/utils/logger';
+import { logger } from '@d8d/server/utils/logger';
 
 // Mock dependencies
 vi.mock('minio');
-vi.mock('@/server/utils/logger');
+vi.mock('@d8d/server/utils/logger');
 
 // Mock process.env using vi.stubEnv for proper isolation
 beforeEach(() => {

+ 3 - 3
web/tests/integration/server/users.integration.test.ts

@@ -6,9 +6,9 @@ import {
   TestDataFactory
 } from '~/utils/server/integration-test-db';
 import { IntegrationTestAssertions } from '~/utils/server/integration-test-utils';
-import { userRoutes } from '@/server/api';
-import { AuthService } from '@/server/modules/auth/auth.service';
-import { UserService } from '@/server/modules/users/user.service';
+import { userRoutes } from '@d8d/server/api';
+import { AuthService } from '@d8d/server/modules/auth/auth.service';
+import { UserService } from '@d8d/server/modules/users/user.service';
 
 
 // 设置集成测试钩子

+ 6 - 6
web/tests/unit/server/modules/files/file.service.test.ts

@@ -1,13 +1,13 @@
 import { describe, it, expect, beforeEach, vi, afterEach } from 'vitest';
 import { DataSource } from 'typeorm';
-import { FileService } from '@/server/modules/files/file.service';
-import { File } from '@/server/modules/files/file.entity';
-import { MinioService } from '@/server/modules/files/minio.service';
-import { logger } from '@/server/utils/logger';
+import { FileService } from '@d8d/server/modules/files/file.service';
+import { File } from '@d8d/server/modules/files/file.entity';
+import { MinioService } from '@d8d/server/modules/files/minio.service';
+import { logger } from '@d8d/server/utils/logger';
 
 // Mock dependencies
-vi.mock('@/server/modules/files/minio.service');
-vi.mock('@/server/utils/logger');
+vi.mock('@d8d/server/modules/files/minio.service');
+vi.mock('@d8d/server/utils/logger');
 vi.mock('uuid', () => ({
   v4: () => 'test-uuid-123'
 }));

+ 3 - 3
web/tests/unit/server/modules/files/minio.service.test.ts

@@ -1,11 +1,11 @@
 import { describe, it, expect, beforeEach, vi, afterEach } from 'vitest';
-import { MinioService } from '@/server/modules/files/minio.service';
+import { MinioService } from '@d8d/server/modules/files/minio.service';
 import { Client } from 'minio';
-import { logger } from '@/server/utils/logger';
+import { logger } from '@d8d/server/utils/logger';
 
 // Mock dependencies
 vi.mock('minio');
-vi.mock('@/server/utils/logger');
+vi.mock('@d8d/server/utils/logger');
 
 // Mock process.env using vi.stubEnv for proper isolation
 beforeEach(() => {

+ 2 - 2
web/tests/unit/server/modules/user.service.test.ts

@@ -1,5 +1,5 @@
-import { UserService } from '../../../../src/server/modules/users/user.service';
-import { UserEntity as User } from '../../../../src/server/modules/users/user.entity';
+import { UserService } from '@d8d/server/modules/users/user.service';
+import { UserEntity as User } from '@d8d/server/modules/users/user.entity';
 import * as bcrypt from 'bcrypt';
 import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
 

+ 7 - 7
web/tests/unit/server/utils/backup.test.ts

@@ -1,5 +1,5 @@
 import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'
-import { DatabaseBackup } from '../../../../src/server/utils/backup'
+import { DatabaseBackup } from '@d8d/server/utils/backup'
 import path from 'path'
 
 // Mock pg-dump-restore
@@ -25,7 +25,7 @@ vi.mock('fs', () => ({
 }))
 
 // Mock logger
-vi.mock('../../../../src/server/utils/logger', () => ({
+vi.mock('@d8d/server/utils/logger', () => ({
   logger: {
     db: vi.fn(),
     error: vi.fn(),
@@ -66,7 +66,7 @@ describe('DatabaseBackup', () => {
 
     it('应该在创建目录失败时抛出错误', async () => {
       const fs = await import('fs')
-      const { logger } = await import('../../../../src/server/utils/logger')
+      const { logger } = await import('@d8d/server/utils/logger')
 
       vi.mocked(fs.promises.mkdir).mockRejectedValueOnce(new Error('创建目录失败'))
 
@@ -147,7 +147,7 @@ describe('DatabaseBackup', () => {
   describe('cleanupOldBackups', () => {
     it('应该清理7天前的旧备份', async () => {
       const fs = await import('fs')
-      const { logger } = await import('../../../../src/server/utils/logger')
+      const { logger } = await import('@d8d/server/utils/logger')
 
       const now = Date.now()
       const oldFileTime = now - (8 * 24 * 60 * 60 * 1000) // 8天前
@@ -167,7 +167,7 @@ describe('DatabaseBackup', () => {
 
     it('应该在清理失败时记录错误但不抛出', async () => {
       const fs = await import('fs')
-      const { logger } = await import('../../../../src/server/utils/logger')
+      const { logger } = await import('@d8d/server/utils/logger')
 
       vi.mocked(fs.promises.readdir).mockRejectedValueOnce(new Error('读取目录失败'))
 
@@ -178,7 +178,7 @@ describe('DatabaseBackup', () => {
 
   describe('startScheduledBackups', () => {
     it('应该启动定时备份任务', async () => {
-      const { logger } = await import('../../../../src/server/utils/logger')
+      const { logger } = await import('@d8d/server/utils/logger')
 
       backup.startScheduledBackups()
 
@@ -189,7 +189,7 @@ describe('DatabaseBackup', () => {
 
   describe('stopScheduledBackups', () => {
     it('应该停止定时备份任务', async () => {
-      const { logger } = await import('../../../../src/server/utils/logger')
+      const { logger } = await import('@d8d/server/utils/logger')
 
       // 先启动再停止
       backup.startScheduledBackups()

+ 4 - 4
web/tests/unit/server/utils/restore.test.ts

@@ -1,5 +1,5 @@
 import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'
-import { DatabaseRestore } from '../../../../src/server/utils/restore'
+import { DatabaseRestore } from '@d8d/server/utils/restore'
 import path from 'path'
 
 // Mock pg-dump-restore
@@ -22,7 +22,7 @@ vi.mock('fs', async (importOriginal) => {
 })
 
 // Mock logger
-vi.mock('../../../../src/server/utils/logger', () => ({
+vi.mock('@d8d/server/utils/logger', () => ({
   logger: {
     db: vi.fn(),
     error: vi.fn(),
@@ -110,7 +110,7 @@ describe('DatabaseRestore', () => {
 
     it('应该在读取目录失败时返回null', async () => {
       const fs = await import('fs')
-      const { logger } = await import('../../../../src/server/utils/logger')
+      const { logger } = await import('@d8d/server/utils/logger')
 
       vi.mocked(fs.promises.readdir).mockRejectedValueOnce(new Error('读取目录失败'))
 
@@ -141,7 +141,7 @@ describe('DatabaseRestore', () => {
 
     it('应该在读取目录失败时返回空数组', async () => {
       const fs = await import('fs')
-      const { logger } = await import('../../../../src/server/utils/logger')
+      const { logger } = await import('@d8d/server/utils/logger')
 
       vi.mocked(fs.promises.readdir).mockRejectedValueOnce(new Error('读取目录失败'))
 

+ 3 - 3
web/tests/utils/server/integration-test-db.ts

@@ -1,8 +1,8 @@
 import { DataSource } from 'typeorm';
 import { beforeEach, afterEach } from 'vitest';
-import { UserEntity } from '@/server/modules/users/user.entity';
-import { Role } from '@/server/modules/users/role.entity';
-import { AppDataSource } from '@/server/data-source';
+import { UserEntity } from '@d8d/server/modules/users/user.entity';
+import { Role } from '@d8d/server/modules/users/role.entity';
+import { AppDataSource } from '@d8d/server/data-source';
 
 /**
  * 集成测试数据库工具类 - 使用真实PostgreSQL数据库

+ 1 - 1
web/tests/utils/server/integration-test-utils.ts

@@ -1,6 +1,6 @@
 
 import { IntegrationTestDatabase } from './integration-test-db';
-import { UserEntity } from '@/server/modules/users/user.entity';
+import { UserEntity } from '@d8d/server/modules/users/user.entity';
 
 
 

+ 4 - 4
web/tests/utils/server/service-stubs.ts

@@ -137,22 +137,22 @@ export const serviceStubs = new ServiceStubManager();
  */
 export function setupServiceMocks() {
   // 用户服务mock
-  vi.mock('../../../src/server/modules/users/user.service', () => ({
+  vi.mock('@d8d/server/modules/users/user.service', () => ({
     UserService: vi.fn().mockImplementation(() => serviceStubs.createStub('UserService', createMockUserService()))
   }));
 
   // 认证服务mock
-  vi.mock('../../../src/server/modules/auth/auth.service', () => ({
+  vi.mock('@d8d/server/modules/auth/auth.service', () => ({
     AuthService: vi.fn().mockImplementation(() => serviceStubs.createStub('AuthService', createMockAuthService()))
   }));
 
   // 角色服务mock
-  vi.mock('../../../src/server/modules/roles/role.service', () => ({
+  vi.mock('@d8d/server/modules/roles/role.service', () => ({
     RoleService: vi.fn().mockImplementation(() => serviceStubs.createStub('RoleService', createMockRoleService()))
   }));
 
   // 通用CRUD服务mock
-  vi.mock('../../../src/server/utils/generic-crud.service', () => ({
+  vi.mock('@d8d/server/utils/generic-crud.service', () => ({
     GenericCRUDService: vi.fn().mockImplementation(() => serviceStubs.createStub('GenericCRUDService', createMockCrudService()))
   }));
 }

+ 2 - 2
web/tests/utils/server/test-db.ts

@@ -116,8 +116,8 @@ export class TestDatabase {
       logging: false,
       entities: [
         // 导入实际实体
-        (await import('@/server/modules/users/user.entity')).UserEntity,
-        (await import('@/server/modules/users/role.entity')).Role
+        (await import('@d8d/server/modules/users/user.entity')).UserEntity,
+        (await import('@d8d/server/modules/users/role.entity')).Role
       ]
     });
 

+ 1 - 1
web/tsconfig.json

@@ -27,7 +27,7 @@
     "paths": {
       "~/*": ["tests/*"],
       "@/*": ["src/*"],
-      "@d8d/server/modules/*": ["../packages/server/src/modules/*"]
+      "@d8d/server/*": ["../packages/server/src/*"]
     },
   },
   "include": ["src", "tests"],