mirror of
https://github.com/sstent/foodplanner.git
synced 2025-12-06 08:01:47 +00:00
162 lines
6.1 KiB
Python
162 lines
6.1 KiB
Python
"""
|
|
Tests for Weekly Menu operations
|
|
"""
|
|
import pytest
|
|
|
|
|
|
class TestWeeklyMenuRoutes:
|
|
"""Test weekly menu-related routes"""
|
|
|
|
def test_get_weekly_menu_page(self, client, sample_weekly_menu, sample_template):
|
|
"""Test GET /weeklymenu page displays weekly menus correctly"""
|
|
response = client.get("/weeklymenu")
|
|
assert response.status_code == 200
|
|
|
|
# Check for the presence of the weekly menu name
|
|
assert sample_weekly_menu.name.encode('utf-8') in response.content
|
|
|
|
# Check for the assigned templates' names
|
|
for weekly_menu_day in sample_weekly_menu.weekly_menu_days:
|
|
assert weekly_menu_day.template.name.encode('utf-8') in response.content
|
|
|
|
|
|
def test_create_weekly_menu_route(self, client, sample_template):
|
|
"""Test POST /weeklymenu/create route"""
|
|
form_data = {
|
|
"name": "My New Weekly Menu",
|
|
"template_assignments": f"0:{sample_template.id},1:{sample_template.id}"
|
|
}
|
|
response = client.post("/weeklymenu/create", data=form_data)
|
|
assert response.status_code == 200
|
|
assert response.json() == {"status": "success", "message": "Weekly menu created successfully"}
|
|
|
|
|
|
def test_apply_weekly_menu_route(self, client, db_session, sample_weekly_menu):
|
|
"""Test POST /weeklymenu/{weekly_menu_id}/apply route"""
|
|
from datetime import date, timedelta
|
|
|
|
today = date.today()
|
|
# Find Monday of current week
|
|
week_start_date = (today - timedelta(days=today.weekday())).isoformat()
|
|
|
|
form_data = {
|
|
"person": "Sarah",
|
|
"week_start_date": week_start_date,
|
|
"confirm_overwrite": "false"
|
|
}
|
|
response = client.post(f"/weeklymenu/{sample_weekly_menu.id}/apply", data=form_data)
|
|
assert response.status_code == 200
|
|
assert response.json() == {"status": "success", "message": "Weekly menu applied successfully."}
|
|
|
|
|
|
class TestWeeklyMenuCRUD:
|
|
"""Test weekly menu CRUD operations"""
|
|
|
|
def test_create_weekly_menu(self, client, db_session, sample_template):
|
|
"""Test creating a weekly menu"""
|
|
from main import WeeklyMenu, WeeklyMenuDay
|
|
|
|
weekly_menu = WeeklyMenu(name="Test Weekly Menu")
|
|
db_session.add(weekly_menu)
|
|
db_session.commit()
|
|
db_session.refresh(weekly_menu)
|
|
|
|
# Add days to weekly menu
|
|
for day in range(7):
|
|
menu_day = WeeklyMenuDay(
|
|
weekly_menu_id=weekly_menu.id,
|
|
day_of_week=day,
|
|
template_id=sample_template.id
|
|
)
|
|
db_session.add(menu_day)
|
|
|
|
db_session.commit()
|
|
|
|
assert weekly_menu.id is not None
|
|
assert len(weekly_menu.weekly_menu_days) == 7
|
|
|
|
def test_weekly_menu_relationships(self, client, db_session, sample_template):
|
|
"""Test weekly menu relationships"""
|
|
from main import WeeklyMenu, WeeklyMenuDay
|
|
|
|
weekly_menu = WeeklyMenu(name="Relationship Test Menu")
|
|
db_session.add(weekly_menu)
|
|
db_session.commit()
|
|
db_session.refresh(weekly_menu)
|
|
|
|
menu_day = WeeklyMenuDay(
|
|
weekly_menu_id=weekly_menu.id,
|
|
day_of_week=0, # Monday
|
|
template_id=sample_template.id
|
|
)
|
|
db_session.add(menu_day)
|
|
db_session.commit()
|
|
|
|
# Verify relationships
|
|
assert menu_day.weekly_menu.id == weekly_menu.id
|
|
assert menu_day.template.id == sample_template.id
|
|
|
|
|
|
class TestWeeklyMenuAPI:
|
|
"""Test weekly menu API endpoints"""
|
|
|
|
def test_get_weekly_menu_detail(self, client, sample_weekly_menu):
|
|
"""Test GET /weeklymenu/{id} endpoint"""
|
|
response = client.get(f"/weeklymenu/{sample_weekly_menu.id}")
|
|
assert response.status_code == 200
|
|
|
|
data = response.json()
|
|
assert "id" in data
|
|
assert "name" in data
|
|
assert "weekly_menu_days" in data
|
|
assert data["id"] == sample_weekly_menu.id
|
|
assert data["name"] == sample_weekly_menu.name
|
|
|
|
def test_get_weekly_menus_api(self, client, sample_weekly_menu):
|
|
"""Test GET /api/weeklymenus endpoint"""
|
|
response = client.get("/api/weeklymenus")
|
|
assert response.status_code == 200
|
|
|
|
data = response.json()
|
|
assert isinstance(data, list)
|
|
assert len(data) >= 1 # Should include our sample weekly menu
|
|
|
|
# Find our sample menu in the response
|
|
sample_menu_found = False
|
|
for menu in data:
|
|
if menu["id"] == sample_weekly_menu.id:
|
|
sample_menu_found = True
|
|
assert menu["name"] == sample_weekly_menu.name
|
|
break
|
|
assert sample_menu_found, "Sample weekly menu should be in API response"
|
|
|
|
def test_update_weekly_menu(self, client, sample_weekly_menu, sample_template):
|
|
"""Test PUT /weeklymenu/{id} endpoint"""
|
|
form_data = {
|
|
"name": "Updated Weekly Menu Name",
|
|
"template_assignments": f"0:{sample_template.id},1:{sample_template.id},2:{sample_template.id}"
|
|
}
|
|
response = client.put(f"/weeklymenu/{sample_weekly_menu.id}", data=form_data)
|
|
assert response.status_code == 200
|
|
|
|
data = response.json()
|
|
assert data["status"] == "success"
|
|
|
|
# Verify the update worked by getting the menu again
|
|
get_response = client.get(f"/weeklymenu/{sample_weekly_menu.id}")
|
|
assert get_response.status_code == 200
|
|
updated_data = get_response.json()
|
|
assert updated_data["name"] == "Updated Weekly Menu Name"
|
|
|
|
def test_delete_weekly_menu(self, client, sample_weekly_menu):
|
|
"""Test DELETE /weeklymenu/{id} endpoint"""
|
|
response = client.delete(f"/weeklymenu/{sample_weekly_menu.id}")
|
|
assert response.status_code == 200
|
|
|
|
data = response.json()
|
|
assert data["status"] == "success"
|
|
|
|
# Verify the deletion worked by trying to get the menu again
|
|
get_response = client.get(f"/weeklymenu/{sample_weekly_menu.id}")
|
|
assert get_response.status_code == 404
|