41 lines
1.3 KiB
TypeScript
41 lines
1.3 KiB
TypeScript
/** @jest-environment node */
|
|
|
|
const sendMock = jest.fn()
|
|
const deleteObjectCommandMock = jest.fn((input) => ({ input }))
|
|
|
|
jest.mock('@aws-sdk/client-s3', () => ({
|
|
S3Client: jest.fn(() => ({
|
|
send: sendMock,
|
|
})),
|
|
PutObjectCommand: jest.fn((input) => ({ input })),
|
|
DeleteObjectCommand: deleteObjectCommandMock,
|
|
GetObjectCommand: jest.fn((input) => ({ input })),
|
|
}))
|
|
|
|
describe('deleteFromS3', () => {
|
|
beforeEach(() => {
|
|
jest.clearAllMocks()
|
|
process.env.S3_BUCKET = 'jsxiangche'
|
|
process.env.S3_PUBLIC_DOMAIN = 'https://s3.1080p.hk/jsxiangche'
|
|
process.env.S3_ENDPOINT = 'https://s3.1080p.hk'
|
|
process.env.S3_REGION = 'us-east-1'
|
|
process.env.S3_ACCESS_KEY_ID = 'test-key'
|
|
process.env.S3_SECRET_ACCESS_KEY = 'test-secret'
|
|
})
|
|
|
|
test('删除公网 URL 时应解码中文路径并去掉 bucket 前缀', async () => {
|
|
jest.resetModules()
|
|
const { deleteFromS3 } = await import('@/lib/s3')
|
|
|
|
await deleteFromS3(
|
|
'https://s3.1080p.hk/jsxiangche/%E7%94%B1%E5%A3%B9%E7%82%B9AI/external-material-import-real-test/test-image.png',
|
|
)
|
|
|
|
expect(deleteObjectCommandMock).toHaveBeenCalledWith({
|
|
Bucket: 'jsxiangche',
|
|
Key: '由壹点AI/external-material-import-real-test/test-image.png',
|
|
})
|
|
expect(sendMock).toHaveBeenCalledTimes(1)
|
|
})
|
|
})
|