49 lines
1.3 KiB
TypeScript
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()
|
|
})
|
|
})
|