Example #1
0
async def test_auth_callback_view_get(hass: HomeAssistantType):
    """Test get api path."""
    view = WithingsAuthCallbackView()
    hass.config_entries.flow.async_configure = CoroutineMock(return_value="AAAA")

    request = MagicMock(spec=BaseRequest)
    request.app = {"hass": hass}

    # No args
    request.query = {}
    response = await view.get(request)
    assert response.status == 400
    hass.config_entries.flow.async_configure.assert_not_called()
    hass.config_entries.flow.async_configure.reset_mock()

    # Checking flow_id
    request.query = {"flow_id": "my_flow_id"}
    response = await view.get(request)
    assert response.status == 400
    hass.config_entries.flow.async_configure.assert_not_called()
    hass.config_entries.flow.async_configure.reset_mock()

    # Checking flow_id and profile
    request.query = {"flow_id": "my_flow_id", "profile": "my_profile"}
    response = await view.get(request)
    assert response.status == 400
    hass.config_entries.flow.async_configure.assert_not_called()
    hass.config_entries.flow.async_configure.reset_mock()

    # Checking flow_id, profile, code
    request.query = {
        "flow_id": "my_flow_id",
        "profile": "my_profile",
        "code": "my_code",
    }
    response = await view.get(request)
    assert response.status == 200
    hass.config_entries.flow.async_configure.assert_called_with(
        "my_flow_id", {const.PROFILE: "my_profile", const.CODE: "my_code"}
    )
    hass.config_entries.flow.async_configure.reset_mock()

    # Exception thrown
    hass.config_entries.flow.async_configure = CoroutineMock(
        side_effect=data_entry_flow.UnknownFlow()
    )
    request.query = {
        "flow_id": "my_flow_id",
        "profile": "my_profile",
        "code": "my_code",
    }
    response = await view.get(request)
    assert response.status == 400
    hass.config_entries.flow.async_configure.assert_called_with(
        "my_flow_id", {const.PROFILE: "my_profile", const.CODE: "my_code"}
    )
    hass.config_entries.flow.async_configure.reset_mock()