async def test_removing_backup( hass: HomeAssistant, caplog: pytest.LogCaptureFixture, ) -> None: """Test removing backup.""" manager = BackupManager(hass) manager.backups = {TEST_BACKUP.slug: TEST_BACKUP} manager.loaded_backups = True with patch("pathlib.Path.exists", return_value=True): await manager.remove_backup(TEST_BACKUP.slug) assert "Removed backup located at" in caplog.text
async def test_generate_backup( hass: HomeAssistant, caplog: pytest.LogCaptureFixture, ) -> None: """Test generate backup.""" manager = BackupManager(hass) manager.loaded_backups = True await _mock_backup_generation(manager) assert "Generated new backup with slug " in caplog.text assert "Creating backup directory" in caplog.text assert "Loaded 0 platforms" in caplog.text
async def test_getting_backup_that_does_not_exist( hass: HomeAssistant, caplog: pytest.LogCaptureFixture, ): """Test getting backup that does not exist.""" manager = BackupManager(hass) manager.backups = {TEST_BACKUP.slug: TEST_BACKUP} manager.loaded_backups = True with patch("pathlib.Path.exists", return_value=False): backup = await manager.get_backup(TEST_BACKUP.slug) assert backup is None assert (f"Removing tracked backup ({TEST_BACKUP.slug}) that " f"does not exists on the expected path {TEST_BACKUP.path}" in caplog.text)
async def test_exception_plaform_post(hass: HomeAssistant) -> None: """Test exception in post step.""" manager = BackupManager(hass) manager.loaded_backups = True async def _mock_step(hass: HomeAssistant) -> None: raise HomeAssistantError("Test exception") await _setup_mock_domain( hass, Mock( async_pre_backup=AsyncMock(), async_post_backup=_mock_step, ), ) with pytest.raises(HomeAssistantError): await _mock_backup_generation(manager)
async def test_removing_non_existing_backup( hass: HomeAssistant, caplog: pytest.LogCaptureFixture, ) -> None: """Test removing not existing backup.""" manager = BackupManager(hass) await manager.remove_backup("non_existing") assert "Removed backup located at" not in caplog.text
async def test_load_backups_with_exception( hass: HomeAssistant, caplog: pytest.LogCaptureFixture, ) -> None: """Test loading backups with exception.""" manager = BackupManager(hass) with patch("pathlib.Path.glob", return_value=[TEST_BACKUP.path ]), patch("tarfile.open", side_effect=OSError("Test ecxeption")): await manager.load_backups() backups = await manager.get_backups() assert f"Unable to read backup {TEST_BACKUP.path}: Test ecxeption" in caplog.text assert backups == {}
async def test_load_backups(hass: HomeAssistant) -> None: """Test loading backups.""" manager = BackupManager(hass) with patch("pathlib.Path.glob", return_value=[TEST_BACKUP.path]), patch( "tarfile.open", return_value=MagicMock()), patch( "json.loads", return_value={ "slug": TEST_BACKUP.slug, "name": TEST_BACKUP.name, "date": TEST_BACKUP.date, }, ), patch("pathlib.Path.stat", return_value=MagicMock(st_size=TEST_BACKUP.size)): await manager.load_backups() backups = await manager.get_backups() assert backups == {TEST_BACKUP.slug: TEST_BACKUP}
async def test_not_loading_bad_platforms( hass: HomeAssistant, caplog: pytest.LogCaptureFixture, ) -> None: """Test loading backup platforms.""" manager = BackupManager(hass) assert not manager.loaded_platforms assert not manager.platforms await _setup_mock_domain(hass) await manager.load_platforms() assert manager.loaded_platforms assert len(manager.platforms) == 0 assert "Loaded 0 platforms" in caplog.text assert ( "some_domain does not implement required functions for the backup platform" in caplog.text)
async def test_loading_platforms( hass: HomeAssistant, caplog: pytest.LogCaptureFixture, ) -> None: """Test loading backup platforms.""" manager = BackupManager(hass) assert not manager.loaded_platforms assert not manager.platforms await _setup_mock_domain( hass, Mock( async_pre_backup=AsyncMock(), async_post_backup=AsyncMock(), ), ) await manager.load_platforms() assert manager.loaded_platforms assert len(manager.platforms) == 1 assert "Loaded 1 platforms" in caplog.text
async def test_constructor(hass: HomeAssistant) -> None: """Test BackupManager constructor.""" manager = BackupManager(hass) assert manager.backup_dir.as_posix() == hass.config.path("backups")
async def test_generate_backup_when_backing_up(hass: HomeAssistant) -> None: """Test generate backup.""" manager = BackupManager(hass) manager.backing_up = True with pytest.raises(HomeAssistantError, match="Backup already in progress"): await manager.generate_backup()