import pytest from unittest.mock import MagicMock import sys # Mock scheduler before importing main to prevent it from starting mock_scheduler = MagicMock() mock_scheduler_module = MagicMock() mock_scheduler_module.scheduler = mock_scheduler sys.modules["src.services.scheduler"] = mock_scheduler_module # The client fixture is automatically imported from conftest.py def test_create_bike_setup(client): response = client.post( "/api/bike-setups/", json={"frame": "Trek Emonda", "chainring": 50, "rear_cog": 11, "name": "Road Setup"} ) assert response.status_code == 201 data = response.json() assert data["frame"] == "Trek Emonda" assert data["chainring"] == 50 assert "id" in data def test_read_bike_setups(client): # Create one first to ensure it exists (needed due to function scope isolation) client.post( "/api/bike-setups/", json={"frame": "Read Test", "chainring": 50, "rear_cog": 11, "name": "Read Me"} ) response = client.get("/api/bike-setups/") assert response.status_code == 200 data = response.json() # Depending on test isolation, checking >=1 is safe assert len(data) >= 1 # We might need to filter to find the one we just made if parallel tests run, # but for now sequential is fine. found = False for setup in data: if setup.get("frame") == "Read Test": found = True break assert found def test_update_bike_setup(client): # Create one first to ensure it exists setup = client.post( "/api/bike-setups/", json={"frame": "Update Target", "chainring": 50, "rear_cog": 11, "name": "To Update"} ).json() setup_id = setup["id"] response = client.put( f"/api/bike-setups/{setup_id}", json={"chainring": 52} ) assert response.status_code == 200 data = response.json() assert data["chainring"] == 52 assert data["frame"] == "Update Target" def test_delete_bike_setup(client): # Create one to delete setup = client.post( "/api/bike-setups/", json={"frame": "Delete Target", "chainring": 50, "rear_cog": 11, "name": "To Delete"} ).json() setup_id = setup["id"] response = client.delete(f"/api/bike-setups/{setup_id}") assert response.status_code == 204 response = client.get(f"/api/bike-setups/{setup_id}") assert response.status_code == 404