diff --git a/crud.py b/crud.py index dd85780..b963b38 100644 --- a/crud.py +++ b/crud.py @@ -37,8 +37,13 @@ def get_movie_by_name(db: Session, name: str = ""): return db_movie.all() -def get_all_movies(db: Session): +def get_all_movies(db: Session, offset: int | None = None, limit: int | None = None): db_movie = db.query(models.Movie) + if offset is not None: + db_movie = db_movie.offset(offset) + if limit is not None: + db_movie = db_movie.limit(limit) + return db_movie diff --git a/dev.py b/dev.py index 1487856..d080976 100644 --- a/dev.py +++ b/dev.py @@ -125,7 +125,7 @@ async def list_movie( if any(v for v in pagination_params.values() if v is not None): missing = [name for (name, value) in pagination_params.items() if not value] if missing: - raise HTTPException(status_code=404, detail=f"No movie found with id {id_}") + raise HTTPException(status_code=404, detail=f"Missing {missing}") paginate_params = dict(offset=(pagenum - 1) * pagesize, limit=pagesize) diff --git a/utests/test_api.py b/utests/test_api.py index 9ea0128..cd1cf74 100644 --- a/utests/test_api.py +++ b/utests/test_api.py @@ -157,6 +157,7 @@ class BaseCrud(unittest.TestCase): assert isinstance(movies["movies"], list) assert movies["count"] == primary_count + N + def test_list_movies_pagination(self): response = client.get("/movies/") assert response.status_code == 200 @@ -186,7 +187,41 @@ class BaseCrud(unittest.TestCase): f"/movies/?pagenum={pagenum}&pagesize={pagesize}" ).json()["movies"] - paginate_titles = [m["title"] for n in movies_paginate] + paginate_titles = [m["title"] for m in movies_paginate] + + assert sliced_titles == paginate_titles + + + def test_list_movies_pagination(self): + response = client.get("/movies/") + assert response.status_code == 200 + # assert response.json() == [] + primary_count = response.json()["count"] + + N = 10 + names = [] + for _ in range(N): + name = rand_name() + + names.append(name) + self.create_payload["title"] = name + response = client.post("/movies/", json=self.create_payload) + assert response.status_code == 200 + + pagenum = 3 + pagesize = 5 + + sliced_movies = client.get("/movies/").json()["movies"][ + (pagenum - 1) * pagesize : pagenum * pagesize + ] + + sliced_titles = [m["title"] for m in sliced_movies] + + movies_paginate = client.get( + f"/movies/?pagenum={pagenum}&pagesize={pagesize}" + ).json()["movies"] + + paginate_titles = [m["title"] for m in movies_paginate] assert sliced_titles == paginate_titles