Esempio n. 1
0
async def test_config_flow_single_account(
    hass: HomeAssistant, mock_setup_entry: AsyncMock
):
    """Test we get the form."""
    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["errors"] == {}

    # Failed credentials
    with patch(
        "renault_api.renault_session.RenaultSession.login",
        side_effect=InvalidCredentialsException(403042, "invalid loginID or password"),
    ):
        result = await hass.config_entries.flow.async_configure(
            result["flow_id"],
            user_input={
                CONF_LOCALE: "fr_FR",
                CONF_USERNAME: "******",
                CONF_PASSWORD: "******",
            },
        )

    assert result["type"] == data_entry_flow.RESULT_TYPE_FORM
    assert result["errors"] == {"base": "invalid_credentials"}

    renault_account = AsyncMock()
    type(renault_account).account_id = PropertyMock(return_value="account_id_1")
    renault_account.get_vehicles.return_value = (
        schemas.KamereonVehiclesResponseSchema.loads(
            load_fixture("renault/vehicle_zoe_40.json")
        )
    )

    # Account list single
    with patch("renault_api.renault_session.RenaultSession.login"), patch(
        "renault_api.renault_account.RenaultAccount.account_id", return_value="123"
    ), patch(
        "renault_api.renault_client.RenaultClient.get_api_accounts",
        return_value=[renault_account],
    ):
        result = await hass.config_entries.flow.async_configure(
            result["flow_id"],
            user_input={
                CONF_LOCALE: "fr_FR",
                CONF_USERNAME: "******",
                CONF_PASSWORD: "******",
            },
        )

    assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY
    assert result["title"] == "account_id_1"
    assert result["data"][CONF_USERNAME] == "*****@*****.**"
    assert result["data"][CONF_PASSWORD] == "test"
    assert result["data"][CONF_KAMEREON_ACCOUNT_ID] == "account_id_1"
    assert result["data"][CONF_LOCALE] == "fr_FR"

    assert len(mock_setup_entry.mock_calls) == 1
Esempio n. 2
0
async def test_reauth(hass):
    """Test the start of the config flow."""
    with patch(
            "homeassistant.components.renault.async_setup_entry",
            return_value=True,
    ):
        original_entry = get_mock_config_entry()
        original_entry.add_to_hass(hass)
        assert len(hass.config_entries.async_entries(DOMAIN)) == 1

        result = await hass.config_entries.flow.async_init(
            DOMAIN,
            context={
                "source": config_entries.SOURCE_REAUTH,
                "entry_id": original_entry.entry_id,
                "unique_id": original_entry.unique_id,
            },
            data=MOCK_CONFIG,
        )

        assert result["type"] == data_entry_flow.RESULT_TYPE_FORM
        assert result["description_placeholders"] == {
            CONF_USERNAME: "******"
        }
        assert result["errors"] == {}

        # Failed credentials
        with patch(
                "renault_api.renault_session.RenaultSession.login",
                side_effect=InvalidCredentialsException(
                    403042, "invalid loginID or password"),
        ):
            result2 = await hass.config_entries.flow.async_configure(
                result["flow_id"],
                user_input={CONF_PASSWORD: "******"},
            )

        assert result2["type"] == data_entry_flow.RESULT_TYPE_FORM
        assert result2["description_placeholders"] == {
            CONF_USERNAME: "******"
        }
        assert result2["errors"] == {"base": "invalid_credentials"}

        # Valid credentials
        with patch("renault_api.renault_session.RenaultSession.login"):
            result3 = await hass.config_entries.flow.async_configure(
                result["flow_id"],
                user_input={CONF_PASSWORD: "******"},
            )

        assert result3["type"] == data_entry_flow.RESULT_TYPE_ABORT
        assert result3["reason"] == "reauth_successful"
Esempio n. 3
0
async def test_setup_entry_bad_password(hass: HomeAssistant,
                                        config_entry: ConfigEntry):
    """Test entry setup and unload."""
    # Create a mock entry so we don't have to go through config flow
    with patch(
            "renault_api.renault_session.RenaultSession.login",
            side_effect=InvalidCredentialsException(
                403042, "invalid loginID or password"),
    ):
        await hass.config_entries.async_setup(config_entry.entry_id)
        await hass.async_block_till_done()

    assert len(hass.config_entries.async_entries(DOMAIN)) == 1
    assert config_entry.state is ConfigEntryState.SETUP_ERROR
    assert not hass.data.get(DOMAIN)
Esempio n. 4
0
async def test_setup_entry_bad_password(hass):
    """Test entry setup and unload."""
    # Create a mock entry so we don't have to go through config flow
    config_entry = MockConfigEntry(domain=DOMAIN,
                                   data=MOCK_CONFIG,
                                   entry_id="test",
                                   unique_id=123456)

    with patch(
            "renault_api.renault_session.RenaultSession.login",
            side_effect=InvalidCredentialsException(
                403042, "invalid loginID or password"),
    ):
        # Set up the entry and assert that the values set during setup are where we expect
        # them to be.
        assert not await async_setup_entry(hass, config_entry)
Esempio n. 5
0
async def test_reauth(hass: HomeAssistant, config_entry: ConfigEntry):
    """Test the start of the config flow."""
    assert len(hass.config_entries.async_entries(DOMAIN)) == 1

    result = await hass.config_entries.flow.async_init(
        DOMAIN,
        context={
            "source": config_entries.SOURCE_REAUTH,
            "entry_id": config_entry.entry_id,
            "unique_id": config_entry.unique_id,
        },
        data=MOCK_CONFIG,
    )

    assert result["type"] == data_entry_flow.FlowResultType.FORM
    assert result["description_placeholders"] == {
        CONF_USERNAME: "******"
    }
    assert result["errors"] == {}

    # Failed credentials
    with patch(
            "renault_api.renault_session.RenaultSession.login",
            side_effect=InvalidCredentialsException(
                403042, "invalid loginID or password"),
    ):
        result2 = await hass.config_entries.flow.async_configure(
            result["flow_id"],
            user_input={CONF_PASSWORD: "******"},
        )

    assert result2["type"] == data_entry_flow.FlowResultType.FORM
    assert result2["description_placeholders"] == {
        CONF_USERNAME: "******"
    }
    assert result2["errors"] == {"base": "invalid_credentials"}

    # Valid credentials
    with patch("renault_api.renault_session.RenaultSession.login"):
        result3 = await hass.config_entries.flow.async_configure(
            result["flow_id"],
            user_input={CONF_PASSWORD: "******"},
        )

    assert result3["type"] == data_entry_flow.FlowResultType.ABORT
    assert result3["reason"] == "reauth_successful"