mirror of
https://github.com/Electric-Special/ha-core.git
synced 2026-03-21 03:03:17 +01:00
Fix title for onedrive for business (#163134)
This commit is contained in:
@@ -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(
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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."""
|
||||
|
||||
Reference in New Issue
Block a user