cleanup: make use of pydatic schemas for create
This commit is contained in:
parent
f88b8410bf
commit
4543f2f0d7
24
dev.py
24
dev.py
|
@ -44,35 +44,13 @@ async def root():
|
|||
return {"message": "Hello World"}
|
||||
|
||||
|
||||
@app.post("/pydantic_movies/")
|
||||
@app.post("/movies/")
|
||||
async def create_movie(payload: schemas.MoviePayload, db: Session = Depends(get_db)):
|
||||
movie = crud.create_movie(db, **payload.dict())
|
||||
out = {"message": f"Created {movie.title} XX", "id": movie.id}
|
||||
return out
|
||||
|
||||
|
||||
@app.post("/movies/")
|
||||
async def create_movie(
|
||||
name: str = "", db: Session = Depends(get_db), request: Request = None
|
||||
):
|
||||
out = {}
|
||||
try: # Bypass for dev
|
||||
data = await request.json()
|
||||
except:
|
||||
data = {}
|
||||
crud_params = dict(
|
||||
genres=data.get("genres", ["Unknown"]),
|
||||
description=data.get("description", ""),
|
||||
title=data.get("title", ""),
|
||||
vote_average=data.get("vote_average"),
|
||||
vote_count=data.get("vote_count"),
|
||||
)
|
||||
|
||||
movie = crud.create_movie(db, **crud_params)
|
||||
out = {"message": f"Created {movie.title} XX", "id": movie.id}
|
||||
return out
|
||||
|
||||
|
||||
@app.put("/movies/{id_}")
|
||||
async def update_movie(
|
||||
id_: str, db: Session = Depends(get_db), request: Request = None
|
||||
|
|
10
schemas.py
10
schemas.py
|
@ -4,9 +4,9 @@ from pydantic import BaseModel
|
|||
class MoviePayload(BaseModel):
|
||||
title: str
|
||||
|
||||
vote_count: int
|
||||
vote_average: float
|
||||
vote_count: int = 0
|
||||
vote_average: float | None = None
|
||||
|
||||
genres: list[str]
|
||||
description: str
|
||||
release_date: str
|
||||
genres: list[str] = []
|
||||
description: str = ""
|
||||
release_date: str | None = None # Use custom formatted string validation
|
||||
|
|
|
@ -51,6 +51,12 @@ def rand_name():
|
|||
|
||||
|
||||
class BaseCrud(unittest.TestCase):
|
||||
def setUp(self):
|
||||
name = f"rand_{random.randint(1, 1000)}"
|
||||
self.create_payload = {
|
||||
"title": name,
|
||||
}
|
||||
|
||||
def test_get_delete_movie_404_if_not_found(self):
|
||||
response = client.get("/movies/-1")
|
||||
assert response.status_code == 404
|
||||
|
@ -58,18 +64,16 @@ class BaseCrud(unittest.TestCase):
|
|||
assert response_delete.status_code == 404
|
||||
|
||||
def test_create_movie_api(self):
|
||||
name = f"rand_{random.randint(1, 1000)}"
|
||||
response = client.post("/movies/", json={"title": name})
|
||||
response = client.post("/movies/", json=self.create_payload)
|
||||
|
||||
assert response.status_code == 200
|
||||
movie_id = response.json()["id"]
|
||||
assert f"Created {name}" in response.json()["message"]
|
||||
assert f"Created {self.create_payload['title']}" in response.json()["message"]
|
||||
response = client.get(f"/movies/{movie_id}")
|
||||
assert response.json()["title"] == name
|
||||
assert response.json()["title"] == self.create_payload["title"]
|
||||
|
||||
def test_delete_movie(self):
|
||||
name = f"rand_{random.randint(1, 1000)}"
|
||||
response = client.post("/movies/", json={"title": name})
|
||||
response = client.post("/movies/", json=self.create_payload)
|
||||
movie_id = response.json()["id"]
|
||||
created_movie_path = f"/movies/{movie_id}"
|
||||
|
||||
|
@ -81,12 +85,12 @@ class BaseCrud(unittest.TestCase):
|
|||
assert response_missing.status_code == 404
|
||||
|
||||
def test_update_movie_api(self):
|
||||
name = f"rand_{random.randint(1, 1000)}"
|
||||
response = client.post("/movies/", json={"title": name, "genres": ["anime"]})
|
||||
self.create_payload["genres"] = ["anime"]
|
||||
response = client.post("/movies/", json=self.create_payload)
|
||||
movie_id = response.json()["id"]
|
||||
created_movie_path = f"/movies/{movie_id}"
|
||||
|
||||
new_name = name.replace("rand", "update")
|
||||
new_name = self.create_payload["title"].replace("rand", "update")
|
||||
new_genres = ["Drama", "war"]
|
||||
response_get = client.get(f"/movies/{movie_id}")
|
||||
|
||||
|
@ -104,6 +108,7 @@ class BaseCrud(unittest.TestCase):
|
|||
|
||||
def test_list_movies(self):
|
||||
response = client.get("/movies/")
|
||||
assert response.status_code == 200
|
||||
# assert response.json() == []
|
||||
|
||||
N = 10
|
||||
|
@ -112,7 +117,8 @@ class BaseCrud(unittest.TestCase):
|
|||
name = rand_name()
|
||||
|
||||
names.append(name)
|
||||
response = client.post("/movies/", json={"title": name})
|
||||
self.create_payload["title"] = name
|
||||
response = client.post("/movies/", json=self.create_payload)
|
||||
assert response.status_code == 200
|
||||
|
||||
movies = client.get("/movies/")
|
||||
|
@ -185,7 +191,7 @@ class ApiTestCase(unittest.TestCase):
|
|||
|
||||
payload.pop(missing_key)
|
||||
|
||||
response = client.post("/pydantic_movies/", json=payload)
|
||||
response = client.post("/movies/", json=payload)
|
||||
|
||||
assert 400 <= response.status_code < 500
|
||||
|
||||
|
@ -215,13 +221,13 @@ class ApiTestCase(unittest.TestCase):
|
|||
|
||||
payload.pop(missing_key)
|
||||
|
||||
response = client.post("/pydantic_movies/", json=payload)
|
||||
response = client.post("/movies/", json=payload)
|
||||
|
||||
assert 400 <= response.status_code < 500
|
||||
|
||||
assert response.status_code == 400
|
||||
|
||||
def test_payload_content_in_and_out_loopback_pydantic(self):
|
||||
def test_payload_content_in_and_out_loopback(self):
|
||||
be_the_fun_in_de_funes = {
|
||||
"id": 1,
|
||||
"title": "La Grande Vadrouille",
|
||||
|
@ -242,7 +248,7 @@ class ApiTestCase(unittest.TestCase):
|
|||
|
||||
payload = {k: be_the_fun_in_de_funes[k] for k in domain_keys}
|
||||
# FIXME
|
||||
response = client.post("/pydantic_movies/", json=payload)
|
||||
response = client.post("/movies/", json=payload)
|
||||
|
||||
assert response.status_code == 200
|
||||
movie_id = response.json()["id"]
|
||||
|
|
Loading…
Reference in New Issue