Fix: cleanup repository from list (#2310)

* Fix: cleanup repository from list

* Add repr

* Avoid not exists error message
This commit is contained in:
Pascal Vizeli 2020-11-29 14:00:29 +01:00 committed by GitHub
parent f6bf44de1c
commit 19620d6808
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 33 additions and 2 deletions

View File

@ -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()

View File

@ -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:

View File

@ -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

View File

@ -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."""