From d1f5e06448ea46a124a11e087668859a6c1f9647 Mon Sep 17 00:00:00 2001
From: robban64 <carl@schonfelder.se>
Date: Thu, 22 Apr 2021 11:47:02 +0200
Subject: [PATCH] fix: dbc.add use ID instead of item as argument

---
 server/app/apis/competitions.py        |  2 +-
 server/app/apis/components.py          |  3 +--
 server/app/apis/questions.py           |  5 ++---
 server/app/apis/slides.py              |  8 +++-----
 server/app/apis/teams.py               |  3 +--
 server/app/database/controller/add.py  | 20 ++++++++++----------
 server/app/database/controller/copy.py |  4 ++--
 server/populate.py                     | 10 +++++-----
 server/tests/test_app.py               |  2 ++
 server/tests/test_helpers.py           |  8 ++++----
 10 files changed, 31 insertions(+), 34 deletions(-)

diff --git a/server/app/apis/competitions.py b/server/app/apis/competitions.py
index eeea67bb..3c71f8c2 100644
--- a/server/app/apis/competitions.py
+++ b/server/app/apis/competitions.py
@@ -25,7 +25,7 @@ class CompetitionsList(Resource):
         item = dbc.add.competition(**args)
 
         # Add default slide
-        dbc.add.slide(item)
+        dbc.add.slide(item.id)
         return item_response(schema.dump(item))
 
 
diff --git a/server/app/apis/components.py b/server/app/apis/components.py
index c712a4e6..c895f023 100644
--- a/server/app/apis/components.py
+++ b/server/app/apis/components.py
@@ -46,6 +46,5 @@ class ComponentList(Resource):
     @check_jwt(editor=True)
     def post(self, competition_id, slide_id):
         args = component_create_parser.parse_args()
-        item_slide = dbc.get.slide(competition_id, slide_id)
-        item = dbc.add.component(item_slide=item_slide, **args)
+        item = dbc.add.component(slide_id=slide_id, **args)
         return item_response(schema.dump(item))
diff --git a/server/app/apis/questions.py b/server/app/apis/questions.py
index 9b519e5f..5797872a 100644
--- a/server/app/apis/questions.py
+++ b/server/app/apis/questions.py
@@ -30,10 +30,9 @@ class QuestionListForSlide(Resource):
         return list_response(list_schema.dump(items))
 
     @check_jwt(editor=True)
-    def post(self, slide_id, competition_id):
+    def post(self, competition_id, slide_id):
         args = question_parser.parse_args(strict=True)
-        item_slide = dbc.get.slide(competition_id, slide_id)
-        item = dbc.add.question(item_slide=item_slide, **args)
+        item = dbc.add.question(slide_id=slide_id, **args)
         return item_response(schema.dump(item))
 
 
diff --git a/server/app/apis/slides.py b/server/app/apis/slides.py
index fffdff0b..72562480 100644
--- a/server/app/apis/slides.py
+++ b/server/app/apis/slides.py
@@ -22,11 +22,9 @@ class SlidesList(Resource):
 
     @check_jwt(editor=True)
     def post(self, competition_id):
-        item_comp = dbc.get.one(Competition, competition_id)
-        item_slide = dbc.add.slide(item_comp)
-        dbc.add.question(f"Fråga {item_slide.order + 1}", 10, 0, item_slide)
-        dbc.utils.refresh(item_comp)
-        return list_response(list_schema.dump(item_comp.slides))
+        item_slide = dbc.add.slide(competition_id)
+        dbc.add.question(f"Fråga {item_slide.order + 1}", 10, 0, item_slide.id)
+        return item_response(schema.dump(item_slide))
 
 
 @api.route("/<slide_id>")
diff --git a/server/app/apis/teams.py b/server/app/apis/teams.py
index 535de695..6596244c 100644
--- a/server/app/apis/teams.py
+++ b/server/app/apis/teams.py
@@ -23,8 +23,7 @@ class TeamsList(Resource):
     @check_jwt(editor=True)
     def post(self, competition_id):
         args = team_parser.parse_args(strict=True)
-        item_comp = dbc.get.one(Competition, competition_id)
-        item_team = dbc.add.team(args["name"], item_comp)
+        item_team = dbc.add.team(args["name"], competition_id)
         return item_response(schema.dump(item_team))
 
 
diff --git a/server/app/database/controller/add.py b/server/app/database/controller/add.py
index 7b77732b..73279056 100644
--- a/server/app/database/controller/add.py
+++ b/server/app/database/controller/add.py
@@ -91,13 +91,13 @@ def city(name):
     return db_add(City(name))
 
 
-def component(type_id, item_slide, data, x=0, y=0, w=0, h=0):
+def component(type_id, slide_id, data, x=0, y=0, w=0, h=0):
     """
     Adds a component to the slide at the specified coordinates with the
     provided size and data .
     """
 
-    return db_add(Component(item_slide.id, type_id, data, x, y, w, h))
+    return db_add(Component(slide_id, type_id, data, x, y, w, h))
 
 
 def image(filename, user_id):
@@ -114,12 +114,12 @@ def user(email, password, role_id, city_id, name=None):
     return db_add(User(email, password, role_id, city_id, name))
 
 
-def question(name, total_score, type_id, item_slide):
+def question(name, total_score, type_id, slide_id):
     """
     Adds a question to the specified slide using the provided arguments.
     """
 
-    return db_add(Question(name, total_score, type_id, item_slide.id))
+    return db_add(Question(name, total_score, type_id, slide_id))
 
 
 def question_alternative(text, value, question_id):
@@ -137,10 +137,10 @@ def code(pointer, view_type_id):
     return db_add(Code(code_string, pointer, view_type_id))
 
 
-def team(name, item_competition):
+def team(name, competition_id):
     """ Adds a team with the specified name to the provided competition. """
 
-    item = db_add(Team(name, item_competition.id))
+    item = db_add(Team(name, competition_id))
 
     # Add code for the team
     code(item.id, 1)
@@ -148,11 +148,11 @@ def team(name, item_competition):
     return item
 
 
-def slide(item_competition):
+def slide(competition_id):
     """ Adds a slide to the provided competition. """
 
-    order = Slide.query.filter(Slide.competition_id == item_competition.id).count()  # first element has index 0
-    return db_add(Slide(order, item_competition.id))
+    order = Slide.query.filter(Slide.competition_id == competition_id).count()  # first element has index 0
+    return db_add(Slide(order, competition_id))
 
 
 def competition(name, year, city_id):
@@ -164,7 +164,7 @@ def competition(name, year, city_id):
     item_competition = _competition(name, year, city_id)
 
     # Add one slide for the competition
-    slide(item_competition)
+    slide(item_competition.id)
 
     # TODO: Add two teams
 
diff --git a/server/app/database/controller/copy.py b/server/app/database/controller/copy.py
index a6b408ec..cd6bbd77 100644
--- a/server/app/database/controller/copy.py
+++ b/server/app/database/controller/copy.py
@@ -40,7 +40,7 @@ def _component(item_component, item_slide_new):
 
     add.component(
         item_component.type_id,
-        item_slide_new,
+        item_slide_new.id,
         item_component.data,
         item_component.x,
         item_component.y,
@@ -66,7 +66,7 @@ def slide_to_competition(item_slide_old, item_competition):
     Does not copy team, question answers.
     """
 
-    item_slide_new = add.slide(item_competition)
+    item_slide_new = add.slide(item_competition.id)
 
     # Copy all fields
     item_slide_new.title = item_slide_old.title
diff --git a/server/populate.py b/server/populate.py
index c9813b40..d842671e 100644
--- a/server/populate.py
+++ b/server/populate.py
@@ -50,8 +50,8 @@ def _add_items():
         dbc.edit.default(item_comp.slides[0], timer=5, title="test-slide-title")
 
         # Add two more slides to competition
-        dbc.add.slide(item_comp)
-        dbc.add.slide(item_comp)
+        dbc.add.slide(item_comp.id)
+        dbc.add.slide(item_comp.id)
 
         # Add slides
         for j, item_slide in enumerate(item_comp.slides):
@@ -67,7 +67,7 @@ def _add_items():
                 name=f"Question {j}: {question_types_items[j].name}",
                 total_score=j,
                 type_id=question_types_items[j].id,
-                item_slide=item_slide,
+                slide_id=item_slide.id,
             )
 
             for i in range(3):
@@ -80,7 +80,7 @@ def _add_items():
                 y = random.randrange(1, 500)
                 w = random.randrange(150, 400)
                 h = random.randrange(150, 400)
-                dbc.add.component(1, item_slide, {"text": f"hej{k}"}, x, y, w, h)
+                dbc.add.component(1, item_slide.id, {"text": f"hej{k}"}, x, y, w, h)
 
         # TODO: Remove comments when slide without questions is fixed
         # item_slide = dbc.add.slide(item_comp)
@@ -92,7 +92,7 @@ def _add_items():
 
         # Add teams
         for name in teams:
-            dbc.add.team(f"{name}{i}", item_comp)
+            dbc.add.team(f"{name}{i}", item_comp.id)
 
 
 if __name__ == "__main__":
diff --git a/server/tests/test_app.py b/server/tests/test_app.py
index 48e74c5a..b268f3e5 100644
--- a/server/tests/test_app.py
+++ b/server/tests/test_app.py
@@ -258,6 +258,8 @@ def test_slide_api(client):
     # Add slide
     response, body = post(client, f"/api/competitions/{CID}/slides", headers=headers)
     assert response.status_code == codes.OK
+
+    response, body = get(client, f"/api/competitions/{CID}/slides", headers=headers)
     assert body["count"] == 4
 
     # Get slide
diff --git a/server/tests/test_helpers.py b/server/tests/test_helpers.py
index 190e248c..a90574bb 100644
--- a/server/tests/test_helpers.py
+++ b/server/tests/test_helpers.py
@@ -43,8 +43,8 @@ def add_default_values():
     for j in range(2):
         item_comp = dbc.add.competition(f"Tävling {j}", 2012, item_city.id)
         # Add two more slides to competition
-        dbc.add.slide(item_comp)
-        dbc.add.slide(item_comp)
+        dbc.add.slide(item_comp.id)
+        dbc.add.slide(item_comp.id)
 
         # Add slides
         for i, item_slide in enumerate(item_comp.slides):
@@ -56,10 +56,10 @@ def add_default_values():
             dbc.utils.commit_and_refresh(item_slide)
 
             # Add question to competition
-            dbc.add.question(name=f"Q{i+1}", total_score=i + 1, type_id=1, item_slide=item_slide)
+            dbc.add.question(name=f"Q{i+1}", total_score=i + 1, type_id=1, slide_id=item_slide.id)
 
             # Add text component
-            dbc.add.component(1, item_slide, {"text": "Text"}, i, 2 * i, 3 * i, 4 * i)
+            dbc.add.component(1, item_slide.id, {"text": "Text"}, i, 2 * i, 3 * i, 4 * i)
 
 
 def get_body(response):
-- 
GitLab