mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-19 15:16:33 +00:00
Fix: cleanup repository from list (#2310)
* Fix: cleanup repository from list * Add repr * Avoid not exists error message
This commit is contained in:
parent
f6bf44de1c
commit
19620d6808
@ -27,6 +27,8 @@ class FixupStoreExecuteRemove(FixupBase):
|
||||
await repository.remove()
|
||||
except StoreError:
|
||||
raise ResolutionFixupError() from None
|
||||
else:
|
||||
self.sys_store.repositories.pop(repository.slug, None)
|
||||
|
||||
self.sys_config.drop_addon_repository(repository.source)
|
||||
self.sys_config.save_data()
|
||||
|
@ -40,6 +40,10 @@ class Repository(CoreSysAttributes):
|
||||
self._slug = get_hash_from_repository(repository)
|
||||
self._type = StoreType.GIT
|
||||
|
||||
def __repr__(self) -> str:
|
||||
"""Return internal representation."""
|
||||
return f"<Store.Repository: {self.slug} / {self.source}>"
|
||||
|
||||
@property
|
||||
def slug(self) -> str:
|
||||
"""Return repo slug."""
|
||||
@ -75,11 +79,17 @@ class Repository(CoreSysAttributes):
|
||||
if self.type != StoreType.GIT:
|
||||
return True
|
||||
|
||||
# If exists?
|
||||
repository_file = Path(self.git.path, "repository.json")
|
||||
if not repository_file.exists():
|
||||
return False
|
||||
|
||||
# If valid?
|
||||
try:
|
||||
SCHEMA_REPOSITORY_CONFIG(read_json_file(repository_file))
|
||||
except (JsonFileError, vol.Invalid):
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
async def load(self) -> None:
|
||||
|
@ -22,6 +22,8 @@ async def test_fixup(coresys: CoreSys):
|
||||
)
|
||||
|
||||
mock_repositorie = AsyncMock()
|
||||
mock_repositorie.slug = "test"
|
||||
|
||||
coresys.store.repositories["test"] = mock_repositorie
|
||||
|
||||
await store_execute_remove()
|
||||
@ -30,3 +32,5 @@ async def test_fixup(coresys: CoreSys):
|
||||
assert coresys.config.save_data.called
|
||||
assert len(coresys.resolution.suggestions) == 0
|
||||
assert len(coresys.resolution.issues) == 0
|
||||
|
||||
assert "test" not in coresys.store.repositories
|
||||
|
@ -15,7 +15,7 @@ async def test_add_valid_repository(coresys, store_manager):
|
||||
with patch("supervisor.store.repository.Repository.load", return_value=None), patch(
|
||||
"pathlib.Path.read_text",
|
||||
return_value=json.dumps({"name": "Awesome repository"}),
|
||||
):
|
||||
), patch("pathlib.Path.exists", return_value=True):
|
||||
await store_manager.update_repositories(current + ["http://example.com"])
|
||||
assert store_manager.get_from_url("http://example.com").validate()
|
||||
assert "http://example.com" in coresys.config.addons_repositories
|
||||
@ -30,7 +30,7 @@ async def test_add_valid_repository_url(coresys, store_manager):
|
||||
return_value=json.dumps(
|
||||
{"name": "Awesome repository", "url": "http://example2.com/docs"}
|
||||
),
|
||||
):
|
||||
), patch("pathlib.Path.exists", return_value=True):
|
||||
await store_manager.update_repositories(current + ["http://example.com"])
|
||||
assert store_manager.get_from_url("http://example.com").validate()
|
||||
assert "http://example.com" in coresys.config.addons_repositories
|
||||
@ -51,6 +51,21 @@ async def test_add_invalid_repository(coresys, store_manager):
|
||||
assert coresys.resolution.suggestions[-1].type == SuggestionType.EXECUTE_REMOVE
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_add_invalid_repository_file(coresys, store_manager):
|
||||
"""Test add custom repository."""
|
||||
current = coresys.config.addons_repositories
|
||||
with patch("supervisor.store.repository.Repository.load", return_value=None), patch(
|
||||
"pathlib.Path.read_text",
|
||||
return_value=json.dumps({"name": "Awesome repository"}),
|
||||
), patch("pathlib.Path.exists", return_value=False):
|
||||
await store_manager.update_repositories(current + ["http://example.com"])
|
||||
assert not store_manager.get_from_url("http://example.com").validate()
|
||||
|
||||
assert "http://example.com" in coresys.config.addons_repositories
|
||||
assert coresys.resolution.suggestions[-1].type == SuggestionType.EXECUTE_REMOVE
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_preinstall_valid_repository(coresys, store_manager):
|
||||
"""Test add core repository valid."""
|
||||
|
Loading…
x
Reference in New Issue
Block a user