Files
autoayuno-api/test_recipes.py
2026-07-03 08:22:40 +02:00

61 lines
2.4 KiB
Python

"""Tests de recetas (Fase B): publicar con campos nuevos, buscar solo públicas,
obtener por id y cookbook por autor. SQLite en memoria."""
import os
os.environ["DATABASE_URL"] = "sqlite://"
from fastapi.testclient import TestClient # noqa: E402
from main import app # noqa: E402
client = TestClient(app)
def test_publicar_y_obtener_con_campos_nuevos():
body = {
"id": "r1", "name": "Flan", "servings": 4,
"items": [], "steps": ["Bate", "Hornea"], "notes": "de la abuela",
"category": "postres", "prepMinutes": 30,
"authorId": "auth-1", "authorName": "Carlos",
"visibility": "public", "deviceToken": "dev-1",
}
r = client.post("/recipes", json=body)
assert r.status_code < 300, r.text
got = client.get("/recipes/r1").json()
assert got["steps"] == ["Bate", "Hornea"]
assert got["category"] == "postres"
assert got["prepMinutes"] == 30
assert got["notes"] == "de la abuela"
assert got["authorName"] == "Carlos"
assert got["visibility"] == "public"
def test_buscar_solo_publicas_y_cookbook():
client.post("/recipes", json={"id": "pub", "name": "Pública", "servings": 1,
"items": [], "visibility": "public", "authorId": "a1"})
client.post("/recipes", json={"id": "prv", "name": "Privada", "servings": 1,
"items": [], "visibility": "private", "authorId": "a1"})
names = [x["name"] for x in client.get("/recipes?q=").json()]
assert "Pública" in names
assert "Privada" not in names
ids = {x["id"] for x in client.get("/cookbook/a1").json()}
assert ids == {"pub", "prv"}
def test_receta_anonima_sin_nombre():
client.post("/recipes", json={"id": "anon", "name": "Anón", "servings": 1,
"items": [], "visibility": "public", "authorId": "a2"})
got = client.get("/recipes/anon").json()
assert got["authorName"] is None
def test_delete_cookbook_borra_solo_privadas():
client.post("/recipes", json={"id": "d_pub", "name": "P", "servings": 1,
"items": [], "visibility": "public", "authorId": "del"})
client.post("/recipes", json={"id": "d_prv", "name": "Q", "servings": 1,
"items": [], "visibility": "private", "authorId": "del"})
res = client.request("DELETE", "/cookbook/del").json()
assert res["deleted"] == 1
ids = {x["id"] for x in client.get("/cookbook/del").json()}
assert ids == {"d_pub"} # la pública se mantiene