fooder-api/fooder/test/view/test_entry.py

113 lines
3.4 KiB
Python

import datetime
TODAY = datetime.date.today().isoformat()
async def test_create_entry_returns_201(auth_client, diary, meal, entry_payload):
response = await auth_client.post(
f"/api/diary/{TODAY}/meal/{meal.id}/entry", json=entry_payload
)
assert response.status_code == 201
async def test_create_entry_returns_correct_fields(
auth_client, diary, meal, entry_payload, product
):
response = await auth_client.post(
f"/api/diary/{TODAY}/meal/{meal.id}/entry", json=entry_payload
)
body = response.json()
assert body["grams"] == entry_payload["grams"]
assert body["product_id"] == product.id
assert body["meal_id"] == meal.id
assert "protein" in body
assert "calories" in body
async def test_create_entry_zero_grams_returns_422(auth_client, diary, meal, product):
response = await auth_client.post(
f"/api/diary/{TODAY}/meal/{meal.id}/entry",
json={"grams": 0.0, "product_id": product.id},
)
assert response.status_code == 422
async def test_create_entry_negative_grams_returns_422(
auth_client, diary, meal, product
):
response = await auth_client.post(
f"/api/diary/{TODAY}/meal/{meal.id}/entry",
json={"grams": -10.0, "product_id": product.id},
)
assert response.status_code == 422
async def test_create_entry_increments_user_product_usage(
auth_client, auth_ctx, diary, meal, entry_payload, product
):
await auth_client.post(
f"/api/diary/{TODAY}/meal/{meal.id}/entry", json=entry_payload
)
await auth_client.post(
f"/api/diary/{TODAY}/meal/{meal.id}/entry", json=entry_payload
)
usage = await auth_ctx.repo.user_product_usage.get_by_user_and_product(
auth_ctx.user.id, product.id
)
assert usage.count == 2
async def test_create_entry_meal_not_found_returns_404(
auth_client, diary, entry_payload
):
response = await auth_client.post(
f"/api/diary/{TODAY}/meal/99999/entry", json=entry_payload
)
assert response.status_code == 404
async def test_create_entry_without_auth_returns_401(
client, diary, meal, entry_payload
):
response = await client.post(
f"/api/diary/{TODAY}/meal/{meal.id}/entry", json=entry_payload
)
assert response.status_code == 401
async def test_update_entry_returns_200(auth_client, diary, meal, entry):
response = await auth_client.patch(
f"/api/diary/{TODAY}/meal/{meal.id}/entry/{entry.id}",
json={"grams": 200.0},
)
assert response.status_code == 200
async def test_update_entry_changes_grams(auth_client, diary, meal, entry):
response = await auth_client.patch(
f"/api/diary/{TODAY}/meal/{meal.id}/entry/{entry.id}",
json={"grams": 200.0},
)
assert response.json()["grams"] == 200.0
async def test_update_entry_not_found_returns_404(auth_client, diary, meal):
response = await auth_client.patch(
f"/api/diary/{TODAY}/meal/{meal.id}/entry/99999",
json={"grams": 200.0},
)
assert response.status_code == 404
async def test_delete_entry_returns_204(auth_client, diary, meal, entry):
response = await auth_client.delete(
f"/api/diary/{TODAY}/meal/{meal.id}/entry/{entry.id}"
)
assert response.status_code == 204
async def test_delete_entry_without_auth_returns_401(client, diary, meal, entry):
response = await client.delete(
f"/api/diary/{TODAY}/meal/{meal.id}/entry/{entry.id}"
)
assert response.status_code == 401