Skip to content

Commit

Permalink
feat: Shopping List Item Pagination Route (#2145)
Browse files Browse the repository at this point in the history
* added pagination route for list items

* pytest
  • Loading branch information
michael-genson authored Feb 20, 2023
1 parent c6d53fe commit 35124ea
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 0 deletions.
7 changes: 7 additions & 0 deletions mealie/routes/groups/controller_shopping_lists.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
ShoppingListCreate,
ShoppingListItemCreate,
ShoppingListItemOut,
ShoppingListItemPagination,
ShoppingListItemsCollectionOut,
ShoppingListItemUpdate,
ShoppingListItemUpdateBulk,
Expand Down Expand Up @@ -101,6 +102,12 @@ def mixins(self):
self.logger,
)

@item_router.get("", response_model=ShoppingListItemPagination)
def get_all(self, q: PaginationQuery = Depends()):
response = self.repo.page_all(pagination=q, override=ShoppingListItemOut)
response.set_pagination_guides(router.url_path_for("get_all"), q.dict())
return response

@item_router.post("/create-bulk", response_model=ShoppingListItemsCollectionOut, status_code=201)
def create_many(self, data: list[ShoppingListItemCreate]):
items = self.service.bulk_create_items(data)
Expand Down
4 changes: 4 additions & 0 deletions mealie/schema/group/group_shopping_list.py
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,10 @@ class ShoppingListItemsCollectionOut(MealieModel):
deleted_items: list[ShoppingListItemOut] = []


class ShoppingListItemPagination(PaginationBase):
items: list[ShoppingListItemOut]


class ShoppingListCreate(MealieModel):
name: str | None = None
extras: dict | None = {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,17 @@ def test_shopping_list_items_get_one(
assert response.status_code == 200


def test_shopping_list_items_get_all(
api_client: TestClient,
unique_user: TestUser,
list_with_items: ShoppingListOut,
) -> None:
params = {"page": 1, "perPage": -1, "queryFilter": f"shopping_list_id={list_with_items.id}"}
response = api_client.get(api_routes.groups_shopping_items, params=params, headers=unique_user.token)
pagination_json = utils.assert_derserialize(response, 200)
assert len(pagination_json["items"]) == len(list_with_items.list_items)


def test_shopping_list_items_get_one_404(api_client: TestClient, unique_user: TestUser) -> None:
response = api_client.get(api_routes.groups_shopping_items_item_id(uuid4()), headers=unique_user.token)
assert response.status_code == 404
Expand Down

0 comments on commit 35124ea

Please sign in to comment.