/** @jest-environment node */ import { readFileSync } from 'fs' import path from 'path' const INIT_ROUTES = [ 'app/api/materials/upload/3d-original/init/route.ts', 'app/api/materials/upload/ai-original/init/route.ts', 'app/api/materials/upload/real-photo/init/route.ts', 'app/api/materials/upload/video-screenshot/init/route.ts', 'app/api/materials/upload/task-page/init/route.ts', 'app/api/materials/upload/product-package/init/route.ts', ] describe('任务素材 init 不永久清理旧数据', () => { test.each(INIT_ROUTES)('%s 只能校验并创建 uploading,不得调用旧素材 purge', (relativePath) => { const source = readFileSync(path.join(process.cwd(), relativePath), 'utf8') expect(source).not.toContain('purgeDeletedMaterialsByTaskNo') expect(source).not.toContain('deleteFiles(') expect(source).not.toContain('prisma.material.delete') }) test('通用上传失败清理必须先条件回滚数据库,再删除派生文件', () => { const source = readFileSync( path.join(process.cwd(), 'app/api/materials/upload/route.ts'), 'utf8', ) const conditionalDatabaseDelete = source.indexOf( 'const deleteResult = await prisma.material.deleteMany', ) const derivedFileDelete = source.indexOf( 'const cleanupResult = await deleteFiles(filesToDelete)', conditionalDatabaseDelete, ) expect(conditionalDatabaseDelete).toBeGreaterThan(-1) expect(derivedFileDelete).toBeGreaterThan(conditionalDatabaseDelete) }) })