import { getS3KeyFromUrl } from '@/lib/s3' describe('getS3KeyFromUrl', () => { const originalBucket = process.env.S3_BUCKET afterEach(() => { if (originalBucket === undefined) { delete process.env.S3_BUCKET } else { process.env.S3_BUCKET = originalBucket } }) it('剥离公网 URL 中的 bucket 前缀并解码中文路径', () => { process.env.S3_BUCKET = 'gongxiangpan' const url = 'https://s3.yydd.ai/gongxiangpan/%E7%94%B1%E5%A3%B9%E7%82%B9AI/video-thumb-1.jpg' expect(getS3KeyFromUrl(url)).toBe('由壹点AI/video-thumb-1.jpg') }) it('剥离内网 MinIO path-style URL 中的 bucket 前缀', () => { process.env.S3_BUCKET = 'gongxiangpan' expect( getS3KeyFromUrl('http://192.168.58.20:9000/gongxiangpan/abc/def.png') ).toBe('abc/def.png') }) it('路径不含 bucket 时保留完整对象 Key', () => { process.env.S3_BUCKET = 'gongxiangpan' expect(getS3KeyFromUrl('https://cdn.example.com/由壹点AI/x.webp')).toBe('由壹点AI/x.webp') }) })