- extract the real-host beforeEach into tests/comfyui/host-setup.mjs and proxy /kikotools/model_resolution/ to the fixture - add the picker spec: renderer switching, shared swap, themes, workflow reload, scope abort - add light and dark screenshots for the docs
61 lines
3.6 KiB
JavaScript
61 lines
3.6 KiB
JavaScript
import { readFile } from 'node:fs/promises';
|
|
import { fileURLToPath } from 'node:url';
|
|
import { resolve, sep } from 'node:path';
|
|
import runtime from '../../tools/testing/comfyui-runtime.json' with { type: 'json' };
|
|
|
|
export const fixture = 'http://127.0.0.1:8771';
|
|
const web = resolve(fileURLToPath(new URL('../../web/', import.meta.url)));
|
|
|
|
export function installHost(test, expect) {
|
|
test.beforeEach(async ({ page, context, request, baseURL }, testInfo) => {
|
|
const info = await (await request.get(`${baseURL}system_stats`)).json();
|
|
expect(info.system.comfyui_version).toBe(runtime.serverVersion);
|
|
if (process.env.KIKO_COMFY_ROOT) expect(info.system.pytorch_version).toBe(`${runtime.torchVersion}+cpu`);
|
|
expect(info.system.required_frontend_version).toBe(runtime.frontendVersion);
|
|
expect(info.system.comfy_package_versions.find(item => item.name === 'comfyui-frontend-package')?.installed).toBe(runtime.frontendVersion);
|
|
await testInfo.attach('host-versions.json', { body: JSON.stringify(info.system, null, 2), contentType: 'application/json' });
|
|
await expect(await request.post(`${fixture}/__test__/reset`)).toBeOK();
|
|
await context.route('**/*', async route => {
|
|
const request = route.request();
|
|
const url = new URL(request.url());
|
|
const path = url.pathname.replace(/^\/api\//, '/');
|
|
if (path.startsWith('/kiko_local_image_loader/') || path.startsWith('/kikotools/autocomplete/') || path.startsWith('/kikotools/model_resolution/') || path === '/view') {
|
|
const response = await route.fetch({ url: `${fixture}${path}${url.search}` });
|
|
return route.fulfill({ response });
|
|
}
|
|
if (!['GET', 'HEAD', 'OPTIONS'].includes(request.method())) return route.fulfill({ json: {} });
|
|
if (path === '/settings') {
|
|
const response = await route.fetch();
|
|
return route.fulfill({ json: { ...await response.json(),
|
|
'Comfy.VueNodes.Enabled': testInfo.project.metadata.initialRenderer,
|
|
'Comfy.TutorialCompleted': true, 'Comfy.Workflow.Persist': false,
|
|
'Comfy.Notification.ShowVersionUpdates': false } });
|
|
}
|
|
if (path === '/extensions') {
|
|
const response = await route.fetch();
|
|
const extensions = (await response.json()).filter(path => path.startsWith('/extensions/kikotools/'));
|
|
return route.fulfill({ json: extensions });
|
|
}
|
|
if (path.startsWith('/extensions/kikotools/')) {
|
|
const source = resolve(web, decodeURIComponent(path.slice('/extensions/kikotools/'.length)));
|
|
if (!source.startsWith(web + sep)) return route.abort();
|
|
if (!/\.(js|css)$/.test(source)) return route.abort();
|
|
return route.fulfill({ body: await readFile(source), contentType: source.endsWith('.css') ? 'text/css' : 'text/javascript' });
|
|
}
|
|
return route.continue();
|
|
});
|
|
await page.addInitScript(() => localStorage.setItem('kikotools.embedding_autocomplete.settings', JSON.stringify({ showCustomWords: false, customWordsUrl: '' })));
|
|
await page.goto('/', { waitUntil: 'domcontentloaded' });
|
|
await expect(page.getByRole('status', { name: 'Loading ComfyUI' })).toBeHidden({ timeout: 30000 });
|
|
await page.waitForFunction(async () => {
|
|
const { app } = await import('/scripts/app.js');
|
|
return !!app.graph && !!globalThis.LiteGraph?.registered_node_types?.KikoLocalImageLoader;
|
|
});
|
|
await expect.poll(() => page.evaluate(() => LiteGraph.vueNodesMode)).toBe(testInfo.project.metadata.initialRenderer);
|
|
await page.evaluate(async () => {
|
|
const { app } = await import('/scripts/app.js');
|
|
app.graph.clear();
|
|
});
|
|
});
|
|
}
|