29 lines
2.2 KiB
JavaScript
29 lines
2.2 KiB
JavaScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { uploadCanvasImage } from '../src/lib/canvas-assets.ts';
|
|
import { managedImageSource } from '../src/lib/canvas-v2.ts';
|
|
const source='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAB';
|
|
const id='77777777-7777-4777-8777-777777777777';
|
|
const asset={id,url:`https://api.foundry.entroia.com/projects/endoleap/workspaces/w/assets/${id}`,width:1,height:1,bytes:24,mime_type:'image/png'};
|
|
test('attachment upload sends the original file bytes',async()=>{
|
|
const bytes=Buffer.from(source.split(',')[1],'base64');let calls=0;
|
|
const result=await uploadCanvasImage(async(path,options)=>{
|
|
calls++;assert.equal(path,'workspaces/w/assets');assert.match(options.headers['Idempotency-Key'],/^[a-f0-9-]{36}$/);assert.equal(options.method,'POST');
|
|
assert.deepEqual(Buffer.from(await options.body.get('image').arrayBuffer()),bytes);return asset;
|
|
},'w',new Blob([bytes],{type:'image/png'}),'image.png');
|
|
assert.equal(calls,1);assert.deepEqual(result,asset);
|
|
});
|
|
test('attachment upload propagates permission failures and rejects unmanaged response URLs',async()=>{
|
|
const file=new Blob(['test'],{type:'image/png'});
|
|
await assert.rejects(uploadCanvasImage(async()=>{throw new Error('forbidden');},'w',file,'test.png'),/forbidden/);
|
|
await assert.rejects(uploadCanvasImage(async()=>({...asset,url:'https://invalid.example/a.png'}),'w',file,'test.png'),/invalid_asset_response/);
|
|
});
|
|
test('uncertain upload retries the exact bytes with the same idempotency key',async()=>{
|
|
let calls=0,key;
|
|
await uploadCanvasImage(async(_path,options)=>{calls++;if(!key)key=options.headers['Idempotency-Key'];assert.equal(options.headers['Idempotency-Key'],key);if(calls===1)throw new TypeError('connection lost');return asset;},'w',new Blob(['test'],{type:'image/png'}),'test.png');assert.equal(calls,2);
|
|
});
|
|
test('preview URLs are renderer-only and do not replace original managed references',()=>{
|
|
assert.equal(managedImageSource(asset.url),`/api/foundry/workspaces/w/assets/${id}`);assert.equal(managedImageSource(asset.url,true),`/api/foundry/workspaces/w/assets/${id}?variant=preview`);
|
|
assert.equal(managedImageSource('https://example.com/photo.png',true),'https://example.com/photo.png');
|
|
});
|