| import pytest |
| from fastapi.testclient import TestClient |
| from backend.src.main import app |
| from backend.src.auth.security import create_access_token |
| from backend.src.models.task import TaskCreate |
|
|
|
|
| def test_authenticated_api_access_with_valid_token(): |
| """Test that authenticated API endpoints accept valid JWT tokens""" |
| client = TestClient(app) |
|
|
| |
| user_data = {"user_id": "test_user_123", "role": "user"} |
| token = create_access_token(data=user_data) |
|
|
| |
| response = client.get( |
| "/api/v1/tasks/test_user_123", |
| headers={"Authorization": f"Bearer {token}"} |
| ) |
|
|
| |
| |
| assert response.status_code in [200, 404] |
|
|
|
|
| def test_authenticated_api_access_without_token(): |
| """Test that authenticated API endpoints reject requests without tokens""" |
| client = TestClient(app) |
|
|
| |
| response = client.get("/api/v1/tasks/test_user_123") |
|
|
| |
| assert response.status_code == 401 |
| assert "WWW-Authenticate" in response.headers |
| assert "Bearer" in str(response.headers.get("WWW-Authenticate")) |
|
|
|
|
| def test_authenticated_api_access_with_invalid_token(): |
| """Test that authenticated API endpoints reject invalid JWT tokens""" |
| client = TestClient(app) |
|
|
| |
| response = client.get( |
| "/api/v1/tasks/test_user_123", |
| headers={"Authorization": "Bearer invalid_token_here"} |
| ) |
|
|
| |
| assert response.status_code == 401 |
|
|
|
|
| def test_authenticated_api_access_with_expired_token(): |
| """Test that authenticated API endpoints reject expired JWT tokens""" |
| from backend.src.auth.security import create_access_token |
| from datetime import timedelta |
|
|
| client = TestClient(app) |
|
|
| |
| user_data = {"user_id": "test_user_456", "role": "user"} |
| expired_token = create_access_token(data=user_data, expires_delta=timedelta(seconds=-1)) |
|
|
| |
| response = client.get( |
| "/api/v1/tasks/test_user_456", |
| headers={"Authorization": f"Bearer {expired_token}"} |
| ) |
|
|
| |
| assert response.status_code == 401 |
|
|
|
|
| def test_authenticated_task_creation_with_valid_token(): |
| """Test that authenticated task creation works with valid JWT tokens""" |
| client = TestClient(app) |
|
|
| |
| user_data = {"user_id": "test_user_789", "role": "user"} |
| token = create_access_token(data=user_data) |
|
|
| |
| task_data = { |
| "title": "Test task from authenticated access test", |
| "description": "This is a test task", |
| "user_id": "test_user_789" |
| } |
|
|
| response = client.post( |
| "/api/v1/tasks/", |
| json=task_data, |
| headers={"Authorization": f"Bearer {token}"} |
| ) |
|
|
| |
| |
| assert response.status_code in [201, 422, 400] |
|
|
|
|
| def test_different_users_have_different_access(): |
| """Test that different users have access only to their own resources""" |
| client = TestClient(app) |
|
|
| |
| user1_data = {"user_id": "user_1", "role": "user"} |
| user2_data = {"user_id": "user_2", "role": "user"} |
|
|
| token_user1 = create_access_token(data=user1_data) |
| token_user2 = create_access_token(data=user2_data) |
|
|
| |
| response1 = client.get( |
| "/api/v1/tasks/user_1", |
| headers={"Authorization": f"Bearer {token_user1}"} |
| ) |
|
|
| response2 = client.get( |
| "/api/v1/tasks/user_2", |
| headers={"Authorization": f"Bearer {token_user2}"} |
| ) |
|
|
| |
| assert response1.status_code in [200, 404] |
| assert response2.status_code in [200, 404] |
|
|
|
|
| if __name__ == "__main__": |
| pytest.main([__file__]) |