Files
BlackVortexAI-bv_nodepack/tests/input_image_preview.test.mjs

26 lines
2.2 KiB
JavaScript

import test from "node:test";
import assert from "node:assert/strict";
import {inputImagePreview} from "../ui/src/regional/inputImagePreview.ts";
function fixture(){
const source={id:1,type:"LoadImage",widgets:[{name:"image",value:"one.png"}],outputs:[{type:"IMAGE",links:[7]}]},target={id:2,inputs:[{name:"canvas_image",type:"IMAGE",link:7}]};
const graph={_nodes:[source,target],links:{7:{origin_id:1,origin_slot:0,target_id:2,target_slot:0,type:"IMAGE"}},getNodeById(id){return this._nodes.find(n=>n.id===id)}};source.graph=target.graph=graph;return {source,target,graph};
}
test("connected loader follows current selection before execution without mutating graph",()=>{
const {source,target,graph}=fixture(),before=JSON.stringify(graph.links);
assert.deepEqual(inputImagePreview(target,"canvas_image",p=>p),{src:"/view?filename=one.png&subfolder=&type=input",previous:false});
source.imgs=[{src:"/old-preview.png"}];source.widgets[0].value="folder/two #.png [temp]";
assert.equal(inputImagePreview(target,"canvas_image",p=>p).src,"/view?filename=two+%23.png&subfolder=folder&type=temp");
target.inputs[0].link=null;assert.equal(inputImagePreview(target,"canvas_image",p=>p),null);assert.equal(JSON.stringify(graph.links),before);
});
test("preview never traverses transformations and rejects ambiguous/muted sources",()=>{
const {source,target}=fixture();source.type="ImageScale";
assert.equal(inputImagePreview(target,"canvas_image",p=>p),null);
source.imgs=[{src:"blob:previous"}];assert.deepEqual(inputImagePreview(target,"canvas_image",p=>p),{src:"blob:previous",previous:true});
source.outputs.push({type:"IMAGE",links:[]});assert.equal(inputImagePreview(target,"canvas_image",p=>p),null);
source.outputs.pop();source.mode=4;assert.equal(inputImagePreview(target,"canvas_image",p=>p),null);
});
test("invalid filenames and linked loader filename inputs fail closed",()=>{
const {source,target}=fixture();for(const value of ["../secret.png","C:\\secret.png","/secret.png",""]){source.widgets[0].value=value;assert.equal(inputImagePreview(target,"canvas_image",p=>p),null)}
source.widgets[0].value="one.png";source.inputs=[{name:"image",link:9}];assert.equal(inputImagePreview(target,"canvas_image",p=>p),null);
});