First shot of paginaiton seems ok
This commit is contained in:
parent
2a4ac4961c
commit
32c97664c6
7
crud.py
7
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
|
||||
|
||||
|
||||
|
|
2
dev.py
2
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)
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue