"""Test Store API.""" from unittest.mock import patch from aiohttp.test_utils import TestClient import pytest from supervisor.coresys import CoreSys from supervisor.store.addon import AddonStore from supervisor.store.repository import Repository REPO_URL = "https://github.com/awesome-developer/awesome-repo" @pytest.mark.asyncio async def test_api_store( api_client: TestClient, store_addon: AddonStore, repository: Repository, caplog: pytest.LogCaptureFixture, ): """Test /store REST API.""" resp = await api_client.get("/store") result = await resp.json() assert result["data"]["addons"][-1]["slug"] == store_addon.slug assert result["data"]["repositories"][-1]["slug"] == repository.slug assert ( f"Add-on {store_addon.slug} not supported on this platform" not in caplog.text ) @pytest.mark.asyncio async def test_api_store_addons(api_client: TestClient, store_addon: AddonStore): """Test /store/addons REST API.""" print("test") resp = await api_client.get("/store/addons") result = await resp.json() print(result) assert result["data"][-1]["slug"] == store_addon.slug @pytest.mark.asyncio async def test_api_store_addons_addon(api_client: TestClient, store_addon: AddonStore): """Test /store/addons/{addon} REST API.""" resp = await api_client.get(f"/store/addons/{store_addon.slug}") result = await resp.json() assert result["data"]["slug"] == store_addon.slug @pytest.mark.asyncio async def test_api_store_addons_addon_version( api_client: TestClient, store_addon: AddonStore ): """Test /store/addons/{addon}/{version} REST API.""" resp = await api_client.get(f"/store/addons/{store_addon.slug}/1.0.0") result = await resp.json() assert result["data"]["slug"] == store_addon.slug @pytest.mark.asyncio async def test_api_store_repositories(api_client: TestClient, repository: Repository): """Test /store/repositories REST API.""" resp = await api_client.get("/store/repositories") result = await resp.json() assert result["data"][-1]["slug"] == repository.slug @pytest.mark.asyncio async def test_api_store_repositories_repository( api_client: TestClient, repository: Repository ): """Test /store/repositories/{repository} REST API.""" resp = await api_client.get(f"/store/repositories/{repository.slug}") result = await resp.json() assert result["data"]["slug"] == repository.slug async def test_api_store_add_repository(api_client: TestClient, coresys: CoreSys): """Test POST /store/repositories REST API.""" with patch("supervisor.store.repository.Repository.load", return_value=None), patch( "supervisor.store.repository.Repository.validate", return_value=True ): response = await api_client.post( "/store/repositories", json={"repository": REPO_URL} ) assert response.status == 200 assert REPO_URL in coresys.store.repository_urls assert isinstance(coresys.store.get_from_url(REPO_URL), Repository) async def test_api_store_remove_repository( api_client: TestClient, coresys: CoreSys, repository: Repository ): """Test DELETE /store/repositories/{repository} REST API.""" response = await api_client.delete(f"/store/repositories/{repository.slug}") assert response.status == 200 assert repository.source not in coresys.store.repository_urls assert repository.slug not in coresys.store.repositories