Files
CyberStrikeAI/web/static/js/eino-usage-summary-ui.test.cjs
T
2026-08-15 01:33:33 +08:00

54 lines
2.6 KiB
JavaScript

const fs = require('node:fs');
const test = require('node:test');
const assert = require('node:assert/strict');
const monitor = fs.readFileSync('web/static/js/monitor.js', 'utf8');
const webshell = fs.readFileSync('web/static/js/webshell.js', 'utf8');
const styles = fs.readFileSync('web/static/css/style.css', 'utf8');
const zh = JSON.parse(fs.readFileSync('web/static/i18n/zh-CN.json', 'utf8'));
const en = JSON.parse(fs.readFileSync('web/static/i18n/en-US.json', 'utf8'));
test('Eino token usage summary is rendered as a first-class timeline event', () => {
assert.match(monitor, /case 'eino_usage_summary'/);
assert.match(monitor, /formatEinoUsageSummaryTitle\(d\)/);
assert.match(monitor, /formatEinoUsageSummaryMessage\(d\)/);
assert.match(monitor, /addTimelineItem\(timeline, 'eino_usage_summary'/);
assert.match(styles, /\.timeline-item-eino_usage_summary/);
assert.match(styles, /html\[data-theme="dark"\] \.timeline-item-eino_usage_summary/);
});
test('Eino token usage summary is visible in WebShell live and restored timelines', () => {
assert.match(webshell, /_et === 'eino_usage_summary'/);
assert.match(webshell, /appendTimelineItem\('eino_usage_summary'/);
assert.match(webshell, /function formatWebshellEinoUsageSummaryTitle/);
assert.match(webshell, /function formatWebshellEinoUsageSummaryMessage/);
assert.match(webshell, /eventType === 'eino_usage_summary'/);
assert.match(styles, /\.webshell-ai-timeline-eino_usage_summary/);
assert.match(styles, /html\[data-theme="dark"\] \.webshell-ai-timeline-eino_usage_summary/);
});
test('Eino token usage summary supports language refresh', () => {
assert.match(monitor, /type === 'eino_usage_summary'/);
assert.match(monitor, /item\.dataset\.modelCalls/);
assert.match(monitor, /setTimelineItemContentStreamPlain\(contentEl, formatEinoUsageSummaryMessage\(usageData\)\)/);
});
test('Eino resilience and usage timeline labels have zh/en translations', () => {
[
'einoModelRetryTitle',
'einoModelFailoverTitle',
'einoUsageSummaryTitle',
'einoUsageModelCalls',
'einoUsagePromptTokens',
'einoUsageCompletionTokens',
'einoUsageTotalTokens',
'einoUsageCachedTokens',
'einoUsageReasoningTokens'
].forEach((key) => {
assert.equal(typeof zh.chat[key], 'string', `zh chat.${key}`);
assert.ok(zh.chat[key].length > 0, `zh chat.${key} is empty`);
assert.equal(typeof en.chat[key], 'string', `en chat.${key}`);
assert.ok(en.chat[key].length > 0, `en chat.${key} is empty`);
});
});