diff --git a/tests/components/backup/common.py b/tests/components/backup/common.py index 1e7278134d4..afdb5e47a2e 100644 --- a/tests/components/backup/common.py +++ b/tests/components/backup/common.py @@ -13,6 +13,7 @@ from homeassistant.components.backup import ( AgentBackup, BackupAgent, BackupAgentPlatformProtocol, + BackupNotFound, Folder, ) from homeassistant.components.backup.const import DATA_MANAGER @@ -134,6 +135,37 @@ class BackupAgentTest(BackupAgent): """Delete a backup file.""" +def mock_backup_agent(name: str, backups: list[AgentBackup] | None = None) -> Mock: + """Create a mock backup agent.""" + + async def get_backup(backup_id: str, **kwargs: Any) -> AgentBackup | None: + """Get a backup.""" + return next((b for b in backups if b.backup_id == backup_id), None) + + backups = backups or [] + mock_agent = Mock(spec=BackupAgent) + mock_agent.domain = "test" + mock_agent.name = name + mock_agent.unique_id = name + type(mock_agent).agent_id = BackupAgent.agent_id + mock_agent.async_delete_backup = AsyncMock( + spec_set=[BackupAgent.async_delete_backup] + ) + mock_agent.async_download_backup = AsyncMock( + side_effect=BackupNotFound, spec_set=[BackupAgent.async_download_backup] + ) + mock_agent.async_get_backup = AsyncMock( + side_effect=get_backup, spec_set=[BackupAgent.async_get_backup] + ) + mock_agent.async_list_backups = AsyncMock( + return_value=backups, spec_set=[BackupAgent.async_list_backups] + ) + mock_agent.async_upload_backup = AsyncMock( + spec_set=[BackupAgent.async_upload_backup] + ) + return mock_agent + + async def setup_backup_integration( hass: HomeAssistant, with_hassio: bool = False, diff --git a/tests/components/backup/test_http.py b/tests/components/backup/test_http.py index 24fd15fc4fe..9ebf3e8bd40 100644 --- a/tests/components/backup/test_http.py +++ b/tests/components/backup/test_http.py @@ -25,6 +25,7 @@ from .common import ( TEST_BACKUP_ABC123, BackupAgentTest, aiter_from_iter, + mock_backup_agent, setup_backup_integration, ) @@ -112,16 +113,14 @@ async def test_downloading_local_encrypted_backup( await _test_downloading_encrypted_backup(hass_client, "backup.local") -@patch.object(BackupAgentTest, "async_download_backup") async def test_downloading_remote_encrypted_backup( - download_mock, hass: HomeAssistant, hass_client: ClientSessionGenerator, ) -> None: """Test downloading a local backup file.""" backup_path = get_fixture_path("test_backups/c0cb53bd.tar", DOMAIN) await setup_backup_integration(hass) - hass.data[DATA_MANAGER].backup_agents["domain.test"] = BackupAgentTest( + mock_agent = mock_backup_agent( "test", [ AgentBackup( @@ -139,11 +138,12 @@ async def test_downloading_remote_encrypted_backup( ) ], ) + hass.data[DATA_MANAGER].backup_agents["domain.test"] = mock_agent async def download_backup(backup_id: str, **kwargs: Any) -> AsyncIterator[bytes]: return aiter_from_iter((backup_path.read_bytes(),)) - download_mock.side_effect = download_backup + mock_agent.async_download_backup.side_effect = download_backup await _test_downloading_encrypted_backup(hass_client, "domain.test") @@ -154,9 +154,7 @@ async def test_downloading_remote_encrypted_backup( (BackupNotFound, 404), ], ) -@patch.object(BackupAgentTest, "async_download_backup") async def test_downloading_remote_encrypted_backup_with_error( - download_mock, hass: HomeAssistant, hass_client: ClientSessionGenerator, error: Exception, @@ -164,7 +162,7 @@ async def test_downloading_remote_encrypted_backup_with_error( ) -> None: """Test downloading a local backup file.""" await setup_backup_integration(hass) - hass.data[DATA_MANAGER].backup_agents["domain.test"] = BackupAgentTest( + mock_agent = mock_backup_agent( "test", [ AgentBackup( @@ -182,8 +180,9 @@ async def test_downloading_remote_encrypted_backup_with_error( ) ], ) + hass.data[DATA_MANAGER].backup_agents["domain.test"] = mock_agent - download_mock.side_effect = error + mock_agent.async_download_backup.side_effect = error client = await hass_client() resp = await client.get( "/api/backup/download/abc123?agent_id=domain.test&password=blah"