Files
hermes-webui/tests/test_issue4496_plugin_badge_state.py

105 lines
4.0 KiB
Python

"""Regression coverage for #4496 plugin provider badge state."""
import json
import subprocess
import textwrap
from pathlib import Path
REPO_ROOT = Path(__file__).resolve().parents[1]
def test_provider_badge_uses_active_provider_payload_state(tmp_path):
script = tmp_path / "check_plugin_badge.js"
script.write_text(
textwrap.dedent(
f"""
const fs = require('fs');
const assert = require('assert');
const src = fs.readFileSync({json.dumps(str(REPO_ROOT / "static" / "panels.js"))}, 'utf8');
function extractFunction(name) {{
const marker = 'function ' + name;
const start = src.indexOf(marker);
if (start < 0) throw new Error('missing function ' + name);
const brace = src.indexOf('{{', start);
let depth = 1;
let i = brace + 1;
while (depth && i < src.length) {{
if (src[i] === '{{') depth += 1;
else if (src[i] === '}}') depth -= 1;
i += 1;
}}
return src.slice(start, i);
}}
global.t = (key) => key;
global.esc = (value) => String(value ?? '');
global.document = {{
createElement() {{
return {{
className: '',
dataset: {{}},
_html: '',
set innerHTML(value) {{ this._html = String(value); }},
get innerHTML() {{ return this._html; }},
querySelector() {{ return null; }},
}};
}},
}};
eval(extractFunction('_buildPluginCard'));
const activeExclusive = _buildPluginCard({{
key: 'memory',
name: 'Memory',
activation: 'exclusive',
is_active_provider: true,
enabled: false,
hooks: [],
}}).innerHTML;
assert(activeExclusive.includes('plugin-card-badge-provider'), activeExclusive);
assert(!activeExclusive.includes('plugin-card-badge-disabled'), activeExclusive);
assert(activeExclusive.includes('plugins_active_provider'), activeExclusive);
const legacyFlatKeyExclusive = _buildPluginCard({{
key: 'noema',
name: 'Noema',
activation: 'exclusive',
enabled: false,
hooks: [],
}}).innerHTML;
assert(legacyFlatKeyExclusive.includes('plugin-card-badge-provider'), legacyFlatKeyExclusive);
assert(!legacyFlatKeyExclusive.includes('plugin-card-badge-disabled'), legacyFlatKeyExclusive);
assert(legacyFlatKeyExclusive.includes('plugins_active_provider'), legacyFlatKeyExclusive);
const inactiveExclusive = _buildPluginCard({{
key: 'memory',
name: 'Memory',
activation: 'exclusive',
is_active_provider: false,
enabled: false,
hooks: [],
}}).innerHTML;
assert(inactiveExclusive.includes('plugin-card-badge-disabled'), inactiveExclusive);
assert(!inactiveExclusive.includes('plugin-card-badge-provider'), inactiveExclusive);
assert(inactiveExclusive.includes('plugins_disabled'), inactiveExclusive);
const activeModelProvider = _buildPluginCard({{
key: 'openrouter',
name: 'OpenRouter',
activation: 'provider',
is_active_provider: true,
enabled: true,
hooks: [],
}}).innerHTML;
assert(activeModelProvider.includes('plugin-card-badge-provider'), activeModelProvider);
assert(!activeModelProvider.includes('plugin-card-badge-disabled'), activeModelProvider);
assert(activeModelProvider.includes('plugins_active_provider'), activeModelProvider);
"""
),
encoding="utf-8",
)
subprocess.run(["node", str(script)], check=True, cwd=REPO_ROOT)