fix: harden real backend admin workflows and ui

This commit is contained in:
hectorzhao
2026-07-03 19:29:56 +08:00
parent dd09d91c1e
commit 8cca361441
71 changed files with 5111 additions and 4439 deletions
+50
View File
@@ -0,0 +1,50 @@
import { FilesService } from './files.service';
describe('FilesService', () => {
it('uploads file content to object storage before creating FileObject metadata', async () => {
const prisma = {
fileObject: {
create: jest.fn().mockImplementation(({ data }) => Promise.resolve({ id: 'file-1', ...data })),
},
};
const objectStorage = {
getBucket: jest.fn().mockReturnValue('cmpp-platform'),
putObject: jest.fn().mockResolvedValue({ etag: 'etag-1' }),
presignedPutObject: jest.fn(),
};
const service = new FilesService(prisma as never, objectStorage as never);
const file = {
originalname: '营业执照.png',
mimetype: 'image/png',
size: 12,
buffer: Buffer.from('file-content'),
};
await expect(service.upload({ tenantId: 'tenant-1', purpose: 'signature_material', prefix: 'signature-materials/sig-1' }, file))
.resolves.toEqual(expect.objectContaining({
id: 'file-1',
tenantId: 'tenant-1',
bucket: 'cmpp-platform',
fileName: '营业执照.png',
contentType: 'image/png',
purpose: 'signature_material',
}));
expect(objectStorage.putObject).toHaveBeenCalledWith(
expect.stringMatching(/^signature-materials\/sig-1\/\d+-[a-f0-9-]+-营业执照\.png$/),
file.buffer,
12,
'image/png',
);
expect(prisma.fileObject.create).toHaveBeenCalledWith({
data: expect.objectContaining({
tenantId: 'tenant-1',
bucket: 'cmpp-platform',
fileName: '营业执照.png',
contentType: 'image/png',
sizeBytes: BigInt(12),
purpose: 'signature_material',
}),
});
});
});