from types import SimpleNamespace from unittest.mock import MagicMock, patch import owilix.cli # noqa: F401 from owilix.core.tasks.local import remove_local_dataset def _manager_with_dataset(dataset): manager = MagicMock() manager.parse_specifier.return_value = { "data_center": None, "query": {"id": "ds-001"}, "day": None, "duration": 0, } manager.local.list.return_value = [dataset] return manager def _dataset_without_direct_metadata_attrs(path="/tmp/ds-001"): fs = MagicMock() fs.exists.return_value = True repository = SimpleNamespace(fs=fs) return SimpleNamespace( metadata={ "internalID": "ds-001", "id": "ds-001", "title": "Dataset One", }, path=path, repository=repository, ) def test_remove_local_dataset_uses_metadata_id_with_auto_yes(): dataset = _dataset_without_direct_metadata_attrs() manager = _manager_with_dataset(dataset) result = remove_local_dataset(manager, "all/id=ds-001", console=MagicMock(), auto_yes=True) assert result.success is True assert "Freed 1 datasets" in result.msg dataset.repository.fs.rm.assert_any_call("/tmp/ds-001.json") dataset.repository.fs.rm.assert_any_call("/tmp/ds-001", recursive=True) @patch("owilix.core.tasks.local.ask_yes_no", return_value=True) def test_remove_local_dataset_prompt_uses_metadata_values(mock_ask): dataset = _dataset_without_direct_metadata_attrs() manager = _manager_with_dataset(dataset) result = remove_local_dataset(manager, "all/id=ds-001", console=MagicMock(), auto_yes=False) assert result.success is True prompt = mock_ask.call_args.args[1] assert "ds-001/Dataset One" in prompt