Skip to content

Commit e06fa14

Browse files
Passing unit tests for auth.py
1 parent 138c515 commit e06fa14

File tree

4 files changed

+46
-42
lines changed

4 files changed

+46
-42
lines changed

tests/test_authentication.py renamed to tests/test_account.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from html import unescape
1010

1111
from main import app
12-
from utils.models import User, PasswordResetToken, UserPassword, EmailUpdateToken
12+
from utils.models import User, PasswordResetToken, EmailUpdateToken, Account
1313
from utils.auth import (
1414
create_access_token,
1515
verify_password,
@@ -299,7 +299,7 @@ def test_request_email_update_already_registered(auth_client: TestClient, sessio
299299
existing_user = User(
300300
name="Existing User",
301301
email=existing_email,
302-
password=UserPassword(hashed_password=get_password_hash("Test123!@#"))
302+
password=Account(hashed_password=get_password_hash("Test123!@#"))
303303
)
304304
session.add(existing_user)
305305
session.commit()

tests/test_auth.py

Lines changed: 10 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import re
22
import string
33
import random
4-
from datetime import timedelta, UTC, datetime
4+
from datetime import timedelta
55
from urllib.parse import urlparse, parse_qs
66
from starlette.datastructures import URLPath
77
from main import app
@@ -15,11 +15,10 @@
1515
COMPILED_PASSWORD_PATTERN,
1616
convert_python_regex_to_html,
1717
generate_email_update_url,
18-
send_email_update_confirmation,
19-
get_user_from_email_update_token
18+
send_email_update_confirmation
2019
)
2120
from unittest.mock import patch, MagicMock
22-
from utils.models import User, EmailUpdateToken
21+
from utils.models import Account, EmailUpdateToken
2322

2423

2524
def test_convert_python_regex_to_html() -> None:
@@ -157,11 +156,11 @@ def test_email_update_url_generation() -> None:
157156
Tests that the email update confirmation URL is correctly formatted and contains
158157
the required query parameters.
159158
"""
160-
test_user_id = 123
159+
test_account_id = 123
161160
test_token = "abc123"
162161
test_new_email = "[email protected]"
163162

164-
url = generate_email_update_url(test_user_id, test_token, test_new_email)
163+
url = generate_email_update_url(test_account_id, test_token, test_new_email)
165164

166165
# Parse the URL
167166
parsed = urlparse(url)
@@ -174,10 +173,10 @@ def test_email_update_url_generation() -> None:
174173
assert parsed.path == str(confirm_email_path)
175174

176175
# Verify query parameters
177-
assert "user_id" in query_params
176+
assert "account_id" in query_params
178177
assert "token" in query_params
179178
assert "new_email" in query_params
180-
assert query_params["user_id"][0] == str(test_user_id)
179+
assert query_params["account_id"][0] == str(test_account_id)
181180
assert query_params["token"][0] == test_token
182181
assert query_params["new_email"][0] == test_new_email
183182

@@ -192,13 +191,13 @@ def test_send_email_update_confirmation(mock_send: MagicMock) -> None:
192191

193192
current_email = "[email protected]"
194193
new_email = "[email protected]"
195-
user_id = 123
194+
account_id = 123
196195

197196
# Mock successful email send
198197
mock_send.return_value = {"id": "test_email_id"}
199198

200199
# Test successful email sending
201-
send_email_update_confirmation(current_email, new_email, user_id, session)
200+
send_email_update_confirmation(current_email, new_email, account_id, session)
202201

203202
# Verify session interactions
204203
assert session.add.called
@@ -216,35 +215,9 @@ def test_send_email_update_confirmation(mock_send: MagicMock) -> None:
216215
session.reset_mock()
217216
session.exec.return_value.first.return_value = EmailUpdateToken() # Existing token
218217

219-
send_email_update_confirmation(current_email, new_email, user_id, session)
218+
send_email_update_confirmation(current_email, new_email, account_id, session)
220219

221220
# Verify no new token was created or email sent
222221
assert not session.add.called
223222
assert not session.commit.called
224223
assert mock_send.call_count == 1 # Still just one call from before
225-
226-
def test_get_user_from_email_update_token() -> None:
227-
"""
228-
Tests retrieving a user using an email update token.
229-
"""
230-
session = MagicMock()
231-
232-
# Test valid token
233-
mock_user = User(id=1, email="[email protected]")
234-
mock_token = EmailUpdateToken(
235-
user_id=1,
236-
token="valid_token",
237-
expires_at=datetime.now(UTC) + timedelta(hours=1),
238-
used=False
239-
)
240-
session.exec.return_value.first.return_value = (mock_user, mock_token)
241-
242-
user, token = get_user_from_email_update_token(1, "valid_token", session)
243-
assert user == mock_user
244-
assert token == mock_token
245-
246-
# Test invalid token
247-
session.exec.return_value.first.return_value = None
248-
user, token = get_user_from_email_update_token(1, "invalid_token", session)
249-
assert user is None
250-
assert token is None

tests/test_dependencies.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
from unittest.mock import MagicMock
2+
from datetime import datetime, timedelta, UTC
3+
from utils.models import EmailUpdateToken, User
4+
from utils.dependencies import get_user_from_email_update_token
5+
6+
7+
def test_get_user_from_email_update_token() -> None:
8+
"""
9+
Tests retrieving a user using an email update token.
10+
"""
11+
session = MagicMock()
12+
13+
# Test valid token
14+
mock_user = User(id=1, email="[email protected]")
15+
mock_token = EmailUpdateToken(
16+
user_id=1,
17+
token="valid_token",
18+
expires_at=datetime.now(UTC) + timedelta(hours=1),
19+
used=False
20+
)
21+
session.exec.return_value.first.return_value = (mock_user, mock_token)
22+
23+
user, token = get_user_from_email_update_token(1, "valid_token", session)
24+
assert user == mock_user
25+
assert token == mock_token
26+
27+
# Test invalid token
28+
session.exec.return_value.first.return_value = None
29+
user, token = get_user_from_email_update_token(1, "invalid_token", session)
30+
assert user is None
31+
assert token is None

utils/auth.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from jinja2.environment import Template
1515
from fastapi.templating import Jinja2Templates
1616
from fastapi import Cookie
17-
from utils.models import User, PasswordResetToken, EmailUpdateToken, Account
17+
from utils.models import PasswordResetToken, EmailUpdateToken, Account
1818
from exceptions.http_exceptions import PasswordValidationError, PasswordMismatchError
1919

2020
load_dotenv()
@@ -220,7 +220,7 @@ def generate_password_reset_url(email: str, token: str) -> str:
220220
Complete password reset URL
221221
"""
222222
base_url = os.getenv('BASE_URL')
223-
return f"{base_url}/auth/reset_password?email={email}&token={token}"
223+
return f"{base_url}/account/reset_password?email={email}&token={token}"
224224

225225

226226
def send_reset_email(email: str, session: Session) -> None:
@@ -280,7 +280,7 @@ def generate_email_update_url(account_id: int, token: str, new_email: str) -> st
280280
Generates the email update confirmation URL with proper query parameters.
281281
"""
282282
base_url = os.getenv('BASE_URL')
283-
return f"{base_url}/auth/confirm_email_update?account_id={account_id}&token={token}&new_email={new_email}"
283+
return f"{base_url}/account/confirm_email_update?account_id={account_id}&token={token}&new_email={new_email}"
284284

285285

286286
def send_email_update_confirmation(

0 commit comments

Comments
 (0)