Files
Azornes-Comfyui-Model-Resolver/tests/test_frontend_entrypoint.mjs
T

44 lines
1.6 KiB
JavaScript

import assert from 'node:assert/strict';
import { readFile } from 'node:fs/promises';
import test from 'node:test';
const resolverSource = await readFile(
new URL('../web/resolver.js', import.meta.url),
'utf8'
);
test('frontend entrypoint registers the ComfyUI extension contract', () => {
assert.match(
resolverSource,
/import\s+\{\s*app\s*\}\s+from\s+["']\.\.\/\.\.\/\.\.\/scripts\/app\.js["']/
);
assert.match(resolverSource, /registerGlobalHelpers\(\);/);
assert.match(resolverSource, /const modelResolver = new ModelResolverClass\(\);/);
assert.match(resolverSource, /app\.registerExtension\(\{/);
assert.match(resolverSource, /name:\s*["']Model Resolver["']/);
assert.match(resolverSource, /id:\s*MODEL_RESOLVER_OPEN_COMMAND_ID/);
assert.match(resolverSource, /function:\s*\(\)\s*=>\s*modelResolver\.activateResolverButton\(\)/);
assert.match(resolverSource, /keybindings:\s*\[\s*MODEL_RESOLVER_OPEN_DEFAULT_KEYBINDING/);
const hookPatterns = {
setup: /\bsetup\s*:/,
beforeRegisterNodeDef: /\bbeforeRegisterNodeDef\s*\(/,
nodeCreated: /\bnodeCreated\s*\(/,
loadedGraphNode: /\bloadedGraphNode\s*\(/,
afterConfigureGraph: /\bafterConfigureGraph\s*\(/,
};
for (const [hook, pattern] of Object.entries(hookPatterns)) {
assert.match(
resolverSource,
pattern,
`expected ComfyUI lifecycle hook: ${hook}`
);
}
assert.equal(
(resolverSource.match(/modelResolver\.configureNodeContextMenu\(node\?\.constructor\);/g) || []).length,
2,
'dynamically created and loaded node types must receive the widget-change hook'
);
});