Coverage for tests/routes/test_auth_route.py: 100%
102 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-05-02 02:49 +0000
« prev ^ index » next coverage.py v7.6.12, created at 2025-05-02 02:49 +0000
1import pytest
2from unittest.mock import patch, MagicMock
3from app.models.response import success_response, error_response
4from app.models.status_codes import StatusCodes
6def test_login_page(client):
7 response = client.get('/login')
8 assert response.status_code == 200
11def test_login_route_email_success(client):
12 mock_login = MagicMock()
13 mock_login.user.id = "123"
14 mock_login.session.access_token = "123456"
15 mock_login.session.refresh_token = "abcdef"
17 with patch('app.routes.auth.login_with_email', return_value = mock_login):
18 response = client.post(
19 '/auth/login?provider=email',
20 json={
21 "email": "test@test.com",
22 "password": "testpassword"
23 }
24 )
25 assert response.status_code == 200
26 data = response.get_json()
27 assert data["data"]["token"] == "123"
28 assert data["data"]["access_token"] == "123456"
29 assert data["data"]["refresh_token"] == "abcdef"
32def test_login_route_email_missing_fields(client):
33 mock_login = MagicMock()
34 mock_login.user.id = "123"
35 mock_login.session.access_token = "123456"
36 mock_login.session.refresh_token = "abcdef"
38 with patch('app.routes.auth.login_with_email', return_value = mock_login):
39 response = client.post(
40 '/auth/login?provider=email',
41 json={
42 "email": "test@test.com",
43 }
44 )
45 assert response.status_code == 400
46 data = response.get_json()
47 assert data["message"] == "Email or password not provided"
48 assert data["data"] is None
51def test_login_route_github_success(client):
52 mock_login = MagicMock()
53 mock_login.url = "http://example.com"
55 with patch('app.routes.auth.login_with_provider', return_value = mock_login):
56 response = client.get('/auth/login?provider=github')
57 assert response.status_code == 302
58 assert response.headers['Location'] == "http://example.com"
61def test_login_route_github_missing_provider(client):
62 response = client.get('/auth/login')
63 assert response.status_code == 400
64 data = response.get_json()
65 assert data["message"] == "Provider not provided. Ex github"
66 assert data["data"] is None
69def test_auth_complete(client):
70 response = client.get('/auth/complete')
71 assert response.status_code == 200
72 assert b"<p>Signed in successfully!</p>" in response.data
75def test_auth_callback(client):
76 mock_auth = MagicMock()
77 mock_auth.user.id = "123"
78 mock_auth.session.access_token = "123456"
79 mock_auth.session.refresh_token = "abcdef"
81 with patch('app.routes.auth.callback', return_value = mock_auth):
82 response = client.get('/auth/callback?code=123456')
83 assert response.status_code == 302
84 assert response.headers['Location'] == f"/auth/complete?id={mock_auth.user.id}&access_token={mock_auth.session.access_token}&refresh_token={mock_auth.session.refresh_token}"
86def test_auth_callback_missing_code(client):
87 response = client.get('/auth/callback')
88 assert response.status_code == 400
89 data = response.get_json()
90 assert data["message"] == "Error: Missing authorization code"
91 assert data["data"] is None
93def test_auth_callback_next_url(client):
94 mock_auth = MagicMock()
95 mock_auth.user.id = "123"
96 mock_auth.session.access_token = "123456"
97 mock_auth.session.refresh_token = "abcdef"
99 with client.session_transaction() as sess:
100 sess["next_url"] = "/clover"
102 with patch('app.routes.auth.callback', return_value=mock_auth):
103 response = client.get('/auth/callback?code=123456')
105 assert response.status_code == 302
106 assert response.headers['Location'] == (
107 f"/clover?id=123&access_token=123456&refresh_token=abcdef"
108 )
110def test_auth_signup_success(client):
111 mock_signup = MagicMock()
112 mock_signup.user.id = "123"
114 with patch('app.routes.auth.signup_with_email', return_value=mock_signup):
115 response = client.post('/auth/signup', json={
116 "email": "test@test.com",
117 "password": "testpassword",
118 "first_name": "John",
119 "last_name": "Doe"
120 }
121 )
122 assert response.status_code == 200
123 data = response.get_json()
124 assert data["message"] == "Signup successful"
125 assert data["data"]["token"] == "123"
127def test_auth_signup_missing_fields(client):
128 response = client.post('/auth/signup', json={
129 "email": "",
130 "password": "testpassword"
131 }
132 )
134 assert response.status_code == 400
135 data = response.get_json()
136 assert data["message"] == "Email or password not provided"
137 assert data["data"] is None
139def test_auth_signout_success(client, app):
140 with app.app_context():
141 with patch('app.routes.auth.signout', return_value=success_response(
142 "Signout successful",
143 None,
144 StatusCodes.OK
145 )):
146 response = client.post('/auth/signout', json={
147 "user_id": "123"
148 })
150 assert response.status_code == 200
151 data = response.get_json()
152 assert data["message"] == "Signout successful"
153 assert data["data"] is None
155def test_auth_signout_missing_user_id(client):
156 response = client.post('/auth/signout', json={})
157 assert response.status_code == 400
158 data = response.get_json()
159 assert data["message"] == "User ID not provided"
160 assert data["data"] is None