fix: normalize web object sizes

This commit is contained in:
asepharyana
2026-07-07 06:27:18 +07:00
parent 1ef73fefa9
commit fbfff3d9ec
5 changed files with 46 additions and 11 deletions
+33 -2
View File
@@ -1,4 +1,4 @@
import { afterAll, beforeAll, describe, expect, it, mock } from 'bun:test';
import { afterAll, beforeAll, beforeEach, describe, expect, it, mock } from 'bun:test';
const mockBuckets = [
{
@@ -9,6 +9,9 @@ const mockBuckets = [
},
];
let mockObjects: Record<string, unknown>[] = [];
let mockPrefixes: string[] = [];
mock.module('../src/db/buckets', () => ({
listBuckets: () => Promise.resolve(mockBuckets),
findBucketByName: (name: string) =>
@@ -21,7 +24,7 @@ mock.module('../src/db/buckets', () => ({
mock.module('../src/db/files-ext', () => ({
findFileByBucketAndKey: () => Promise.resolve(null),
listObjectsByPrefix: () => Promise.resolve({ objects: [], prefixes: [] }),
listObjectsByPrefix: () => Promise.resolve({ objects: mockObjects, prefixes: mockPrefixes }),
softDeleteFile: () => Promise.resolve(true),
softDeleteFilesBatch: () => Promise.resolve(0),
countBucketObjects: () => Promise.resolve(0),
@@ -56,6 +59,11 @@ describe('Web API v1', () => {
handleWebApiV1 = webApi.handleWebApiV1;
});
beforeEach(() => {
mockObjects = [];
mockPrefixes = [];
});
afterAll(() => {
mock.restore();
});
@@ -89,4 +97,27 @@ describe('Web API v1', () => {
const data = (await res.json()) as { error: string };
expect(data.error).toContain('Invalid bucket name');
});
it('should normalize listed object sizeBytes to a number', async () => {
mockObjects = [
{
s3Key: 'tiny.txt',
fileName: 'tiny.txt',
mimeType: 'text/plain',
sizeBytes: '12',
fileType: 'document',
fileHash: 'etag',
createdAt: new Date('2026-01-01T00:00:00Z'),
publicId: 'public-id',
},
];
const req = new Request('http://localhost:3000/api/v1/buckets/test-bucket/objects');
const res = await handleWebApiV1(req);
expect(res.status).toBe(200);
const data = (await res.json()) as { objects: { sizeBytes: unknown }[] };
expect(data.objects[0].sizeBytes).toBe(12);
expect(typeof data.objects[0].sizeBytes).toBe('number');
});
});