46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
"""Tests for flow.commands.package."""
|
|
|
|
from types import SimpleNamespace
|
|
|
|
from flow.commands import package
|
|
|
|
|
|
def test_load_installed_returns_empty_on_malformed_json(tmp_path, monkeypatch):
|
|
state_file = tmp_path / "installed.json"
|
|
state_file.write_text("{broken", encoding="utf-8")
|
|
monkeypatch.setattr(package, "INSTALLED_STATE", state_file)
|
|
|
|
assert package._load_installed() == {}
|
|
|
|
|
|
def test_load_installed_returns_empty_on_non_mapping_json(tmp_path, monkeypatch):
|
|
state_file = tmp_path / "installed.json"
|
|
state_file.write_text('["neovim"]', encoding="utf-8")
|
|
monkeypatch.setattr(package, "INSTALLED_STATE", state_file)
|
|
|
|
assert package._load_installed() == {}
|
|
|
|
|
|
class _ConsoleCapture:
|
|
def __init__(self):
|
|
self.info_messages = []
|
|
|
|
def info(self, message):
|
|
self.info_messages.append(message)
|
|
|
|
def table(self, _headers, _rows):
|
|
raise AssertionError("table() should not be called when installed state is malformed")
|
|
|
|
|
|
def test_run_list_handles_malformed_installed_state(tmp_path, monkeypatch):
|
|
state_file = tmp_path / "installed.json"
|
|
state_file.write_text("{oops", encoding="utf-8")
|
|
monkeypatch.setattr(package, "INSTALLED_STATE", state_file)
|
|
monkeypatch.setattr(package, "_get_definitions", lambda _ctx: {})
|
|
|
|
ctx = SimpleNamespace(console=_ConsoleCapture())
|
|
|
|
package.run_list(ctx, SimpleNamespace(all=False))
|
|
|
|
assert ctx.console.info_messages == ["No packages installed."]
|