fix(test): repair test infrastructure and mock fixtures (#281)

* fix(test): repair test infrastructure and mock fixtures

- Add test/__init__.py for proper test collection
- Fix ConfigManager instantiation to use config_path parameter
- Route schedule config through config_service mock
- Update mock to match get_raw_file_content endpoint change

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(test): correct get_main_config assertion per CodeRabbit review

The endpoint calls load_config(), not get_raw_file_content('main').
Also set up load_config mock return value in the fixture so the
test's data assertions pass correctly.

Co-Authored-By: 5ymb01 <noreply@github.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(test): correct plugin config test mock structure and schema returns

- Plugin configs live at top-level keys, not under 'plugins' subkey
- Mock schema_manager.generate_default_config to return a dict
- Mock schema_manager.merge_with_defaults to merge dicts (not MagicMock)
- Fixes test_get_plugin_config returning 500 due to non-serializable MagicMock

Co-Authored-By: 5ymb01 <noreply@github.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(test): use patch.object for config_service.get_config in schedule tests

config_service.get_config is a real method, not a mock — can't set
return_value on it directly. Use patch.object context manager instead.

Co-Authored-By: 5ymb01 <noreply@github.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: 5ymb01 <5ymb01@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: 5ymb01 <noreply@github.com>
This commit is contained in:
5ymb01
2026-03-20 15:06:58 -04:00
committed by GitHub
parent fa92bfbdd8
commit 28a374485f
4 changed files with 47 additions and 41 deletions

View File

@@ -23,6 +23,7 @@ if str(project_root) not in sys.path:
sys.path.insert(0, str(project_root))
from src.config_manager import ConfigManager
from src.exceptions import ConfigError
from src.plugin_system.schema_manager import SchemaManager
@@ -30,35 +31,31 @@ class TestInvalidJson:
"""Test handling of invalid JSON in config files."""
def test_invalid_json_syntax(self, tmp_path):
"""Config with invalid JSON syntax should be handled gracefully."""
"""Config with invalid JSON syntax should raise ConfigError."""
config_file = tmp_path / "config.json"
config_file.write_text("{ invalid json }")
with patch.object(ConfigManager, '_get_config_path', return_value=str(config_file)):
config_manager = ConfigManager(config_dir=str(tmp_path))
# Should not raise, should return empty or default config
config = config_manager.load_config()
assert isinstance(config, dict)
config_manager = ConfigManager(config_path=str(config_file))
with pytest.raises(ConfigError):
config_manager.load_config()
def test_truncated_json(self, tmp_path):
"""Config with truncated JSON should be handled gracefully."""
"""Config with truncated JSON should raise ConfigError."""
config_file = tmp_path / "config.json"
config_file.write_text('{"plugin": {"enabled": true') # Missing closing braces
with patch.object(ConfigManager, '_get_config_path', return_value=str(config_file)):
config_manager = ConfigManager(config_dir=str(tmp_path))
config = config_manager.load_config()
assert isinstance(config, dict)
config_manager = ConfigManager(config_path=str(config_file))
with pytest.raises(ConfigError):
config_manager.load_config()
def test_empty_config_file(self, tmp_path):
"""Empty config file should be handled gracefully."""
"""Empty config file should raise ConfigError."""
config_file = tmp_path / "config.json"
config_file.write_text("")
with patch.object(ConfigManager, '_get_config_path', return_value=str(config_file)):
config_manager = ConfigManager(config_dir=str(tmp_path))
config = config_manager.load_config()
assert isinstance(config, dict)
config_manager = ConfigManager(config_path=str(config_file))
with pytest.raises(ConfigError):
config_manager.load_config()
class TestTypeValidation: