From a37cfe169d9675ae020f2ce9c065dd15b00b39a2 Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Thu, 7 Mar 2024 21:32:07 -0700 Subject: [PATCH 1/6] Make sure Notion saves new refresh token upon startup --- homeassistant/components/notion/__init__.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/homeassistant/components/notion/__init__.py b/homeassistant/components/notion/__init__.py index 3ed2c7bdb930fa..c43eb610d0e27e 100644 --- a/homeassistant/components/notion/__init__.py +++ b/homeassistant/components/notion/__init__.py @@ -180,6 +180,10 @@ def async_save_refresh_token(refresh_token: str) -> None: # Create a callback to save the refresh token when it changes: entry.async_on_unload(client.add_refresh_token_callback(async_save_refresh_token)) + # Save our current refresh token: + if client.refresh_token: + async_save_refresh_token(client.refresh_token) + hass.config_entries.async_update_entry(entry, **entry_updates) async def async_update() -> NotionData: From 99dde431fcf281150f0d0bca178aa3573b65412e Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Thu, 7 Mar 2024 21:42:16 -0700 Subject: [PATCH 2/6] Code review --- homeassistant/components/notion/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/notion/__init__.py b/homeassistant/components/notion/__init__.py index c43eb610d0e27e..61e656151b0ee5 100644 --- a/homeassistant/components/notion/__init__.py +++ b/homeassistant/components/notion/__init__.py @@ -180,8 +180,8 @@ def async_save_refresh_token(refresh_token: str) -> None: # Create a callback to save the refresh token when it changes: entry.async_on_unload(client.add_refresh_token_callback(async_save_refresh_token)) - # Save our current refresh token: - if client.refresh_token: + # Save the client's refresh token if it's different than what we already have: + if client.refresh_token != entry.data[CONF_REFRESH_TOKEN]: async_save_refresh_token(client.refresh_token) hass.config_entries.async_update_entry(entry, **entry_updates) From f97ea992c79586637f20c9f0ed0c5fffe7bc4675 Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Thu, 7 Mar 2024 21:44:15 -0700 Subject: [PATCH 3/6] Typing --- homeassistant/components/notion/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/notion/__init__.py b/homeassistant/components/notion/__init__.py index 61e656151b0ee5..2c42cd93fb7ef7 100644 --- a/homeassistant/components/notion/__init__.py +++ b/homeassistant/components/notion/__init__.py @@ -181,7 +181,7 @@ def async_save_refresh_token(refresh_token: str) -> None: entry.async_on_unload(client.add_refresh_token_callback(async_save_refresh_token)) # Save the client's refresh token if it's different than what we already have: - if client.refresh_token != entry.data[CONF_REFRESH_TOKEN]: + if client.refresh_token and client.refresh_token != entry.data[CONF_REFRESH_TOKEN]: async_save_refresh_token(client.refresh_token) hass.config_entries.async_update_entry(entry, **entry_updates) From 0c23839868a62d64ed1726b3f7c372cc2cb2e99d Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Thu, 7 Mar 2024 21:47:50 -0700 Subject: [PATCH 4/6] Smoother syntax --- homeassistant/components/notion/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/notion/__init__.py b/homeassistant/components/notion/__init__.py index 2c42cd93fb7ef7..33a749909282cb 100644 --- a/homeassistant/components/notion/__init__.py +++ b/homeassistant/components/notion/__init__.py @@ -181,8 +181,8 @@ def async_save_refresh_token(refresh_token: str) -> None: entry.async_on_unload(client.add_refresh_token_callback(async_save_refresh_token)) # Save the client's refresh token if it's different than what we already have: - if client.refresh_token and client.refresh_token != entry.data[CONF_REFRESH_TOKEN]: - async_save_refresh_token(client.refresh_token) + if (token := client.refresh_token) and token != entry.data[CONF_REFRESH_TOKEN]: + async_save_refresh_token(token) hass.config_entries.async_update_entry(entry, **entry_updates) From 5d1cf99756f3841cf5a39b9a52a1f2d1f05e1062 Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Fri, 8 Mar 2024 09:10:08 -0700 Subject: [PATCH 5/6] Fix tests --- homeassistant/components/notion/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/notion/__init__.py b/homeassistant/components/notion/__init__.py index 33a749909282cb..2c1a6d0ac84237 100644 --- a/homeassistant/components/notion/__init__.py +++ b/homeassistant/components/notion/__init__.py @@ -181,7 +181,7 @@ def async_save_refresh_token(refresh_token: str) -> None: entry.async_on_unload(client.add_refresh_token_callback(async_save_refresh_token)) # Save the client's refresh token if it's different than what we already have: - if (token := client.refresh_token) and token != entry.data[CONF_REFRESH_TOKEN]: + if (token := client.refresh_token) and token != entry.data.get(CONF_REFRESH_TOKEN): async_save_refresh_token(token) hass.config_entries.async_update_entry(entry, **entry_updates) From b86166ab8601d09fba63f7531380c093ae7611b3 Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Fri, 8 Mar 2024 09:39:31 -0700 Subject: [PATCH 6/6] Fix tests for real --- homeassistant/components/notion/__init__.py | 2 +- tests/components/notion/conftest.py | 7 ++++--- tests/components/notion/test_config_flow.py | 16 ++++++++++++---- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/homeassistant/components/notion/__init__.py b/homeassistant/components/notion/__init__.py index 2c1a6d0ac84237..33a749909282cb 100644 --- a/homeassistant/components/notion/__init__.py +++ b/homeassistant/components/notion/__init__.py @@ -181,7 +181,7 @@ def async_save_refresh_token(refresh_token: str) -> None: entry.async_on_unload(client.add_refresh_token_callback(async_save_refresh_token)) # Save the client's refresh token if it's different than what we already have: - if (token := client.refresh_token) and token != entry.data.get(CONF_REFRESH_TOKEN): + if (token := client.refresh_token) and token != entry.data[CONF_REFRESH_TOKEN]: async_save_refresh_token(token) hass.config_entries.async_update_entry(entry, **entry_updates) diff --git a/tests/components/notion/conftest.py b/tests/components/notion/conftest.py index 61a54ca58bad0b..366f78b8c6c1ed 100644 --- a/tests/components/notion/conftest.py +++ b/tests/components/notion/conftest.py @@ -9,8 +9,8 @@ from aionotion.user.models import UserPreferences import pytest -from homeassistant.components.notion import DOMAIN -from homeassistant.const import CONF_PASSWORD, CONF_USERNAME +from homeassistant.components.notion import CONF_REFRESH_TOKEN, CONF_USER_UUID, DOMAIN +from homeassistant.const import CONF_USERNAME from homeassistant.core import HomeAssistant from tests.common import MockConfigEntry, load_fixture @@ -81,7 +81,8 @@ def config_fixture(): """Define a config entry data fixture.""" return { CONF_USERNAME: TEST_USERNAME, - CONF_PASSWORD: TEST_PASSWORD, + CONF_USER_UUID: TEST_USER_UUID, + CONF_REFRESH_TOKEN: TEST_REFRESH_TOKEN, } diff --git a/tests/components/notion/test_config_flow.py b/tests/components/notion/test_config_flow.py index 646bd7a6e87d3c..72bb3dfee0bafd 100644 --- a/tests/components/notion/test_config_flow.py +++ b/tests/components/notion/test_config_flow.py @@ -10,7 +10,7 @@ from homeassistant.const import CONF_PASSWORD, CONF_USERNAME from homeassistant.core import HomeAssistant -from .conftest import TEST_REFRESH_TOKEN, TEST_USER_UUID, TEST_USERNAME +from .conftest import TEST_PASSWORD, TEST_REFRESH_TOKEN, TEST_USER_UUID, TEST_USERNAME pytestmark = pytest.mark.usefixtures("mock_setup_entry") @@ -26,7 +26,6 @@ async def test_create_entry( hass: HomeAssistant, client, - config, errors, get_client_with_exception, mock_aionotion, @@ -44,13 +43,22 @@ async def test_create_entry( get_client_with_exception, ): result = await hass.config_entries.flow.async_init( - DOMAIN, context={"source": SOURCE_USER}, data=config + DOMAIN, + context={"source": SOURCE_USER}, + data={ + CONF_USERNAME: TEST_USERNAME, + CONF_PASSWORD: TEST_PASSWORD, + }, ) assert result["type"] == data_entry_flow.FlowResultType.FORM assert result["errors"] == errors result = await hass.config_entries.flow.async_configure( - result["flow_id"], user_input=config + result["flow_id"], + user_input={ + CONF_USERNAME: TEST_USERNAME, + CONF_PASSWORD: TEST_PASSWORD, + }, ) assert result["type"] == data_entry_flow.FlowResultType.CREATE_ENTRY assert result["title"] == TEST_USERNAME