81 lines
3.3 KiB
Python
81 lines
3.3 KiB
Python
"""Tests for AuthService."""
|
|
|
|
from unittest.mock import Mock, patch
|
|
|
|
from app.services.auth_service import AuthService
|
|
|
|
|
|
class TestAuthService:
|
|
"""Test cases for AuthService."""
|
|
|
|
def test_init_without_app(self) -> None:
|
|
"""Test initializing AuthService without Flask app."""
|
|
auth_service = AuthService()
|
|
assert auth_service.oauth is not None
|
|
assert auth_service.google is None
|
|
assert auth_service.token_service is not None
|
|
|
|
@patch("app.services.auth_service.os.getenv")
|
|
def test_init_app(self, mock_getenv: Mock) -> None:
|
|
"""Test initializing AuthService with Flask app."""
|
|
mock_getenv.side_effect = lambda key: {
|
|
"GOOGLE_CLIENT_ID": "test_client_id",
|
|
"GOOGLE_CLIENT_SECRET": "test_client_secret"
|
|
}.get(key)
|
|
|
|
mock_app = Mock()
|
|
auth_service = AuthService()
|
|
auth_service.init_app(mock_app)
|
|
|
|
auth_service.oauth.init_app.assert_called_once_with(mock_app)
|
|
|
|
@patch("app.services.auth_service.request")
|
|
def test_get_current_user_no_token(self, mock_request: Mock) -> None:
|
|
"""Test getting current user when no token exists."""
|
|
mock_request.cookies.get.return_value = None
|
|
auth_service = AuthService()
|
|
|
|
user = auth_service.get_current_user()
|
|
assert user is None
|
|
|
|
@patch("app.services.auth_service.request")
|
|
def test_get_current_user_with_token(self, mock_request: Mock) -> None:
|
|
"""Test getting current user when valid token exists."""
|
|
mock_request.cookies.get.return_value = "valid.access.token"
|
|
auth_service = AuthService()
|
|
|
|
user_data = {"id": "123", "email": "test@example.com", "name": "Test User"}
|
|
with patch.object(auth_service.token_service, 'get_user_from_access_token', return_value=user_data):
|
|
user = auth_service.get_current_user()
|
|
assert user == user_data
|
|
|
|
@patch("app.services.auth_service.request")
|
|
def test_is_authenticated_false(self, mock_request: Mock) -> None:
|
|
"""Test authentication check when not authenticated."""
|
|
mock_request.cookies.get.return_value = None
|
|
auth_service = AuthService()
|
|
|
|
assert not auth_service.is_authenticated()
|
|
|
|
@patch("app.services.auth_service.request")
|
|
def test_is_authenticated_true(self, mock_request: Mock) -> None:
|
|
"""Test authentication check when authenticated."""
|
|
mock_request.cookies.get.return_value = "valid.access.token"
|
|
auth_service = AuthService()
|
|
user_data = {"id": "123", "email": "test@example.com", "name": "Test User"}
|
|
|
|
with patch.object(auth_service.token_service, 'get_user_from_access_token', return_value=user_data):
|
|
assert auth_service.is_authenticated()
|
|
|
|
@patch("app.services.auth_service.make_response")
|
|
def test_logout(self, mock_make_response: Mock) -> None:
|
|
"""Test logout functionality."""
|
|
mock_response = Mock()
|
|
mock_make_response.return_value = mock_response
|
|
|
|
auth_service = AuthService()
|
|
result = auth_service.logout()
|
|
|
|
assert result == mock_response
|
|
mock_response.set_cookie.assert_any_call("access_token", "", expires=0)
|
|
mock_response.set_cookie.assert_any_call("refresh_token", "", expires=0) |