Coverage for provider_tests/test_github.py: 100%

33 statements  

« prev     ^ index     » next       coverage.py v7.6.9, created at 2024-12-23 11:16 -0600

1from tests.providers.github import GitHubOAuthProvider 

2 

3from plain.oauth.providers import OAuthToken, OAuthUser 

4 

5 

6class DummyGitHubOAuthProvider(GitHubOAuthProvider): 

7 def generate_state(self) -> str: 

8 return "dummy_state" 

9 

10 def get_oauth_token(self, code, request): 

11 return OAuthToken(access_token="gho_key") 

12 

13 def get_oauth_user(self, oauth_token): 

14 return OAuthUser( 

15 id="99", 

16 username="userone", 

17 email="user@example.com", 

18 ) 

19 

20 

21def test_github_provider(db, client, settings): 

22 settings.OAUTH_LOGIN_PROVIDERS = { 

23 "github": { 

24 "class": "provider_tests.test_github.DummyGitHubOAuthProvider", 

25 "kwargs": { 

26 "client_id": "test_id", 

27 "client_secret": "test_secret", 

28 "scope": "user", 

29 }, 

30 } 

31 } 

32 

33 # Login required for this view 

34 response = client.get("/") 

35 assert response.status_code == 302 

36 assert response.url == "/login/?next=/" 

37 

38 # User clicks the login link (form submit) 

39 response = client.post("/oauth/github/login/") 

40 assert response.status_code == 302 

41 assert ( 

42 response.url 

43 == "https://github.com/login/oauth/authorize?client_id=test_id&redirect_uri=https%3A%2F%2Ftestserver%2Foauth%2Fgithub%2Fcallback%2F&response_type=code&scope=user&state=dummy_state" 

44 ) 

45 

46 # GitHub redirects to the callback url 

47 response = client.get("/oauth/github/callback/?code=test_code&state=dummy_state") 

48 assert response.status_code == 302 

49 assert response.url == "/" 

50 

51 # Now logged in 

52 response = client.get("/") 

53 assert response.status_code == 200 

54 assert b"Hello userone!\n" in response.content 

55 

56 # Check the user and connection that was created 

57 user = response.user 

58 assert user.username == "userone" 

59 assert user.email == "user@example.com" 

60 connections = user.oauth_connections.all() 

61 assert len(connections) == 1 

62 assert connections[0].provider_key == "github" 

63 assert connections[0].provider_user_id == "99" 

64 assert connections[0].access_token == "gho_key" 

65 assert connections[0].refresh_token == "" 

66 assert connections[0].access_token_expires_at is None