Green: we can get simple attributes back and forth

This commit is contained in:
Colin Goutte 2023-08-25 22:58:09 +02:00
parent 504008b75b
commit a030fb0b4f
5 changed files with 39 additions and 24 deletions

18
crud.py
View File

@ -5,8 +5,22 @@ import models
# import schemas
def create_movie(db: Session, name: str, genres: list[str], description: str = ""):
db_movie = models.Movie(name=name, genres=str(genres), description=description)
def create_movie(
db: Session,
*,
title: str,
genres: list[str],
description: str = "",
vote_average: float | None = None,
vote_count: int | None = None
):
db_movie = models.Movie(
title=title,
genres=str(genres),
description=description,
vote_average=vote_average,
vote_count=vote_count,
)
db.add(db_movie)
db.commit()
db.refresh(db_movie)

15
dev.py
View File

@ -34,11 +34,16 @@ async def create_movie(
data = await request.json()
except:
data = {}
name = name or data["name"]
genres = data.get("genres", ["Unknown"])
description = data.get("description", "")
movie = crud.create_movie(db, name=name, genres=genres, description=description)
out = {"message": f"Created {movie.name} XX", "id": movie.id}
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

View File

@ -7,7 +7,6 @@ class Movie(Base):
id = Column(Integer, primary_key=True, index=True)
name = Column(String, index=True)
title = Column(String, index=True)
vote_count = Column(Integer)

View File

@ -65,24 +65,24 @@ def test_list_movies():
name = rand_name()
names.append(name)
response = client.post("/movies/", json={"name": name})
response = client.post("/movies/", json={"title": name})
assert response.status_code == 200
movies = client.get("/movies/")
movies_by_name = {m["name"]: m for m in movies.json()}
found = list(movies_by_name[name] for name in names)
assert all(movies_by_name[name] for name in names)
movies_by_title = {m["title"]: m for m in movies.json()}
found = list(movies_by_title[title] for title in names)
assert all(movies_by_title[title] for title in names)
def test_create_movie_api():
name = f"rand_{random.randint(1, 1000)}"
response = client.post("/movies/", json={"name": name})
response = client.post("/movies/", json={"title": name})
assert response.status_code == 200
movie_id = response.json()["id"]
assert f"Created {name}" in response.json()["message"]
response = client.get(f"/movies/{movie_id}")
assert response.json()["name"] == name
assert response.json()["title"] == name
class ApiTestCase(unittest.TestCase):
@ -107,7 +107,6 @@ class ApiTestCase(unittest.TestCase):
payload = {k: be_the_fun_in_de_funes[k] for k in domain_keys}
# FIXME
payload["name"] = payload["title"]
response = client.post("/movies/", json=payload)
assert response.status_code == 200
@ -147,8 +146,6 @@ class ApiTestCase(unittest.TestCase):
non_primtive = ["genres", "release_date"]
payload = {k: be_the_fun_in_de_funes[k] for k in domain_keys}
# FIXME
payload["name"] = payload["title"]
response = client.post("/movies/", json=payload)
assert response.status_code == 200

View File

@ -68,16 +68,16 @@ def rand_name():
def test_create_moviem_models():
name = rand_name()
movie = Movie(name=name)
assert movie.name == name
movie = Movie(title=name)
assert movie.title == name
def test_sample_crud():
name = rand_name()
with db_context() as db:
movie = crud.create_movie(db, name=name, genres=["Yes", "No"])
assert movie.name == name
movie = crud.create_movie(db, title=name, genres=["Yes", "No"])
assert movie.title == name
def test_list_movies():
@ -92,8 +92,8 @@ def test_list_movies():
name = rand_name()
names.append(name)
crud.create_movie(db, name=name, genres=["Animated", "Paropaganda"])
crud.create_movie(db, title=name, genres=["Animated", "Paropaganda"])
movies = client.get("movies")
movies_by_name = {m["name"]: m for m in movies.json()}
assert all(movies_by_name[name] for name in names)
movies_by_title = {m["title"]: m for m in movies.json()}
assert all(movies_by_title[name] for name in names)