flnxi-Wu/lib/__tests__/material-storage-cleanup.test.ts

49 lines
1.3 KiB
TypeScript

export {}
jest.mock('fs/promises', () => ({
unlink: jest.fn(),
}))
jest.mock('@/lib/s3', () => ({
deleteFromS3: jest.fn(),
isS3Url: jest.fn((value: string) => /^https?:\/\//.test(value)),
}))
const { unlink } = require('fs/promises')
const { deleteFromS3 } = require('@/lib/s3')
describe('material-storage-cleanup', () => {
const originalEnv = process.env
beforeEach(() => {
jest.resetAllMocks()
process.env = { ...originalEnv }
})
afterEach(() => {
process.env = originalEnv
})
it('S3 存储下会把对象 key-only 路径交给 S3 删除', async () => {
process.env.STORAGE_PROVIDER = 's3'
const { deleteMaterialStorageFiles } = require('../material-storage-cleanup')
const result = await deleteMaterialStorageFiles(['materials/file.zip'])
expect(result.deletedFiles).toBe(1)
expect(deleteFromS3).toHaveBeenCalledWith('materials/file.zip')
expect(unlink).not.toHaveBeenCalled()
})
it('显式本地路径仍走本地删除', async () => {
process.env.STORAGE_PROVIDER = 's3'
const { deleteMaterialStorageFiles } = require('../material-storage-cleanup')
const result = await deleteMaterialStorageFiles(['./uploads/file.zip'])
expect(result.deletedFiles).toBe(1)
expect(unlink).toHaveBeenCalledWith('./uploads/file.zip')
expect(deleteFromS3).not.toHaveBeenCalled()
})
})