131 lines
5.6 KiB
Python
131 lines
5.6 KiB
Python
"""
|
|
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
|