"""The tests for the backup helpers."""

import asyncio
from unittest.mock import patch

import pytest

from homeassistant.components.backup import DOMAIN as BACKUP_DOMAIN
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers import backup as backup_helper
from homeassistant.setup import async_setup_component


async def test_async_get_manager(hass: HomeAssistant) -> None:
    """Test async_get_manager."""
    backup_helper.async_initialize_backup(hass)
    task = asyncio.create_task(backup_helper.async_get_manager(hass))
    assert await async_setup_component(hass, BACKUP_DOMAIN, {})
    manager = await task
    assert manager is hass.data[backup_helper.DATA_MANAGER]


async def test_async_get_manager_no_backup(hass: HomeAssistant) -> None:
    """Test async_get_manager when the backup integration is not enabled."""
    with pytest.raises(HomeAssistantError, match="Backup integration is not available"):
        await backup_helper.async_get_manager(hass)


async def test_async_get_manager_backup_failed_setup(hass: HomeAssistant) -> None:
    """Test test_async_get_manager when the backup integration can't be set up."""
    backup_helper.async_initialize_backup(hass)

    with patch(
        "homeassistant.components.backup.manager.BackupManager.async_setup",
        side_effect=Exception("Boom!"),
    ):
        assert not await async_setup_component(hass, BACKUP_DOMAIN, {})
    with (
        pytest.raises(Exception, match="Boom!"),
    ):
        await backup_helper.async_get_manager(hass)