mirror of
https://github.com/home-assistant/core.git
synced 2025-04-23 00:37:53 +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_AUTH_FAILED = "invalid_auth"
|
||||
TUYA_ENDPOINT_BASE = "https://openapi.tuyacn.com"
|
||||
TUYA_ENDPOINT_OTHER = "https://openapi.tuyaus.com"
|
||||
COUNTRY_CODE_CHINA = ["86", "+86", "China"]
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
@ -82,7 +84,11 @@ class TuyaConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
|
||||
if project_type == ProjectType.INDUSTY_SOLUTIONS:
|
||||
response = api.login(user_input[CONF_USERNAME], user_input[CONF_PASSWORD])
|
||||
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(
|
||||
user_input[CONF_USERNAME],
|
||||
user_input[CONF_PASSWORD],
|
||||
|
@ -24,7 +24,8 @@ MOCK_ACCESS_ID = "myAccessId"
|
||||
MOCK_ACCESS_SECRET = "myAccessSecret"
|
||||
MOCK_USERNAME = "myUsername"
|
||||
MOCK_PASSWORD = "myPassword"
|
||||
MOCK_COUNTRY_CODE = "1"
|
||||
MOCK_COUNTRY_CODE_BASE = "86"
|
||||
MOCK_COUNTRY_CODE_OTHER = "1"
|
||||
MOCK_APP_TYPE = "smartlife"
|
||||
MOCK_ENDPOINT = "https://openapi-ueaz.tuyaus.com"
|
||||
|
||||
@ -35,15 +36,6 @@ TUYA_INDUSTRY_PROJECT_DATA = {
|
||||
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 = {
|
||||
CONF_ENDPOINT: MOCK_ENDPOINT,
|
||||
CONF_ACCESS_ID: MOCK_ACCESS_ID,
|
||||
@ -52,15 +44,23 @@ TUYA_INPUT_INDUSTRY_DATA = {
|
||||
CONF_PASSWORD: MOCK_PASSWORD,
|
||||
}
|
||||
|
||||
TUYA_IMPORT_SMART_HOME_DATA = {
|
||||
TUYA_IMPORT_SMART_HOME_DATA_BASE = {
|
||||
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_COUNTRY_CODE: MOCK_COUNTRY_CODE_BASE,
|
||||
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 = {
|
||||
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
|
||||
|
||||
|
||||
async def test_smart_home_user(hass, tuya):
|
||||
"""Test smart home user config."""
|
||||
async def test_smart_home_user_base(hass, tuya):
|
||||
"""Test smart home user config base."""
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
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})
|
||||
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()
|
||||
|
||||
@ -145,7 +145,7 @@ async def test_smart_home_user(hass, tuya):
|
||||
|
||||
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
|
||||
result["flow_id"], user_input=TUYA_IMPORT_SMART_HOME_DATA_BASE
|
||||
)
|
||||
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_USERNAME] == MOCK_USERNAME
|
||||
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 not result["result"].unique_id
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user