fix: harden real backend admin workflows and ui
This commit is contained in:
@@ -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',
|
||||
}),
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user