105 lines
4.0 KiB
Python
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)
|