Files
llm-monitor/tests/e2e/cache-navigation.spec.js
2026-04-25 16:06:59 +02:00

79 lines
2.6 KiB
JavaScript

const { test, expect } = require('@playwright/test');
const OLLAMA_HOST = process.env.OLLAMA_HOST || 'http://192.168.254.115:11434';
const SERVER_ID = process.env.TEST_SERVER_ID || 'srv_e2e_cache';
const SERVER_NAME = process.env.TEST_SERVER_NAME || 'E2E Cache Server';
const QUIET_WINDOW_MS = Number(process.env.QUIET_WINDOW_MS || 1500);
const CACHE_WAIT_TIMEOUT_MS = Number(process.env.CACHE_WAIT_TIMEOUT_MS || 20000);
test.describe('cache-first server navigation', () => {
test.beforeEach(async ({ page }) => {
await page.addInitScript(
({ serverId, serverName, host }) => {
localStorage.setItem(
'llm_monitor_servers',
JSON.stringify([
{
id: serverId,
name: serverName,
host
}
])
);
localStorage.setItem('llm_monitor_active_server', serverId);
},
{
serverId: SERVER_ID,
serverName: SERVER_NAME,
host: OLLAMA_HOST
}
);
});
test('serves cached data when navigating between running and available pages', async ({ context, page }) => {
const apiRequests = [];
context.on('request', (request) => {
const url = new URL(request.url());
if (url.pathname.startsWith('/api/v1/')) {
apiRequests.push(url.pathname + url.search);
}
});
const resetApiRequests = () => {
apiRequests.length = 0;
};
const waitForQuietWindow = async (label) => {
await page.waitForTimeout(QUIET_WINDOW_MS);
expect(apiRequests, `${label} should not issue API requests while cache is fresh`).toEqual([]);
};
await page.goto(`/models-running?server=${SERVER_ID}`, { waitUntil: 'domcontentloaded' });
await page.waitForFunction(
(serverId) => {
return ['health', 'models', 'running'].every((suffix) => {
return Boolean(localStorage.getItem(`llm_monitor_${suffix}_${serverId}`));
});
},
SERVER_ID,
{ timeout: CACHE_WAIT_TIMEOUT_MS }
);
expect(apiRequests.length).toBeGreaterThan(0);
resetApiRequests();
await page.goto(`/models-available?server=${SERVER_ID}`, { waitUntil: 'domcontentloaded' });
await waitForQuietWindow('running -> available');
resetApiRequests();
await page.goto(`/models-running?server=${SERVER_ID}`, { waitUntil: 'domcontentloaded' });
await waitForQuietWindow('available -> running');
resetApiRequests();
await page.goto(`/models-available?server=${SERVER_ID}`, { waitUntil: 'domcontentloaded' });
await waitForQuietWindow('running -> available again');
});
});