mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 13:17:32 +00:00
Fix Tuya v2 login issue (#56973)
* fix login issue * fix:login error * update COUNTRY_CODE_CHINA line location * added one blank line * feat:added line #L88 was not covered by tests * ci build errors Co-authored-by: erchuan <jie.zheng@tuya.com>
This commit is contained in:
parent
2d374d65b6
commit
7446e388ed
@ -26,6 +26,8 @@ from .const import (
|
|||||||
RESULT_SINGLE_INSTANCE = "single_instance_allowed"
|
RESULT_SINGLE_INSTANCE = "single_instance_allowed"
|
||||||
RESULT_AUTH_FAILED = "invalid_auth"
|
RESULT_AUTH_FAILED = "invalid_auth"
|
||||||
TUYA_ENDPOINT_BASE = "https://openapi.tuyacn.com"
|
TUYA_ENDPOINT_BASE = "https://openapi.tuyacn.com"
|
||||||
|
TUYA_ENDPOINT_OTHER = "https://openapi.tuyaus.com"
|
||||||
|
COUNTRY_CODE_CHINA = ["86", "+86", "China"]
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -82,7 +84,11 @@ class TuyaConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
|
|||||||
if project_type == ProjectType.INDUSTY_SOLUTIONS:
|
if project_type == ProjectType.INDUSTY_SOLUTIONS:
|
||||||
response = api.login(user_input[CONF_USERNAME], user_input[CONF_PASSWORD])
|
response = api.login(user_input[CONF_USERNAME], user_input[CONF_PASSWORD])
|
||||||
else:
|
else:
|
||||||
api.endpoint = TUYA_ENDPOINT_BASE
|
if user_input[CONF_COUNTRY_CODE] in COUNTRY_CODE_CHINA:
|
||||||
|
api.endpoint = TUYA_ENDPOINT_BASE
|
||||||
|
else:
|
||||||
|
api.endpoint = TUYA_ENDPOINT_OTHER
|
||||||
|
|
||||||
response = api.login(
|
response = api.login(
|
||||||
user_input[CONF_USERNAME],
|
user_input[CONF_USERNAME],
|
||||||
user_input[CONF_PASSWORD],
|
user_input[CONF_PASSWORD],
|
||||||
|
@ -24,7 +24,8 @@ MOCK_ACCESS_ID = "myAccessId"
|
|||||||
MOCK_ACCESS_SECRET = "myAccessSecret"
|
MOCK_ACCESS_SECRET = "myAccessSecret"
|
||||||
MOCK_USERNAME = "myUsername"
|
MOCK_USERNAME = "myUsername"
|
||||||
MOCK_PASSWORD = "myPassword"
|
MOCK_PASSWORD = "myPassword"
|
||||||
MOCK_COUNTRY_CODE = "1"
|
MOCK_COUNTRY_CODE_BASE = "86"
|
||||||
|
MOCK_COUNTRY_CODE_OTHER = "1"
|
||||||
MOCK_APP_TYPE = "smartlife"
|
MOCK_APP_TYPE = "smartlife"
|
||||||
MOCK_ENDPOINT = "https://openapi-ueaz.tuyaus.com"
|
MOCK_ENDPOINT = "https://openapi-ueaz.tuyaus.com"
|
||||||
|
|
||||||
@ -35,15 +36,6 @@ TUYA_INDUSTRY_PROJECT_DATA = {
|
|||||||
CONF_PROJECT_TYPE: MOCK_INDUSTRY_PROJECT_TYPE,
|
CONF_PROJECT_TYPE: MOCK_INDUSTRY_PROJECT_TYPE,
|
||||||
}
|
}
|
||||||
|
|
||||||
TUYA_INPUT_SMART_HOME_DATA = {
|
|
||||||
CONF_ACCESS_ID: MOCK_ACCESS_ID,
|
|
||||||
CONF_ACCESS_SECRET: MOCK_ACCESS_SECRET,
|
|
||||||
CONF_USERNAME: MOCK_USERNAME,
|
|
||||||
CONF_PASSWORD: MOCK_PASSWORD,
|
|
||||||
CONF_COUNTRY_CODE: MOCK_COUNTRY_CODE,
|
|
||||||
CONF_APP_TYPE: MOCK_APP_TYPE,
|
|
||||||
}
|
|
||||||
|
|
||||||
TUYA_INPUT_INDUSTRY_DATA = {
|
TUYA_INPUT_INDUSTRY_DATA = {
|
||||||
CONF_ENDPOINT: MOCK_ENDPOINT,
|
CONF_ENDPOINT: MOCK_ENDPOINT,
|
||||||
CONF_ACCESS_ID: MOCK_ACCESS_ID,
|
CONF_ACCESS_ID: MOCK_ACCESS_ID,
|
||||||
@ -52,15 +44,23 @@ TUYA_INPUT_INDUSTRY_DATA = {
|
|||||||
CONF_PASSWORD: MOCK_PASSWORD,
|
CONF_PASSWORD: MOCK_PASSWORD,
|
||||||
}
|
}
|
||||||
|
|
||||||
TUYA_IMPORT_SMART_HOME_DATA = {
|
TUYA_IMPORT_SMART_HOME_DATA_BASE = {
|
||||||
CONF_ACCESS_ID: MOCK_ACCESS_ID,
|
CONF_ACCESS_ID: MOCK_ACCESS_ID,
|
||||||
CONF_ACCESS_SECRET: MOCK_ACCESS_SECRET,
|
CONF_ACCESS_SECRET: MOCK_ACCESS_SECRET,
|
||||||
CONF_USERNAME: MOCK_USERNAME,
|
CONF_USERNAME: MOCK_USERNAME,
|
||||||
CONF_PASSWORD: MOCK_PASSWORD,
|
CONF_PASSWORD: MOCK_PASSWORD,
|
||||||
CONF_COUNTRY_CODE: MOCK_COUNTRY_CODE,
|
CONF_COUNTRY_CODE: MOCK_COUNTRY_CODE_BASE,
|
||||||
CONF_APP_TYPE: MOCK_APP_TYPE,
|
CONF_APP_TYPE: MOCK_APP_TYPE,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TUYA_IMPORT_SMART_HOME_DATA_OTHER = {
|
||||||
|
CONF_ACCESS_ID: MOCK_ACCESS_ID,
|
||||||
|
CONF_ACCESS_SECRET: MOCK_ACCESS_SECRET,
|
||||||
|
CONF_USERNAME: MOCK_USERNAME,
|
||||||
|
CONF_PASSWORD: MOCK_PASSWORD,
|
||||||
|
CONF_COUNTRY_CODE: MOCK_COUNTRY_CODE_OTHER,
|
||||||
|
CONF_APP_TYPE: MOCK_APP_TYPE,
|
||||||
|
}
|
||||||
|
|
||||||
TUYA_IMPORT_INDUSTRY_DATA = {
|
TUYA_IMPORT_INDUSTRY_DATA = {
|
||||||
CONF_PROJECT_TYPE: MOCK_SMART_HOME_PROJECT_TYPE,
|
CONF_PROJECT_TYPE: MOCK_SMART_HOME_PROJECT_TYPE,
|
||||||
@ -118,8 +118,8 @@ async def test_industry_user(hass, tuya):
|
|||||||
assert not result["result"].unique_id
|
assert not result["result"].unique_id
|
||||||
|
|
||||||
|
|
||||||
async def test_smart_home_user(hass, tuya):
|
async def test_smart_home_user_base(hass, tuya):
|
||||||
"""Test smart home user config."""
|
"""Test smart home user config base."""
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
DOMAIN, context={"source": config_entries.SOURCE_USER}
|
DOMAIN, context={"source": config_entries.SOURCE_USER}
|
||||||
)
|
)
|
||||||
@ -137,7 +137,7 @@ async def test_smart_home_user(hass, tuya):
|
|||||||
|
|
||||||
tuya().login = MagicMock(return_value={"success": False, "errorCode": 1024})
|
tuya().login = MagicMock(return_value={"success": False, "errorCode": 1024})
|
||||||
result = await hass.config_entries.flow.async_configure(
|
result = await hass.config_entries.flow.async_configure(
|
||||||
result["flow_id"], user_input=TUYA_IMPORT_SMART_HOME_DATA
|
result["flow_id"], user_input=TUYA_IMPORT_SMART_HOME_DATA_BASE
|
||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
@ -145,7 +145,7 @@ async def test_smart_home_user(hass, tuya):
|
|||||||
|
|
||||||
tuya().login = MagicMock(return_value={"success": True, "errorCode": 1024})
|
tuya().login = MagicMock(return_value={"success": True, "errorCode": 1024})
|
||||||
result = await hass.config_entries.flow.async_configure(
|
result = await hass.config_entries.flow.async_configure(
|
||||||
result["flow_id"], user_input=TUYA_IMPORT_SMART_HOME_DATA
|
result["flow_id"], user_input=TUYA_IMPORT_SMART_HOME_DATA_BASE
|
||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
@ -155,7 +155,49 @@ async def test_smart_home_user(hass, tuya):
|
|||||||
assert result["data"][CONF_ACCESS_SECRET] == MOCK_ACCESS_SECRET
|
assert result["data"][CONF_ACCESS_SECRET] == MOCK_ACCESS_SECRET
|
||||||
assert result["data"][CONF_USERNAME] == MOCK_USERNAME
|
assert result["data"][CONF_USERNAME] == MOCK_USERNAME
|
||||||
assert result["data"][CONF_PASSWORD] == MOCK_PASSWORD
|
assert result["data"][CONF_PASSWORD] == MOCK_PASSWORD
|
||||||
assert result["data"][CONF_COUNTRY_CODE] == MOCK_COUNTRY_CODE
|
assert result["data"][CONF_COUNTRY_CODE] == MOCK_COUNTRY_CODE_BASE
|
||||||
|
assert result["data"][CONF_APP_TYPE] == MOCK_APP_TYPE
|
||||||
|
assert not result["result"].unique_id
|
||||||
|
|
||||||
|
|
||||||
|
async def test_smart_home_user_other(hass, tuya):
|
||||||
|
"""Test smart home user config other."""
|
||||||
|
result = await hass.config_entries.flow.async_init(
|
||||||
|
DOMAIN, context={"source": config_entries.SOURCE_USER}
|
||||||
|
)
|
||||||
|
|
||||||
|
assert result["type"] == data_entry_flow.RESULT_TYPE_FORM
|
||||||
|
assert result["step_id"] == "user"
|
||||||
|
|
||||||
|
result = await hass.config_entries.flow.async_configure(
|
||||||
|
result["flow_id"], user_input=TUYA_SMART_HOME_PROJECT_DATA
|
||||||
|
)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
assert result["type"] == data_entry_flow.RESULT_TYPE_FORM
|
||||||
|
assert result["step_id"] == "login"
|
||||||
|
|
||||||
|
tuya().login = MagicMock(return_value={"success": False, "errorCode": 1024})
|
||||||
|
result = await hass.config_entries.flow.async_configure(
|
||||||
|
result["flow_id"], user_input=TUYA_IMPORT_SMART_HOME_DATA_OTHER
|
||||||
|
)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
assert result["errors"]["base"] == RESULT_AUTH_FAILED
|
||||||
|
|
||||||
|
tuya().login = MagicMock(return_value={"success": True, "errorCode": 1024})
|
||||||
|
result = await hass.config_entries.flow.async_configure(
|
||||||
|
result["flow_id"], user_input=TUYA_IMPORT_SMART_HOME_DATA_OTHER
|
||||||
|
)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY
|
||||||
|
assert result["title"] == MOCK_USERNAME
|
||||||
|
assert result["data"][CONF_ACCESS_ID] == MOCK_ACCESS_ID
|
||||||
|
assert result["data"][CONF_ACCESS_SECRET] == MOCK_ACCESS_SECRET
|
||||||
|
assert result["data"][CONF_USERNAME] == MOCK_USERNAME
|
||||||
|
assert result["data"][CONF_PASSWORD] == MOCK_PASSWORD
|
||||||
|
assert result["data"][CONF_COUNTRY_CODE] == MOCK_COUNTRY_CODE_OTHER
|
||||||
assert result["data"][CONF_APP_TYPE] == MOCK_APP_TYPE
|
assert result["data"][CONF_APP_TYPE] == MOCK_APP_TYPE
|
||||||
assert not result["result"].unique_id
|
assert not result["result"].unique_id
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user