Unit testing AuthService
This commit is contained in:
87
tests/persistence/test_sql_token.py
Normal file
87
tests/persistence/test_sql_token.py
Normal file
@@ -0,0 +1,87 @@
|
||||
# tests/persistence/test_sqlite_token.py
|
||||
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from my_auth.models.token import TokenData
|
||||
from my_auth.persistence.sqlite import SQLiteTokenRepository
|
||||
|
||||
|
||||
def test_i_can_save_and_retrieve_token(token_repository: SQLiteTokenRepository,
|
||||
test_token_data: TokenData):
|
||||
"""Verifies token saving and successful retrieval by token string and type."""
|
||||
|
||||
# 1. Save Token
|
||||
token_repository.save_token(test_token_data)
|
||||
|
||||
# 2. Retrieve Token
|
||||
retrieved_token = token_repository.get_token(test_token_data.token, test_token_data.token_type)
|
||||
|
||||
# Assertions
|
||||
assert retrieved_token is not None
|
||||
assert retrieved_token.token == test_token_data.token
|
||||
assert retrieved_token.user_id == test_token_data.user_id
|
||||
assert retrieved_token.is_revoked is False
|
||||
assert retrieved_token.token_type == test_token_data.token_type
|
||||
|
||||
|
||||
def test_i_can_revoke_token(token_repository: SQLiteTokenRepository,
|
||||
test_token_data: TokenData):
|
||||
"""Verifies a token can be revoked and its revoked status is updated."""
|
||||
|
||||
# Setup: Save the token
|
||||
token_repository.save_token(test_token_data)
|
||||
|
||||
# 1. Revoke the token
|
||||
was_revoked = token_repository.revoke_token(test_token_data.token)
|
||||
assert was_revoked is True
|
||||
|
||||
# 2. Retrieve and check status
|
||||
revoked_token = token_repository.get_token(test_token_data.token, test_token_data.token_type)
|
||||
assert revoked_token is not None
|
||||
assert revoked_token.is_revoked is True
|
||||
|
||||
# 3. Attempt to revoke a non-existent token
|
||||
was_revoked_again = token_repository.revoke_token("non_existent_token")
|
||||
assert was_revoked_again is False
|
||||
|
||||
|
||||
def test_i_can_use_is_token_valid_for_valid_token(token_repository: SQLiteTokenRepository,
|
||||
test_token_data: TokenData):
|
||||
"""Verifies the convenience method returns True for a fresh, unexpired token."""
|
||||
|
||||
token_repository.save_token(test_token_data)
|
||||
|
||||
is_valid = token_repository.is_token_valid(test_token_data.token, test_token_data.token_type)
|
||||
assert is_valid is True
|
||||
|
||||
is_valid = token_repository.is_token_valid("non_existent_token", test_token_data.token_type)
|
||||
assert is_valid is False
|
||||
|
||||
|
||||
def test_i_can_use_is_token_valid_for_revoked_token(token_repository: SQLiteTokenRepository,
|
||||
test_token_data: TokenData):
|
||||
"""Verifies is_token_valid returns False for a token marked as revoked."""
|
||||
|
||||
token_repository.save_token(test_token_data)
|
||||
token_repository.revoke_token(test_token_data.token)
|
||||
|
||||
is_valid = token_repository.is_token_valid(test_token_data.token, test_token_data.token_type)
|
||||
assert is_valid is False
|
||||
|
||||
|
||||
def test_i_can_use_is_token_valid_for_expired_token(token_repository: SQLiteTokenRepository):
|
||||
"""Verifies is_token_valid returns False for a token whose expiration is in the past."""
|
||||
|
||||
expired_token_data = TokenData(
|
||||
token="expired_token_test",
|
||||
token_type="password_reset",
|
||||
user_id="user_id_expired",
|
||||
expires_at=datetime.now() - timedelta(hours=1), # Set expiration to 1 hour ago
|
||||
is_revoked=False,
|
||||
created_at=datetime.now() - timedelta(hours=2)
|
||||
)
|
||||
|
||||
token_repository.save_token(expired_token_data)
|
||||
|
||||
is_valid = token_repository.is_token_valid(expired_token_data.token, expired_token_data.token_type)
|
||||
assert is_valid is False
|
||||
Reference in New Issue
Block a user