| 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_responsive_design_mobile_view(): |
| """Test that the application works properly on mobile screen sizes""" |
| client = TestClient(app) |
|
|
| |
| user_data = {"user_id": "responsive_test_user", "role": "user"} |
| token = create_access_token(data=user_data) |
|
|
| |
| headers = { |
| "Authorization": f"Bearer {token}", |
| "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15" |
| } |
|
|
| response = client.get( |
| "/api/v1/tasks/responsive_test_user", |
| headers=headers |
| ) |
|
|
| |
| assert response.status_code in [200, 404] |
|
|
| |
| if response.status_code == 200: |
| tasks = response.json() |
| assert isinstance(tasks, list) |
|
|
|
|
| def test_responsive_design_tablet_view(): |
| """Test that the application works properly on tablet screen sizes""" |
| client = TestClient(app) |
|
|
| |
| user_data = {"user_id": "tablet_responsive_user", "role": "user"} |
| token = create_access_token(data=user_data) |
|
|
| |
| headers = { |
| "Authorization": f"Bearer {token}", |
| "User-Agent": "Mozilla/5.0 (iPad; CPU OS 14_0 like Mac OS X) AppleWebKit/605.1.15" |
| } |
|
|
| response = client.get( |
| "/api/v1/tasks/tablet_responsive_user", |
| headers=headers |
| ) |
|
|
| |
| assert response.status_code in [200, 404] |
|
|
|
|
| def test_responsive_design_desktop_view(): |
| """Test that the application works properly on desktop screen sizes""" |
| client = TestClient(app) |
|
|
| |
| user_data = {"user_id": "desktop_responsive_user", "role": "user"} |
| token = create_access_token(data=user_data) |
|
|
| |
| headers = { |
| "Authorization": f"Bearer {token}", |
| "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" |
| } |
|
|
| response = client.get( |
| "/api/v1/tasks/desktop_responsive_user", |
| headers=headers |
| ) |
|
|
| |
| assert response.status_code in [200, 404] |
|
|
|
|
| def test_responsive_task_creation_form(): |
| """Test that task creation works across different device types""" |
| client = TestClient(app) |
|
|
| |
| user_data = {"user_id": "form_responsive_user", "role": "user"} |
| token = create_access_token(data=user_data) |
|
|
| |
| user_agents = [ |
| "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X)", |
| "Mozilla/5.0 (iPad; CPU OS 14_0 like Mac OS X)", |
| "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" |
| ] |
|
|
| for ua in user_agents: |
| headers = { |
| "Authorization": f"Bearer {token}", |
| "User-Agent": ua, |
| "Content-Type": "application/json" |
| } |
|
|
| task_data = { |
| "title": f"Task from {ua[:10]}...", |
| "description": f"Created from device type: {ua}", |
| "user_id": "form_responsive_user" |
| } |
|
|
| response = client.post( |
| "/api/v1/tasks/", |
| json=task_data, |
| headers=headers |
| ) |
|
|
| |
| assert response.status_code in [200, 201, 422], f"Failed for user agent: {ua}" |
|
|
|
|
| def test_responsive_task_operations(): |
| """Test that all task operations work properly across different screen sizes""" |
| client = TestClient(app) |
|
|
| |
| user_data = {"user_id": "ops_responsive_user", "role": "user"} |
| token = create_access_token(data=user_data) |
|
|
| |
| task_data = { |
| "title": "Responsive test task", |
| "description": "Task to test responsive operations", |
| "user_id": "ops_responsive_user" |
| } |
|
|
| create_response = client.post( |
| "/api/v1/tasks/", |
| json=task_data, |
| headers={"Authorization": f"Bearer {token}"} |
| ) |
|
|
| assert create_response.status_code in [200, 201] |
| task = create_response.json() |
| task_id = task.get("id") or task.get("data", {}).get("id") |
|
|
| if task_id: |
| |
| mobile_headers = { |
| "Authorization": f"Bearer {token}", |
| "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X)" |
| } |
|
|
| |
| update_data = {"title": "Updated from mobile", "completed": True} |
| update_response = client.put( |
| f"/api/v1/tasks/{task_id}", |
| json=update_data, |
| headers=mobile_headers |
| ) |
| assert update_response.status_code in [200, 201] |
|
|
| |
| tablet_headers = { |
| "Authorization": f"Bearer {token}", |
| "User-Agent": "Mozilla/5.0 (iPad; CPU OS 14_0 like Mac OS X)" |
| } |
|
|
| toggle_response = client.patch( |
| f"/api/v1/tasks/{task_id}/toggle", |
| headers=tablet_headers |
| ) |
| assert toggle_response.status_code == 200 |
|
|
|
|
| def test_different_screen_size_requests(): |
| """Test API responses are consistent across different simulated screen sizes""" |
| client = TestClient(app) |
|
|
| |
| user_data = {"user_id": "screen_size_user", "role": "user"} |
| token = create_access_token(data=user_data) |
|
|
| |
| viewports = [ |
| {"width": 375, "height": 667, "device": "mobile"}, |
| {"width": 768, "height": 1024, "device": "tablet"}, |
| {"width": 1920, "height": 1080, "device": "desktop"} |
| ] |
|
|
| for viewport in viewports: |
| headers = { |
| "Authorization": f"Bearer {token}", |
| "X-Viewport-Width": str(viewport["width"]), |
| "User-Agent": f"TestAgent/{viewport['device']}" |
| } |
|
|
| response = client.get( |
| f"/api/v1/tasks/{viewport['device']}_user", |
| headers=headers |
| ) |
|
|
| |
| assert response.status_code in [200, 404] |
|
|
| if response.status_code == 200: |
| data = response.json() |
| assert isinstance(data, list) |
|
|
|
|
| if __name__ == "__main__": |
| pytest.main([__file__]) |