From 504008b75b8d88401b5383edec78be3e29fefc3d Mon Sep 17 00:00:00 2001 From: Colin Goutte Date: Fri, 25 Aug 2023 22:41:44 +0200 Subject: [PATCH] RED: For now we only test primitive type to move soon to pydantic --- crud.py | 4 +-- dev.py | 11 +++----- utests/test_api.py | 53 +++++++++++++++++++++++++++++++++---- utests/test_sql_database.py | 4 +-- 4 files changed, 56 insertions(+), 16 deletions(-) diff --git a/crud.py b/crud.py index f238ce9..41f8535 100644 --- a/crud.py +++ b/crud.py @@ -5,8 +5,8 @@ import models # import schemas -def create_movie(db: Session, name: str = ""): - db_movie = models.Movie(name=name) +def create_movie(db: Session, name: str, genres: list[str], description: str = ""): + db_movie = models.Movie(name=name, genres=str(genres), description=description) db.add(db_movie) db.commit() db.refresh(db_movie) diff --git a/dev.py b/dev.py index 0788b24..d106735 100644 --- a/dev.py +++ b/dev.py @@ -35,12 +35,9 @@ async def create_movie( except: data = {} name = name or data["name"] - movie = models.Movie() - movie.name = name - db.add(movie) - db.flush() - db.commit() - db.refresh(movie) + 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} return out @@ -57,7 +54,7 @@ async def get_movie(id_: str, db: Session = Depends(get_db)): @app.get("/movies/") -async def create_movie(db: Session = Depends(get_db)): +async def list_movie(db: Session = Depends(get_db)): movies = crud.get_all_movies(db) out = [ diff --git a/utests/test_api.py b/utests/test_api.py index 7400d0b..b00ebd9 100644 --- a/utests/test_api.py +++ b/utests/test_api.py @@ -100,7 +100,11 @@ class ApiTestCase(unittest.TestCase): "vote_count": 1123, } - domain_keys = {k for k in be_the_fun_in_de_funes if k not in ["id"]} + domain_keys = sorted( + {k for k in be_the_fun_in_de_funes if k not in ["id"]} + ) # Make it deterministic + non_primtive = ["genres", "release_date"] + payload = {k: be_the_fun_in_de_funes[k] for k in domain_keys} # FIXME payload["name"] = payload["title"] @@ -116,7 +120,46 @@ class ApiTestCase(unittest.TestCase): for attribute_name in domain_keys: with self.subTest(attribute_name=attribute_name): assert attribute_name in loopback_payload - assert ( - loopback_payload[attribute_name] - == be_the_fun_in_de_funes[attribute_name] - ) + if attribute_name not in non_primtive: + assert ( + loopback_payload[attribute_name] + == be_the_fun_in_de_funes[attribute_name] + ) + + @unittest.expectedFailure + def test_payload_content_in_and_out_loopback_non_primitive(self): + be_the_fun_in_de_funes = { + "id": 1, + "title": "La Grande Vadrouille", + "description": "During World War II, two French civilians and a downed English Bomber Crew set " + "out from Paris to cross the demarcation line between Nazi-occupied Northern France and the " + "South. From there they will be able to escape to England. First, they must avoid German troops -" + "and the consequences of their own blunders.", + "genres": ["Comedy", "War"], + "release_date": "1966-12-07", + "vote_average": 7.7, + "vote_count": 1123, + } + + domain_keys = sorted( + {k for k in be_the_fun_in_de_funes if k not in ["id"]} + ) # Make it deterministic + 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 + movie_id = response.json()["id"] + + loopback_fetch = client.get(f"/movies/{movie_id}") + assert loopback_fetch.status_code == 200 + loopback_payload = loopback_fetch.json() + # check for keys + for attribute_name in domain_keys: + assert ( + loopback_payload[attribute_name] + == be_the_fun_in_de_funes[attribute_name] + ) diff --git a/utests/test_sql_database.py b/utests/test_sql_database.py index 560df89..019a9a1 100644 --- a/utests/test_sql_database.py +++ b/utests/test_sql_database.py @@ -76,7 +76,7 @@ def test_sample_crud(): name = rand_name() with db_context() as db: - movie = crud.create_movie(db, name=name) + movie = crud.create_movie(db, name=name, genres=["Yes", "No"]) assert movie.name == name @@ -92,7 +92,7 @@ def test_list_movies(): name = rand_name() names.append(name) - crud.create_movie(db, name=name) + crud.create_movie(db, name=name, genres=["Animated", "Paropaganda"]) movies = client.get("movies") movies_by_name = {m["name"]: m for m in movies.json()}