RED: For now we only test primitive type to move soon to pydantic

This commit is contained in:
Colin Goutte 2023-08-25 22:41:44 +02:00
parent b309418af4
commit 504008b75b
4 changed files with 56 additions and 16 deletions

View File

@ -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)

11
dev.py
View File

@ -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 = [

View File

@ -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]
)

View File

@ -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()}