113 lines
3.4 KiB
Python
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
|