Fix title for onedrive for business (#163134)

This commit is contained in:
Josef Zweck
2026-02-16 16:45:47 +01:00
committed by GitHub
parent 0292a8cd7e
commit be228dbe47
4 changed files with 16 additions and 40 deletions

View File

@@ -8,7 +8,7 @@ from typing import Any, cast
from onedrive_personal_sdk.clients.client import OneDriveClient
from onedrive_personal_sdk.exceptions import OneDriveException
from onedrive_personal_sdk.models.items import AppRoot
from onedrive_personal_sdk.models.items import Drive
import voluptuous as vol
from homeassistant.config_entries import (
@@ -38,7 +38,7 @@ class OneDriveForBusinessConfigFlow(AbstractOAuth2FlowHandler, domain=DOMAIN):
DOMAIN = DOMAIN
client: OneDriveClient
approot: AppRoot
drive: Drive
@property
def logger(self) -> logging.Logger:
@@ -102,8 +102,7 @@ class OneDriveForBusinessConfigFlow(AbstractOAuth2FlowHandler, domain=DOMAIN):
)
try:
self.approot = await self.client.get_approot()
drive = await self.client.get_drive()
self.drive = await self.client.get_drive()
except OneDriveException:
self.logger.exception("Failed to connect to OneDrive")
return self.async_abort(reason="connection_error")
@@ -111,7 +110,7 @@ class OneDriveForBusinessConfigFlow(AbstractOAuth2FlowHandler, domain=DOMAIN):
self.logger.exception("Unknown error")
return self.async_abort(reason="unknown")
await self.async_set_unique_id(drive.id)
await self.async_set_unique_id(self.drive.id)
if self.source == SOURCE_REAUTH:
self._abort_if_unique_id_mismatch(reason="wrong_drive")
@@ -147,9 +146,11 @@ class OneDriveForBusinessConfigFlow(AbstractOAuth2FlowHandler, domain=DOMAIN):
errors["base"] = "folder_creation_error"
if not errors:
title = (
f"{self.approot.created_by.user.display_name}'s OneDrive"
if self.approot.created_by.user
and self.approot.created_by.user.display_name
f"{self.drive.owner.user.display_name}'s OneDrive ({self.drive.owner.user.email})"
if self.drive.owner
and self.drive.owner.user
and self.drive.owner.user.display_name
and self.drive.owner.user.email
else "OneDrive"
)
return self.async_create_entry(

View File

@@ -7,7 +7,6 @@ from unittest.mock import AsyncMock, MagicMock, patch
from onedrive_personal_sdk.const import DriveState, DriveType
from onedrive_personal_sdk.models.items import (
AppRoot,
Drive,
DriveQuota,
File,
@@ -99,27 +98,6 @@ def mock_onedrive_client_init() -> Generator[MagicMock]:
yield onedrive_client
@pytest.fixture
def mock_approot() -> AppRoot:
"""Return a mocked approot."""
return AppRoot(
id="id",
child_count=0,
size=0,
name="name",
parent_reference=ItemParentReference(
drive_id="mock_drive_id", id="id", path="path"
),
created_by=IdentitySet(
user=User(
display_name="John Doe",
id="id",
email="john@doe.com",
)
),
)
@pytest.fixture
def mock_drive() -> Drive:
"""Return a mocked drive."""
@@ -199,7 +177,6 @@ def mock_metadata_file() -> File:
@pytest.fixture(autouse=True)
def mock_onedrive_client(
mock_onedrive_client_init: MagicMock,
mock_approot: AppRoot,
mock_drive: Drive,
mock_folder: Folder,
mock_backup_file: File,
@@ -207,7 +184,6 @@ def mock_onedrive_client(
) -> Generator[MagicMock]:
"""Return a mocked GraphServiceClient."""
client = mock_onedrive_client_init.return_value
client.get_approot.return_value = mock_approot
client.create_folder.return_value = mock_folder
client.list_drive_items.return_value = [mock_backup_file, mock_metadata_file]
client.get_drive_item.return_value = mock_folder

View File

@@ -4,7 +4,7 @@ from http import HTTPStatus
from unittest.mock import AsyncMock, MagicMock
from onedrive_personal_sdk.exceptions import OneDriveException
from onedrive_personal_sdk.models.items import Drive
from onedrive_personal_sdk.models.items import Drive, IdentitySet
import pytest
from homeassistant import config_entries
@@ -104,7 +104,7 @@ async def test_full_flow(
assert result["type"] is FlowResultType.CREATE_ENTRY
assert len(hass.config_entries.async_entries(DOMAIN)) == 1
assert len(mock_setup_entry.mock_calls) == 1
assert result["title"] == "John Doe's OneDrive"
assert result["title"] == "John Doe's OneDrive (john@doe.com)"
assert result["result"].unique_id == "mock_drive_id"
assert result["data"][CONF_TOKEN][CONF_ACCESS_TOKEN] == "mock-access-token"
assert result["data"][CONF_TOKEN]["refresh_token"] == "mock-refresh-token"
@@ -119,11 +119,11 @@ async def test_full_flow_with_owner_not_found(
aioclient_mock: AiohttpClientMocker,
mock_setup_entry: AsyncMock,
mock_onedrive_client: MagicMock,
mock_approot: MagicMock,
mock_drive: Drive,
) -> None:
"""Ensure we get a default title if the drive's owner can't be read."""
mock_approot.created_by.user = None
mock_drive.owner = IdentitySet(user=None)
result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": config_entries.SOURCE_USER}
@@ -194,7 +194,7 @@ async def test_error_during_folder_creation(
result["flow_id"], {CONF_FOLDER_PATH: "myFolder"}
)
assert result["type"] is FlowResultType.CREATE_ENTRY
assert result["title"] == "John Doe's OneDrive"
assert result["title"] == "John Doe's OneDrive (john@doe.com)"
assert result["result"].unique_id == "mock_drive_id"
assert result["data"][CONF_TOKEN][CONF_ACCESS_TOKEN] == "mock-access-token"
assert result["data"][CONF_TOKEN]["refresh_token"] == "mock-refresh-token"
@@ -220,7 +220,7 @@ async def test_flow_errors(
) -> None:
"""Test errors during flow."""
mock_onedrive_client.get_approot.side_effect = exception
mock_onedrive_client.get_drive.side_effect = exception
result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": config_entries.SOURCE_USER}

View File

@@ -8,7 +8,7 @@ from onedrive_personal_sdk.exceptions import (
NotFoundError,
OneDriveException,
)
from onedrive_personal_sdk.models.items import AppRoot, Folder
from onedrive_personal_sdk.models.items import Folder
import pytest
from homeassistant.components.onedrive_for_business.const import (
@@ -72,7 +72,6 @@ async def test_get_integration_folder_creation(
hass: HomeAssistant,
mock_config_entry: MockConfigEntry,
mock_onedrive_client: MagicMock,
mock_approot: AppRoot,
mock_folder: Folder,
) -> None:
"""Test faulty integration folder creation."""