Protect upload cleanup and atomic completion paths, add durable media worker leases and brand asset validation, and introduce verified migration/bootstrap/deployment gates.
41 lines
1.2 KiB
TypeScript
41 lines
1.2 KiB
TypeScript
/** @jest-environment node */
|
|
|
|
import {
|
|
getExpectedUploadChunkBytes,
|
|
resolveUploadChunkSize,
|
|
} from '@/lib/material-upload-chunk-policy'
|
|
|
|
const MEBIBYTE = 1024 * 1024
|
|
|
|
describe('material upload chunk policy', () => {
|
|
test('accepts the declared browser layout and calculates the final remainder', () => {
|
|
const fileSize = 25 * MEBIBYTE
|
|
const chunkSize = 10 * MEBIBYTE
|
|
const totalChunks = 3
|
|
|
|
expect(resolveUploadChunkSize(fileSize, totalChunks, chunkSize)).toBe(chunkSize)
|
|
expect(getExpectedUploadChunkBytes({
|
|
fileSize,
|
|
totalChunks,
|
|
chunkSize,
|
|
chunkIndex: 0,
|
|
})).toBe(10 * MEBIBYTE)
|
|
expect(getExpectedUploadChunkBytes({
|
|
fileSize,
|
|
totalChunks,
|
|
chunkSize,
|
|
chunkIndex: 2,
|
|
})).toBe(5 * MEBIBYTE)
|
|
})
|
|
|
|
test('keeps already-open legacy 10/20MB browser uploads compatible', () => {
|
|
expect(resolveUploadChunkSize(25 * MEBIBYTE, 3)).toBe(10 * MEBIBYTE)
|
|
expect(resolveUploadChunkSize(25 * MEBIBYTE, 2)).toBe(20 * MEBIBYTE)
|
|
})
|
|
|
|
test('rejects a tiny declared file spread across many disk-writing chunks', () => {
|
|
expect(resolveUploadChunkSize(1, 1024)).toBeNull()
|
|
expect(resolveUploadChunkSize(1, 1024, 1)).toBeNull()
|
|
})
|
|
})
|