test: add coverage for config TUI, ConfigField, schema changes, and CLI auto-setup

- test_config.py: GeneralConfig defaults, plugin_settings round-trip
- test_config_field.py: ConfigField dataclass, BasePlugin.config_fields() no-op,
  plugin subclass override
- test_config_tui.py: _get/_set_nested, _fid/_pfid helpers, GENERAL_FIELDS validity,
  ConfigApp general tab rendering, save handler, plugins table, plugin tab visibility,
  q key exit — using Textual run_test() + Pilot
- test_cli.py: auto-setup wizard on first run, skip wizard when config exists,
  /config in _STATIC_COMMANDS

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
curo1305
2026-05-18 21:53:19 +02:00
parent 1201606187
commit 51029d4a2d
4 changed files with 289 additions and 0 deletions
+56
View File
@@ -0,0 +1,56 @@
from pyra.plugins.base import BasePlugin, ConfigField
def test_config_field_minimal():
f = ConfigField("mykey", "My Label", "text")
assert f.key == "mykey"
assert f.label == "My Label"
assert f.type == "text"
assert f.default == ""
assert f.options == []
assert f.description == ""
def test_config_field_options_are_independent():
f1 = ConfigField("k", "L", "select")
f2 = ConfigField("k", "L", "select")
f1.options.append("x")
assert f2.options == [], "options lists must not be shared between instances"
def test_config_field_all_args():
f = ConfigField("url", "API URL", "select", "http://a.com", ["opt1", "opt2"], "hint text")
assert f.default == "http://a.com"
assert f.options == ["opt1", "opt2"]
assert f.description == "hint text"
def test_config_field_bool_type():
f = ConfigField("enabled", "Enable feature", "bool", True)
assert f.type == "bool"
assert f.default is True
def test_base_plugin_config_fields_returns_empty():
assert BasePlugin().config_fields() == []
def test_plugin_subclass_config_fields_override():
class MyPlugin(BasePlugin):
name = "test"
description = "test plugin"
version = "1.0"
def config_fields(self):
return [
ConfigField("api_url", "API URL", "text", "http://example.com"),
ConfigField("verify_ssl", "Verify SSL", "bool", True),
]
fields = MyPlugin().config_fields()
assert len(fields) == 2
assert fields[0].key == "api_url"
assert fields[0].type == "text"
assert fields[1].key == "verify_ssl"
assert fields[1].type == "bool"
assert fields[1].default is True