@@ -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+ )
509519async 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)
552584async 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+ )
593644async 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