Coverage for tests/main_test.py: 94%

30 statements  

« prev     ^ index     » next       coverage.py v7.6.10, created at 2025-01-09 16:45 +0100

1from urllib.parse import urlsplit 

2 

3import flask 

4import flask.testing 

5import oidc_client 

6import pytest 

7import requests 

8 

9import oidc_provider_mock 

10 

11 

12@pytest.fixture 

13def app(): 

14 app = flask.Flask(__name__) 

15 

16 state = oidc_provider_mock.State() 

17 app.register_blueprint(oidc_provider_mock.blueprint, state=state) 

18 

19 return app 

20 

21 

22def test_auth_success(wsgi_server: str): 

23 """ 

24 Authorization Code flow success with userinfo 

25 """ 

26 

27 openid_config = oidc_client.ProviderConfiguration.fetch(wsgi_server) 

28 authorization_request = oidc_client.start_authorization( 

29 openid_config, 

30 redirect_uri="https://example.com/auth-response", 

31 client_id="CLIENT_ID", 

32 ) 

33 

34 response = requests.post( 

35 authorization_request.url, 

36 data={ 

37 "sub": "SUB", 

38 }, 

39 allow_redirects=False, 

40 ) 

41 

42 assert response.status_code == 302 

43 location = urlsplit(response.headers["location"]) 

44 assert location.geturl().startswith("https://example.com/auth-response?") 

45 

46 authn_result = oidc_client.authenticate( 

47 openid_config, authorization_request, location.query 

48 ) 

49 assert authn_result.claims["sub"] == "SUB" 

50 

51 assert openid_config.userinfo_endpoint 

52 response = requests.get( 

53 openid_config.userinfo_endpoint, 

54 headers={"authorization": f"Bearer {authn_result.access_token}"}, 

55 ) 

56 response.raise_for_status() 

57 assert response.json() == { 

58 "sub": "SUB", 

59 "email": "SUB", 

60 } 

61 

62 

63@pytest.mark.skip 

64def test_invalid_nonce(): ... 64 ↛ exitline 64 didn't return from function 'test_invalid_nonce' because

65 

66 

67@pytest.mark.skip 

68def test_custom_claims(): ... 68 ↛ exitline 68 didn't return from function 'test_custom_claims' because