def test_basic_lti11_launch_request():
    """
    Does a standard launch request work?
    """
    oauth_consumer_key = 'my_consumer_key'
    oauth_consumer_secret = 'my_shared_secret'
    launch_url = 'http://jupyterhub/hub/lti/launch'
    headers = {'Content-Type': 'application/x-www-form-urlencoded'}

    args = factory_lti11_basic_launch_args(
        oauth_consumer_key,
        oauth_consumer_secret,
    )

    validator = LTI11LaunchValidator(
        {oauth_consumer_key: oauth_consumer_secret})

    assert validator.validate_launch_request(launch_url, headers, args)
def test_launch_with_same_oauth_nonce_different_oauth_timestamp():
    """
    Does the launch request pass with when using a different timestamp with the
    same nonce?
    """
    oauth_consumer_key = 'my_consumer_key'
    oauth_consumer_secret = 'my_shared_secret'
    launch_url = 'http://jupyterhub/hub/lti/launch'
    headers = {'Content-Type': 'application/x-www-form-urlencoded'}

    args = factory_lti11_basic_launch_args(oauth_consumer_key,
                                           oauth_consumer_secret)

    validator = LTI11LaunchValidator(
        {oauth_consumer_key: oauth_consumer_secret})

    with pytest.raises(HTTPError):
        args['oauth_timestamp'] = '0123456789'
        validator.validate_launch_request(launch_url, headers, args)
def test_unregistered_shared_secret():
    """
    Does the launch request work with a shared secret that does not match?
    """
    oauth_consumer_key = 'my_consumer_key'
    oauth_consumer_secret = 'my_shared_secret'
    launch_url = 'http://jupyterhub/hub/lti/launch'
    headers = {'Content-Type': 'application/x-www-form-urlencoded'}

    args = factory_lti11_basic_launch_args(
        oauth_consumer_key,
        oauth_consumer_secret,
    )

    validator = LTI11LaunchValidator(
        {oauth_consumer_key: 'my_other_shared_secret'})

    with pytest.raises(HTTPError):
        validator.validate_launch_request(launch_url, headers, args)
def test_launch_with_missing_oauth_signature_method_key():
    """
    Does the launch request work with a missing oauth_signature_method key?
    """
    oauth_consumer_key = 'my_consumer_key'
    oauth_consumer_secret = 'my_shared_secret'
    launch_url = 'http://jupyterhub/hub/lti/launch'
    headers = {'Content-Type': 'application/x-www-form-urlencoded'}

    args = factory_lti11_basic_launch_args(oauth_consumer_key,
                                           oauth_consumer_secret)

    del args['oauth_signature_method']

    validator = LTI11LaunchValidator(
        {oauth_consumer_key: oauth_consumer_secret})

    with pytest.raises(HTTPError):
        validator.validate_launch_request(launch_url, headers, args)
def test_launch_with_fake_oauth_consumer_key_value():
    """
    Does the launch request work when the consumer_key isn't correct?
    """
    oauth_consumer_key = 'my_consumer_key'
    oauth_consumer_secret = 'my_shared_secret'
    launch_url = 'http://jupyterhub/hub/lti/launch'
    headers = {'Content-Type': 'application/x-www-form-urlencoded'}

    args = factory_lti11_basic_launch_args(
        oauth_consumer_key,
        oauth_consumer_secret,
    )

    validator = LTI11LaunchValidator(
        {oauth_consumer_key: oauth_consumer_secret})

    with pytest.raises(HTTPError):
        args['oauth_consumer_key'] = [b'fake_consumer_key'][0].decode('utf-8')
        assert validator.validate_launch_request(launch_url, headers, args)
def test_launch_with_none_or_empty_user_id_value():
    """
    Does the launch request work with an empty or None user_id value?
    """
    oauth_consumer_key = 'my_consumer_key'
    oauth_consumer_secret = 'my_shared_secret'
    launch_url = 'http://jupyterhub/hub/lti/launch'
    headers = {'Content-Type': 'application/x-www-form-urlencoded'}

    args = factory_lti11_basic_launch_args(
        oauth_consumer_key,
        oauth_consumer_secret,
    )

    validator = LTI11LaunchValidator(
        {oauth_consumer_key: oauth_consumer_secret})

    with pytest.raises(HTTPError):
        args['user_id'] = None
        validator.validate_launch_request(launch_url, headers, args)

    with pytest.raises(HTTPError):
        args['user_id'] = ''
        validator.validate_launch_request(launch_url, headers, args)