Skip to content

Commit 64c4fb7

Browse files
committed
Add test cases for install/update APIs
1 parent 2f3defe commit 64c4fb7

File tree

1 file changed

+72
-11
lines changed

1 file changed

+72
-11
lines changed

tests/api/test_store.py

Lines changed: 72 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -505,11 +505,27 @@ async def test_api_store_addons_addon_availability_success(
505505
assert resp.status == 200
506506

507507

508-
@pytest.mark.parametrize("supported_architectures", [["i386"], ["i386", "aarch64"]])
508+
@pytest.mark.parametrize(
509+
("supported_architectures", "api_action", "api_method", "installed"),
510+
[
511+
(["i386"], "availability", "get", False),
512+
(["i386", "aarch64"], "availability", "get", False),
513+
(["i386"], "install", "post", False),
514+
(["i386", "aarch64"], "install", "post", False),
515+
(["i386"], "update", "post", True),
516+
(["i386", "aarch64"], "update", "post", True),
517+
],
518+
)
509519
async def test_api_store_addons_addon_availability_arch_not_supported(
510-
api_client: TestClient, coresys: CoreSys, supported_architectures: list[str]
520+
api_client: TestClient,
521+
coresys: CoreSys,
522+
supported_architectures: list[str],
523+
api_action: str,
524+
api_method: str,
525+
installed: bool,
511526
):
512-
"""Test /store/addons/{addon}/availability REST API - architecture not supported."""
527+
"""Test availability errors for /store/addons/{addon}/* REST APIs - architecture not supported."""
528+
coresys.hardware.disk.get_disk_free_space = lambda x: 5000
513529
# Create an addon with unsupported architecture
514530
addon_obj = AddonStore(coresys, "test_arch_addon")
515531
coresys.addons.store[addon_obj.slug] = addon_obj
@@ -526,10 +542,15 @@ async def test_api_store_addons_addon_availability_arch_not_supported(
526542
"version": "1.0.0",
527543
}
528544
coresys.store.data.addons[addon_obj.slug] = addon_config
545+
if installed:
546+
coresys.addons.local[addon_obj.slug] = Addon(coresys, addon_obj.slug)
547+
coresys.addons.data.user[addon_obj.slug] = {"version": AwesomeVersion("0.0.1")}
529548

530549
# Mock the system architecture to be different
531550
with patch.object(CpuArch, "supported", new=PropertyMock(return_value=["amd64"])):
532-
resp = await api_client.get(f"/store/addons/{addon_obj.slug}/availability")
551+
resp = await api_client.request(
552+
api_method, f"/store/addons/{addon_obj.slug}/{api_action}"
553+
)
533554
assert resp.status == 400
534555
result = await resp.json()
535556
assert result["error_key"] == "addon_not_supported_architecture_error"
@@ -547,12 +568,29 @@ async def test_api_store_addons_addon_availability_arch_not_supported(
547568

548569

549570
@pytest.mark.parametrize(
550-
"supported_machines", [["odroid-n2"], ["!qemux86-64"], ["a", "b"]]
571+
("supported_machines", "api_action", "api_method", "installed"),
572+
[
573+
(["odroid-n2"], "availability", "get", False),
574+
(["!qemux86-64"], "availability", "get", False),
575+
(["a", "b"], "availability", "get", False),
576+
(["odroid-n2"], "install", "post", False),
577+
(["!qemux86-64"], "install", "post", False),
578+
(["a", "b"], "install", "post", False),
579+
(["odroid-n2"], "update", "post", True),
580+
(["!qemux86-64"], "update", "post", True),
581+
(["a", "b"], "update", "post", True),
582+
],
551583
)
552584
async def test_api_store_addons_addon_availability_machine_not_supported(
553-
api_client: TestClient, coresys: CoreSys, supported_machines: list[str]
585+
api_client: TestClient,
586+
coresys: CoreSys,
587+
supported_machines: list[str],
588+
api_action: str,
589+
api_method: str,
590+
installed: bool,
554591
):
555-
"""Test /store/addons/{addon}/availability REST API - machine not supported."""
592+
"""Test availability errors for /store/addons/{addon}/* REST APIs - machine not supported."""
593+
coresys.hardware.disk.get_disk_free_space = lambda x: 5000
556594
# Create an addon with unsupported machine type
557595
addon_obj = AddonStore(coresys, "test_machine_addon")
558596
coresys.addons.store[addon_obj.slug] = addon_obj
@@ -570,10 +608,15 @@ async def test_api_store_addons_addon_availability_machine_not_supported(
570608
"version": "1.0.0",
571609
}
572610
coresys.store.data.addons[addon_obj.slug] = addon_config
611+
if installed:
612+
coresys.addons.local[addon_obj.slug] = Addon(coresys, addon_obj.slug)
613+
coresys.addons.data.user[addon_obj.slug] = {"version": AwesomeVersion("0.0.1")}
573614

574615
# Mock the system machine to be different
575616
with patch.object(CoreSys, "machine", new=PropertyMock(return_value="qemux86-64")):
576-
resp = await api_client.get(f"/store/addons/{addon_obj.slug}/availability")
617+
resp = await api_client.request(
618+
api_method, f"/store/addons/{addon_obj.slug}/{api_action}"
619+
)
577620
assert resp.status == 400
578621
result = await resp.json()
579622
assert result["error_key"] == "addon_not_supported_machine_type_error"
@@ -590,10 +633,23 @@ async def test_api_store_addons_addon_availability_machine_not_supported(
590633
)
591634

592635

636+
@pytest.mark.parametrize(
637+
("api_action", "api_method", "installed"),
638+
[
639+
("availability", "get", False),
640+
("install", "post", False),
641+
("update", "post", True),
642+
],
643+
)
593644
async def test_api_store_addons_addon_availability_homeassistant_version_too_old(
594-
api_client: TestClient, coresys: CoreSys, test_repository: Repository
645+
api_client: TestClient,
646+
coresys: CoreSys,
647+
api_action: str,
648+
api_method: str,
649+
installed: bool,
595650
):
596-
"""Test /store/addons/{addon}/availability REST API - Home Assistant version too old."""
651+
"""Test availability errors for /store/addons/{addon}/* REST APIs - Home Assistant version too old."""
652+
coresys.hardware.disk.get_disk_free_space = lambda x: 5000
597653
# Create an addon that requires newer Home Assistant version
598654
addon_obj = AddonStore(coresys, "test_version_addon")
599655
coresys.addons.store[addon_obj.slug] = addon_obj
@@ -611,14 +667,19 @@ async def test_api_store_addons_addon_availability_homeassistant_version_too_old
611667
"version": "1.0.0",
612668
}
613669
coresys.store.data.addons[addon_obj.slug] = addon_config
670+
if installed:
671+
coresys.addons.local[addon_obj.slug] = Addon(coresys, addon_obj.slug)
672+
coresys.addons.data.user[addon_obj.slug] = {"version": AwesomeVersion("0.0.1")}
614673

615674
# Mock the Home Assistant version to be older
616675
with patch.object(
617676
HomeAssistant,
618677
"version",
619678
new=PropertyMock(return_value=AwesomeVersion("2022.1.1")),
620679
):
621-
resp = await api_client.get(f"/store/addons/{addon_obj.slug}/availability")
680+
resp = await api_client.request(
681+
api_method, f"/store/addons/{addon_obj.slug}/{api_action}"
682+
)
622683
assert resp.status == 400
623684
result = await resp.json()
624685
assert result["error_key"] == "addon_not_supported_home_assistant_version_error"

0 commit comments

Comments
 (0)