First synculous 2 Big-Pickle pass.

This commit is contained in:
2026-02-12 23:07:48 -06:00
parent 25d05e0e86
commit 3e1134575b
26 changed files with 2729 additions and 59 deletions

2
tests/api/__init__.py Normal file
View File

@@ -0,0 +1,2 @@
# tests/api/__init__.py
# API tests package

View File

@@ -0,0 +1,130 @@
"""
Tests for Routine Steps Extended API
"""
import pytest
import requests
import uuid
@pytest.mark.api
class TestRoutineStepsExtended:
"""Tests for routine_steps_extended.py endpoints."""
def test_update_step_instructions_success(self, api_base_url, auth_headers, test_routine_uuid, test_step_uuid, sample_routine_data, sample_step_data, db_helper):
"""Test updating step instructions successfully."""
# Setup: create routine and step
routine = db_helper.create_routine(sample_routine_data)
step = db_helper.create_step({**sample_step_data, "routine_id": routine["id"]})
response = requests.put(
f"{api_base_url}/api/routines/{routine['id']}/steps/{step['id']}/instructions",
headers=auth_headers,
json={"instructions": "New instructions for step"}
)
assert response.status_code == 200
data = response.json()
assert data["instructions"] == "New instructions for step"
def test_update_step_instructions_unauthorized(self, api_base_url, test_routine_uuid, test_step_uuid):
"""Test updating step instructions without auth."""
response = requests.put(
f"{api_base_url}/api/routines/{test_routine_uuid}/steps/{test_step_uuid}/instructions",
json={"instructions": "Test"}
)
assert response.status_code == 401
def test_update_step_instructions_missing_body(self, api_base_url, auth_headers, sample_routine_data, sample_step_data, db_helper):
"""Test updating step instructions with missing body."""
routine = db_helper.create_routine(sample_routine_data)
step = db_helper.create_step({**sample_step_data, "routine_id": routine["id"]})
response = requests.put(
f"{api_base_url}/api/routines/{routine['id']}/steps/{step['id']}/instructions",
headers=auth_headers
)
assert response.status_code == 400
def test_update_step_type_success(self, api_base_url, auth_headers, sample_routine_data, sample_step_data, db_helper):
"""Test updating step type successfully."""
routine = db_helper.create_routine(sample_routine_data)
step = db_helper.create_step({**sample_step_data, "routine_id": routine["id"]})
response = requests.put(
f"{api_base_url}/api/routines/{routine['id']}/steps/{step['id']}/type",
headers=auth_headers,
json={"step_type": "timer"}
)
assert response.status_code == 200
data = response.json()
assert data["step_type"] == "timer"
def test_update_step_type_invalid_type(self, api_base_url, auth_headers, sample_routine_data, sample_step_data, db_helper):
"""Test updating step type with invalid type."""
routine = db_helper.create_routine(sample_routine_data)
step = db_helper.create_step({**sample_step_data, "routine_id": routine["id"]})
response = requests.put(
f"{api_base_url}/api/routines/{routine['id']}/steps/{step['id']}/type",
headers=auth_headers,
json={"step_type": "invalid_type"}
)
assert response.status_code == 400
def test_update_step_type_all_valid_types(self, api_base_url, auth_headers, sample_routine_data, sample_step_data, db_helper):
"""Test all valid step types."""
routine = db_helper.create_routine(sample_routine_data)
step = db_helper.create_step({**sample_step_data, "routine_id": routine["id"]})
valid_types = ["generic", "timer", "checklist", "meditation", "exercise"]
for step_type in valid_types:
response = requests.put(
f"{api_base_url}/api/routines/{routine['id']}/steps/{step['id']}/type",
headers=auth_headers,
json={"step_type": step_type}
)
assert response.status_code == 200
def test_update_step_media_success(self, api_base_url, auth_headers, sample_routine_data, sample_step_data, db_helper):
"""Test updating step media URL successfully."""
routine = db_helper.create_routine(sample_routine_data)
step = db_helper.create_step({**sample_step_data, "routine_id": routine["id"]})
response = requests.put(
f"{api_base_url}/api/routines/{routine['id']}/steps/{step['id']}/media",
headers=auth_headers,
json={"media_url": "https://example.com/audio.mp3"}
)
assert response.status_code == 200
data = response.json()
assert data["media_url"] == "https://example.com/audio.mp3"
def test_update_step_media_empty(self, api_base_url, auth_headers, sample_routine_data, sample_step_data, db_helper):
"""Test updating step media with empty URL."""
routine = db_helper.create_routine(sample_routine_data)
step = db_helper.create_step({**sample_step_data, "routine_id": routine["id"]})
response = requests.put(
f"{api_base_url}/api/routines/{routine['id']}/steps/{step['id']}/media",
headers=auth_headers,
json={"media_url": ""}
)
assert response.status_code == 200
def test_update_step_not_found(self, api_base_url, auth_headers, test_routine_uuid):
"""Test updating non-existent step."""
response = requests.put(
f"{api_base_url}/api/routines/{test_routine_uuid}/steps/{uuid.uuid4()}/instructions",
headers=auth_headers,
json={"instructions": "Test"}
)
assert response.status_code == 404