[preset] fix
This commit is contained in:
		
							parent
							
								
									705baa2857
								
							
						
					
					
						commit
						644c6a4e27
					
				
					 4 changed files with 33 additions and 8 deletions
				
			
		| 
						 | 
					@ -6,6 +6,7 @@ from ..model.meal import (
 | 
				
			||||||
    SaveMealPayload,
 | 
					    SaveMealPayload,
 | 
				
			||||||
    CreateMealFromPresetPayload,
 | 
					    CreateMealFromPresetPayload,
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					from ..model.preset import Preset
 | 
				
			||||||
from ..domain.meal import Meal as DBMeal
 | 
					from ..domain.meal import Meal as DBMeal
 | 
				
			||||||
from ..domain.diary import Diary as DBDiary
 | 
					from ..domain.diary import Diary as DBDiary
 | 
				
			||||||
from ..domain.preset import Preset as DBPreset
 | 
					from ..domain.preset import Preset as DBPreset
 | 
				
			||||||
| 
						 | 
					@ -30,16 +31,18 @@ class CreateMeal(AuthorizedController):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class SaveMeal(AuthorizedController):
 | 
					class SaveMeal(AuthorizedController):
 | 
				
			||||||
    async def call(self, meal_id: id, payload: SaveMealPayload) -> None:
 | 
					    async def call(self, meal_id: id, payload: SaveMealPayload) -> Preset:
 | 
				
			||||||
        async with self.async_session.begin() as session:
 | 
					        async with self.async_session.begin() as session:
 | 
				
			||||||
            meal = await DBMeal.get_by_id(session, self.user.id, meal_id)
 | 
					            meal = await DBMeal.get_by_id(session, self.user.id, meal_id)
 | 
				
			||||||
            if meal is None:
 | 
					            if meal is None:
 | 
				
			||||||
                raise HTTPException(status_code=404, detail="meal not found")
 | 
					                raise HTTPException(status_code=404, detail="meal not found")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            try:
 | 
					            try:
 | 
				
			||||||
 | 
					                return Preset.from_orm(
 | 
				
			||||||
                    await DBPreset.create(
 | 
					                    await DBPreset.create(
 | 
				
			||||||
                        session, user_id=self.user.id, name=payload.name, meal=meal
 | 
					                        session, user_id=self.user.id, name=payload.name, meal=meal
 | 
				
			||||||
                    )
 | 
					                    )
 | 
				
			||||||
 | 
					                )
 | 
				
			||||||
            except AssertionError as e:
 | 
					            except AssertionError as e:
 | 
				
			||||||
                raise HTTPException(status_code=400, detail=e.args[0])
 | 
					                raise HTTPException(status_code=400, detail=e.args[0])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -74,7 +74,9 @@ class Preset(Base, CommonMixin):
 | 
				
			||||||
            raise RuntimeError()
 | 
					            raise RuntimeError()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for entry in meal.entries:
 | 
					        for entry in meal.entries:
 | 
				
			||||||
            PresetEntry.create(session, preset.id, entry)
 | 
					            await PresetEntry.create(session, preset.id, entry)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return await cls.get(session, user_id, preset.id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @classmethod
 | 
					    @classmethod
 | 
				
			||||||
    async def list_all(
 | 
					    async def list_all(
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,7 +3,9 @@ import pytest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@pytest.mark.dependency()
 | 
					@pytest.mark.dependency()
 | 
				
			||||||
def test_create_meal(client, meal_payload_factory):
 | 
					def test_create_meal(
 | 
				
			||||||
 | 
					    client, meal_payload_factory, product_payload_factory, entry_payload_factory
 | 
				
			||||||
 | 
					):
 | 
				
			||||||
    today = datetime.date.today().isoformat()
 | 
					    today = datetime.date.today().isoformat()
 | 
				
			||||||
    response = client.get("diary", params={"date": today})
 | 
					    response = client.get("diary", params={"date": today})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,18 +15,35 @@ def test_create_meal(client, meal_payload_factory):
 | 
				
			||||||
    response = client.post("meal", json=meal_payload_factory(diary_id, meal_order))
 | 
					    response = client.post("meal", json=meal_payload_factory(diary_id, meal_order))
 | 
				
			||||||
    assert response.status_code == 200, response.json()
 | 
					    assert response.status_code == 200, response.json()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    meal_id = response.json()["id"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    product_id = client.post("product", json=product_payload_factory()).json()["id"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    entry_payload = entry_payload_factory(meal_id, product_id, 100.0)
 | 
				
			||||||
 | 
					    response = client.post("entry", json=entry_payload)
 | 
				
			||||||
 | 
					    assert response.status_code == 200, response.json()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@pytest.mark.dependency(depends=["test_create_meal"])
 | 
					@pytest.mark.dependency(depends=["test_create_meal"])
 | 
				
			||||||
def test_save_meal(client, meal_save_payload):
 | 
					def test_save_meal(client, meal_save_payload):
 | 
				
			||||||
    today = datetime.date.today().isoformat()
 | 
					    today = datetime.date.today().isoformat()
 | 
				
			||||||
    response = client.get("diary", params={"date": today})
 | 
					    response = client.get("diary", params={"date": today})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    meal_id = response.json()["meals"][0]["id"]
 | 
					    meal = response.json()["meals"][0]
 | 
				
			||||||
 | 
					    meal_id = meal["id"]
 | 
				
			||||||
    save_payload = meal_save_payload(meal_id)
 | 
					    save_payload = meal_save_payload(meal_id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    response = client.post(f"meal/{meal_id}/save", json=save_payload)
 | 
					    response = client.post(f"meal/{meal_id}/save", json=save_payload)
 | 
				
			||||||
    assert response.status_code == 200, response.json()
 | 
					    assert response.status_code == 200, response.json()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    preset = response.json()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for k, v in preset.items():
 | 
				
			||||||
 | 
					        if k in ("id", "name", "entries"):
 | 
				
			||||||
 | 
					            continue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assert meal[k] == v, f"{k} != {v}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@pytest.mark.dependency(depends=["test_create_meal"])
 | 
					@pytest.mark.dependency(depends=["test_create_meal"])
 | 
				
			||||||
def test_list_presets(client, meal_save_payload):
 | 
					def test_list_presets(client, meal_save_payload):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,5 @@
 | 
				
			||||||
from fastapi import APIRouter, Depends, Request
 | 
					from fastapi import APIRouter, Depends, Request
 | 
				
			||||||
 | 
					from ..model.preset import Preset
 | 
				
			||||||
from ..model.meal import (
 | 
					from ..model.meal import (
 | 
				
			||||||
    Meal,
 | 
					    Meal,
 | 
				
			||||||
    CreateMealPayload,
 | 
					    CreateMealPayload,
 | 
				
			||||||
| 
						 | 
					@ -20,14 +21,14 @@ async def create_meal(
 | 
				
			||||||
    return await contoller.call(data)
 | 
					    return await contoller.call(data)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@router.post("/{meal_id}/save")
 | 
					@router.post("/{meal_id}/save", response_model=Preset)
 | 
				
			||||||
async def save_meal(
 | 
					async def save_meal(
 | 
				
			||||||
    request: Request,
 | 
					    request: Request,
 | 
				
			||||||
    meal_id: int,
 | 
					    meal_id: int,
 | 
				
			||||||
    data: SaveMealPayload,
 | 
					    data: SaveMealPayload,
 | 
				
			||||||
    contoller: SaveMeal = Depends(SaveMeal),
 | 
					    contoller: SaveMeal = Depends(SaveMeal),
 | 
				
			||||||
):
 | 
					):
 | 
				
			||||||
    await contoller.call(meal_id, data)
 | 
					    return await contoller.call(meal_id, data)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@router.post("/from_preset", response_model=Meal)
 | 
					@router.post("/from_preset", response_model=Meal)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue