1
0
mirror of https://github.com/home-assistant/core.git synced 2025-12-20 02:48:57 +00:00
Files
core/tests/components/backblaze_b2/test_diagnostics.py
ElCruncharino dcb2087f4b Add backblaze b2 backup integration (#149627)
Co-authored-by: Hugo van Rijswijk <git@hugovr.nl>
Co-authored-by: ElCruncharino <ElCruncharino@users.noreply.github.com>
Co-authored-by: Erik Montnemery <erik@montnemery.com>
2025-10-30 08:42:02 +01:00

89 lines
3.0 KiB
Python

"""Test Backblaze B2 diagnostics."""
from unittest.mock import Mock, patch
from homeassistant.components.backblaze_b2.diagnostics import (
async_get_config_entry_diagnostics,
)
from homeassistant.core import HomeAssistant
from . import setup_integration
from tests.common import MockConfigEntry
async def test_diagnostics_basic(
hass: HomeAssistant, mock_config_entry: MockConfigEntry
) -> None:
"""Test basic diagnostics data collection."""
await setup_integration(hass, mock_config_entry)
result = await async_get_config_entry_diagnostics(hass, mock_config_entry)
assert "entry_data" in result
assert "entry_options" in result
assert "bucket_info" in result
assert "account_info" in result
# Check that sensitive data is redacted
assert mock_config_entry.data["key_id"] not in str(result["entry_data"])
assert mock_config_entry.data["application_key"] not in str(result["entry_data"])
async def test_diagnostics_error_handling(
hass: HomeAssistant, mock_config_entry: MockConfigEntry
) -> None:
"""Test diagnostics handles errors gracefully."""
mock_config_entry.runtime_data = None
mock_config_entry.add_to_hass(hass)
result = await async_get_config_entry_diagnostics(hass, mock_config_entry)
assert "bucket_info" in result
assert "account_info" in result
async def test_diagnostics_bucket_data_redaction(
hass: HomeAssistant, mock_config_entry: MockConfigEntry
) -> None:
"""Test diagnostics redacts bucket-specific sensitive data."""
await setup_integration(hass, mock_config_entry)
mock_bucket = Mock()
mock_bucket.name = "test-bucket"
mock_bucket.id_ = "bucket_id_123"
mock_bucket.type_ = "allPrivate"
mock_bucket.cors_rules = []
mock_bucket.lifecycle_rules = []
mock_bucket.revision = 1
mock_api = Mock()
mock_account_info = Mock()
mock_account_info.get_account_id.return_value = "account123"
mock_account_info.get_api_url.return_value = "https://api.backblazeb2.com"
mock_account_info.get_download_url.return_value = "https://f001.backblazeb2.com"
mock_account_info.get_minimum_part_size.return_value = 5000000
mock_account_info.get_allowed.return_value = {
"capabilities": ["writeFiles", "listFiles", "readFiles"],
"bucketId": "test_bucket_id_123",
"bucketName": "restricted_bucket",
"namePrefix": "restricted/path/",
}
mock_bucket.api = mock_api
mock_api.account_info = mock_account_info
with patch.object(mock_config_entry, "runtime_data", mock_bucket):
result = await async_get_config_entry_diagnostics(hass, mock_config_entry)
account_data = result["account_info"]
assert account_data["allowed"]["capabilities"] == [
"writeFiles",
"listFiles",
"readFiles",
]
assert account_data["allowed"]["bucketId"] == "**REDACTED**"
assert account_data["allowed"]["bucketName"] == "**REDACTED**"
assert account_data["allowed"]["namePrefix"] == "**REDACTED**"