mirror of
https://github.com/sstent/foodplanner.git
synced 2025-12-06 08:01:47 +00:00
sync - build workin
This commit is contained in:
157
tests/test_templates.py
Normal file
157
tests/test_templates.py
Normal file
@@ -0,0 +1,157 @@
|
||||
import sys
|
||||
import os
|
||||
print(f"DEBUG: Running with Python executable: {sys.executable}")
|
||||
print(f"DEBUG: Python version: {sys.version}")
|
||||
|
||||
import pytest
|
||||
from fastapi.testclient import TestClient
|
||||
from main import app, get_db, SessionLocal, engine, Base, Template, TemplateMeal, Meal, MealFood, Food
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
from sqlalchemy import create_engine
|
||||
|
||||
# Setup test database
|
||||
SQLALCHEMY_DATABASE_URL = "sqlite:///./test_meal_planner.db"
|
||||
test_engine = create_engine(SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False})
|
||||
TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=test_engine)
|
||||
|
||||
@pytest.fixture(name="session")
|
||||
def session_fixture():
|
||||
Base.metadata.create_all(bind=test_engine)
|
||||
db = TestingSessionLocal()
|
||||
try:
|
||||
yield db
|
||||
finally:
|
||||
db.close()
|
||||
Base.metadata.drop_all(bind=test_engine)
|
||||
|
||||
@pytest.fixture(name="client")
|
||||
def client_fixture(session):
|
||||
def override_get_db():
|
||||
yield session
|
||||
app.dependency_overrides[get_db] = override_get_db
|
||||
with TestClient(app) as client:
|
||||
yield client
|
||||
app.dependency_overrides.clear()
|
||||
|
||||
def test_templates_page(client, session):
|
||||
response = client.get("/templates")
|
||||
assert response.status_code == 200
|
||||
assert "Meal Templates" in response.text
|
||||
|
||||
def test_create_template(client, session):
|
||||
# Create a food and a meal first
|
||||
food1 = Food(name="Apple", serving_size="1", serving_unit="medium", calories=95, protein=0.5, carbs=25, fat=0.3)
|
||||
session.add(food1)
|
||||
session.commit()
|
||||
session.refresh(food1)
|
||||
|
||||
meal1 = Meal(name="Fruit Salad", meal_type="breakfast", meal_time="Breakfast")
|
||||
session.add(meal1)
|
||||
session.commit()
|
||||
session.refresh(meal1)
|
||||
|
||||
meal_food1 = MealFood(meal_id=meal1.id, food_id=food1.id, quantity=1.0)
|
||||
session.add(meal_food1)
|
||||
session.commit()
|
||||
|
||||
response = client.post(
|
||||
"/templates/create",
|
||||
data={"name": "Test Template", "meal_assignments": f"Breakfast:{meal1.id},Lunch:"}
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert response.json() == {"status": "success", "message": "Template created successfully"}
|
||||
|
||||
template = session.query(Template).filter(Template.name == "Test Template").first()
|
||||
assert template is not None
|
||||
assert len(template.template_meals) == 1
|
||||
assert template.template_meals[0].meal_time == "Breakfast"
|
||||
assert template.template_meals[0].meal_id == meal1.id
|
||||
|
||||
def test_create_template_duplicate_name(client, session):
|
||||
template = Template(name="Existing Template")
|
||||
session.add(template)
|
||||
session.commit()
|
||||
|
||||
response = client.post("/templates/create", data={"name": "Existing Template"})
|
||||
assert response.status_code == 200
|
||||
assert response.json() == {"status": "error", "message": "Template with name 'Existing Template' already exists"}
|
||||
|
||||
def test_get_template_details(client, session):
|
||||
template = Template(name="Detail Template")
|
||||
session.add(template)
|
||||
session.commit()
|
||||
session.refresh(template)
|
||||
|
||||
response = client.get(f"/templates/{template.id}")
|
||||
assert response.status_code == 200
|
||||
assert response.json()["status"] == "success"
|
||||
assert response.json()["template"]["name"] == "Detail Template"
|
||||
|
||||
def test_update_template(client, session):
|
||||
food1 = Food(name="Orange", serving_size="1", serving_unit="medium", calories=62, protein=1.2, carbs=15.4, fat=0.2)
|
||||
session.add(food1)
|
||||
session.commit()
|
||||
session.refresh(food1)
|
||||
|
||||
meal1 = Meal(name="Orange Juice", meal_type="breakfast", meal_time="Breakfast")
|
||||
session.add(meal1)
|
||||
session.commit()
|
||||
session.refresh(meal1)
|
||||
|
||||
template = Template(name="Update Template")
|
||||
session.add(template)
|
||||
session.commit()
|
||||
session.refresh(template)
|
||||
|
||||
response = client.put(
|
||||
f"/templates/{template.id}",
|
||||
data={"name": "Updated Template Name", "meal_assignments": f"Breakfast:{meal1.id}"}
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert response.json() == {"status": "success", "message": "Template updated successfully"}
|
||||
|
||||
updated_template = session.query(Template).filter(Template.id == template.id).first()
|
||||
assert updated_template.name == "Updated Template Name"
|
||||
assert len(updated_template.template_meals) == 1
|
||||
assert updated_template.template_meals[0].meal_time == "Breakfast"
|
||||
assert updated_template.template_meals[0].meal_id == meal1.id
|
||||
|
||||
def test_delete_template(client, session):
|
||||
template = Template(name="Delete Template")
|
||||
session.add(template)
|
||||
session.commit()
|
||||
session.refresh(template)
|
||||
|
||||
response = client.delete(f"/templates/{template.id}")
|
||||
assert response.status_code == 200
|
||||
assert response.json() == {"status": "success"}
|
||||
|
||||
deleted_template = session.query(Template).filter(Template.id == template.id).first()
|
||||
assert deleted_template is None
|
||||
|
||||
def test_use_template(client, session):
|
||||
food1 = Food(name="Banana", serving_size="1", serving_unit="medium", calories=105, protein=1.3, carbs=27, fat=0.4)
|
||||
session.add(food1)
|
||||
session.commit()
|
||||
session.refresh(food1)
|
||||
|
||||
meal1 = Meal(name="Banana Smoothie", meal_type="breakfast", meal_time="Breakfast")
|
||||
session.add(meal1)
|
||||
session.commit()
|
||||
session.refresh(meal1)
|
||||
|
||||
template = Template(name="Use Template")
|
||||
session.add(template)
|
||||
session.commit()
|
||||
session.refresh(template)
|
||||
|
||||
template_meal = TemplateMeal(template_id=template.id, meal_id=meal1.id, meal_time="Breakfast")
|
||||
session.add(template_meal)
|
||||
session.commit()
|
||||
|
||||
response = client.post(
|
||||
f"/templates/{template.id}/use",
|
||||
data={"person": "Sarah", "start_date": "2025-01-01"}
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert response.json() == {"status": "success", "message": "Template applied successfully"}
|
||||
Reference in New Issue
Block a user