import test from 'node:test' import assert from 'node:assert/strict' import {readFileSync} from 'node:fs' import * as Vue from 'vue' import {compile} from '@vue/compiler-dom' import {renderToString} from '@vue/server-renderer' import {loraFriendlyName,loraIdentityKey} from '../utils/loras.ts' test('LoRA dropdown renders one clean label or alias, with filename only in tooltip',async()=>{ const source=readFileSync(new URL('../components/LoraSelect.vue',import.meta.url),'utf8') const option=source.match(//)[0] const render=new Function('Vue',compile('',{mode:'function',prefixIdentifiers:true}).code)(Vue) const names=['xaigen-minimax csot.safetensors','folder/XAIgen-klein-portrait.safetensors'] const aliases={[loraIdentityKey(names[1])]:'Portrait style'} const html=await renderToString(Vue.createSSRApp({render,setup:()=>({availableNames:names,filenameSubtitle:true,labelFor:name=>loraFriendlyName(name,aliases)})})) const options=[...html.matchAll(/]*title="([^"]*)"[^>]*>([^<]*)<\/option>/g)] assert.deepEqual(options.map(match=>match[1]),names) assert.deepEqual(options.map(match=>match[2]),['xaigen-minimax csot','Portrait style']) })