import json import pytest from httmock import urlmatch, HTTMock from oauth.oidc import OIDC_WELLKNOWN from util.config.validators import ConfigValidationException from util.config.validators.validate_oidc import OIDCLoginValidator @pytest.mark.parametrize('unvalidated_config', [ ({'SOMETHING_LOGIN_CONFIG': {}}), ({'SOMETHING_LOGIN_CONFIG': {'OIDC_SERVER': 'foo'}}), ({'SOMETHING_LOGIN_CONFIG': {'OIDC_SERVER': 'foo', 'CLIENT_ID': 'foobar'}}), ({'SOMETHING_LOGIN_CONFIG': {'OIDC_SERVER': 'foo', 'CLIENT_SECRET': 'foobar'}}), ]) def test_validate_invalid_oidc_login_config(unvalidated_config): validator = OIDCLoginValidator() with pytest.raises(ConfigValidationException): validator.validate(unvalidated_config, None, None) def test_validate_oidc_login(): url_hit = [False] @urlmatch(netloc=r'someserver', path=r'/\.well-known/openid-configuration') def handler(_, __): url_hit[0] = True data = { 'userinfo_endpoint': 'foobar', } return {'status_code': 200, 'content': json.dumps(data)} with HTTMock(handler): validator = OIDCLoginValidator() validator.validate({ 'SOMETHING_LOGIN_CONFIG': { 'CLIENT_ID': 'foo', 'CLIENT_SECRET': 'bar', 'OIDC_SERVER': 'http://someserver', 'DEBUGGING': True, # Allows for HTTP. }, }, None, None) assert url_hit[0]