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
« prev ^ index » next coverage.py v7.6.9, created at 2024-12-23 11:16 -0600
1from tests.providers.github import GitHubOAuthProvider
3from plain.oauth.providers import OAuthToken, OAuthUser
6class DummyGitHubOAuthProvider(GitHubOAuthProvider):
7 def generate_state(self) -> str:
8 return "dummy_state"
10 def get_oauth_token(self, code, request):
11 return OAuthToken(access_token="gho_key")
13 def get_oauth_user(self, oauth_token):
14 return OAuthUser(
15 id="99",
16 username="userone",
17 email="user@example.com",
18 )
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 }
33 # Login required for this view
34 response = client.get("/")
35 assert response.status_code == 302
36 assert response.url == "/login/?next=/"
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 )
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 == "/"
51 # Now logged in
52 response = client.get("/")
53 assert response.status_code == 200
54 assert b"Hello userone!\n" in response.content
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