From af6a3996a8e67b04fd2d47a0f8570c74b4799aee Mon Sep 17 00:00:00 2001
From: Joffjoff5000 <Joffjoff5000@gmail.com>
Date: Sun, 11 Apr 2021 20:18:24 +0200
Subject: [PATCH] Fully test slides from db

---
 server/app/apis/competitions.py |  2 +-
 server/tests/test_app.py        | 45 ++++++++++++++++++++++++++-------
 server/tests/test_db.py         | 35 +++++++++++++++++++++++--
 server/tests/test_helpers.py    | 20 ++++++++++++++-
 4 files changed, 89 insertions(+), 13 deletions(-)

diff --git a/server/app/apis/competitions.py b/server/app/apis/competitions.py
index 9f17a932..55cd3227 100644
--- a/server/app/apis/competitions.py
+++ b/server/app/apis/competitions.py
@@ -27,10 +27,10 @@ class CompetitionsList(Resource):
 
         # Add competition
         item = dbc.add.competition(name, year, city_id)
+        dbc.refresh(item)
 
         # Add default slide
         dbc.add.slide(item)
-
         dbc.refresh(item)
         return item_response(schema.dump(item))
 
diff --git a/server/tests/test_app.py b/server/tests/test_app.py
index 7bb86fba..f9b2da9b 100644
--- a/server/tests/test_app.py
+++ b/server/tests/test_app.py
@@ -1,5 +1,5 @@
 import app.core.http_codes as codes
-from app.core.models import Blacklist
+from app.core.models import Slide
 from flask_sqlalchemy import model
 
 from tests import app, client, db
@@ -74,35 +74,39 @@ def test_competition_api(client):
     response, body = post(client, "/api/competitions", data, headers=headers)
     assert response.status_code == codes.OK
     assert body["name"] == "c1"
+    competition_id = body["id"]
+
+    # Save number of slides
+    num_slides = len(Slide.query.all())
 
     # Get competition
-    response, body = get(client, "/api/competitions/1", headers=headers)
+    response, body = get(client, f"/api/competitions/{competition_id}", headers=headers)
     assert response.status_code == codes.OK
     assert body["name"] == "c1"
 
-    response, body = post(client, "/api/competitions/1/slides", {}, headers=headers)
+    response, body = post(client, f"/api/competitions/{competition_id}/slides", {}, headers=headers)
     assert response.status_code == codes.OK
 
-    response, body = get(client, "/api/competitions/1/slides", headers=headers)
+    response, body = get(client, f"/api/competitions/{competition_id}/slides", headers=headers)
     assert response.status_code == codes.OK
     assert len(body["items"]) == 2
 
-    response, body = put(client, "/api/competitions/1/slides/1/order", {"order": 1}, headers=headers)
+    response, body = put(client, f"/api/competitions/{competition_id}/slides/{num_slides}/order", {"order": 1}, headers=headers)
     assert response.status_code == codes.OK
 
-    response, body = post(client, "/api/competitions/1/teams", {"name": "t1"}, headers=headers)
+    response, body = post(client, f"/api/competitions/{competition_id}/teams", {"name": "t1"}, headers=headers)
     assert response.status_code == codes.OK
 
-    response, body = get(client, "/api/competitions/1/teams", headers=headers)
+    response, body = get(client, f"/api/competitions/{competition_id}/teams", headers=headers)
     assert response.status_code == codes.OK
     assert len(body["items"]) == 1
     assert body["items"][0]["name"] == "t1"
 
-    response, body = delete(client, "/api/competitions/1", {}, headers=headers)
+    response, body = delete(client, f"/api/competitions/{competition_id}", {}, headers=headers)
     assert response.status_code == codes.OK
 
 
-def test_auth_and_users_api(client):
+def test_auth_and_user_api(client):
     add_default_values()
 
     # Login in with default user
@@ -220,3 +224,26 @@ def test_auth_and_users_api(client):
     # TODO: Check that user was blacklisted
     # Look for current users jwt in blacklist
     # Blacklist.query.filter(Blacklist.jti == )
+
+
+def test_slide_api(client):
+    add_default_values()
+
+    # Login in with default user
+    response, body = post(client, "/api/auth/login", {"email": "test@test.se", "password": "password"})
+    assert response.status_code == codes.OK
+    headers = {"Authorization": "Bearer " + body["access_token"]}
+
+    # Get slides
+    response, body = get(client, "/api/competitions/1/slides", headers=headers)
+    assert response.status_code == codes.OK
+    assert body["count"] == 0
+
+    # # Get slides
+    # response, body = get(client, "/api/competitions/2/slides", headers=headers)
+    # assert response.status_code == codes.OK
+    # assert body["count"] == 3
+
+    # Add question
+    # response, body = get(client, "/api/competitions/1", headers=headers)
+    # assert response.status_code == codes.UNAUTHORIZED
diff --git a/server/tests/test_db.py b/server/tests/test_db.py
index 49ca53ad..8b3a02f7 100644
--- a/server/tests/test_db.py
+++ b/server/tests/test_db.py
@@ -60,7 +60,7 @@ def test_question(client):
     item_competition_2 = Competition.query.filter_by(name="teknik9").first()
 
     assert item_competition is not None
-    assert item_competition.id == 1
+    assert item_competition.id == 3
     assert item_competition.city.name == "Linköping"
 
     # Add teams
@@ -85,7 +85,7 @@ def test_question(client):
 
     # Try add slide with same order
     assert_insert_fail(Slide, 1, item_competition.id)
-    assert_exists(Slide, 1, order=1)
+    assert_exists(Slide, 2, order=1)
 
     item_slide1 = Slide.query.filter_by(order=0).first()
     item_slide2 = Slide.query.filter_by(order=1).first()
@@ -109,3 +109,34 @@ def test_question(client):
     item_q2 = Question.query.filter_by(name="Fråga2").first()
     assert item_q1.type.name == "Boolean"
     assert item_q2.type.name == "Multiple"
+
+
+def test_slide(client):
+    add_default_values()
+
+    # Get all slides
+    slides = Slide.query.all()
+    item_slides = dbc.get.search_slide()
+    assert slides == item_slides[0]
+
+    # Search using all parameters
+    item_comp = Competition.query.filter(Competition.name == "Tävling 1").first()
+    aux = dbc.get.search_slide(slide_order=1, title="Title 1", body="Body 1", competition_id=item_comp.id)
+    item_slide = aux[0][0]
+    assert item_comp.slides[1] == item_slide
+
+    # Edit all parameters of a slide
+    title = "Ändrad titel"
+    timer = 42
+    slide_id = item_slide.id
+    dbc.edit.slide(item_slide, title=title, timer=timer)
+    aux = dbc.get.search_slide(slide_order=1, title=title, body="Body 1", competition_id=item_comp.id)
+    item_slide = aux[0][0]
+    assert item_slide.id == slide_id
+    assert item_slide.title == title
+    assert item_slide.timer == timer
+
+    # Delete slide
+    aux = dbc.get.search_slide(slide_order=1, competition_id=item_comp.id)
+    item_slide = aux[0][0]
+    dbc.delete.slide(item_slide)
diff --git a/server/tests/test_helpers.py b/server/tests/test_helpers.py
index 6077e892..5e871b70 100644
--- a/server/tests/test_helpers.py
+++ b/server/tests/test_helpers.py
@@ -2,7 +2,7 @@ import json
 
 import app.core.controller as dbc
 from app.core import db
-from app.core.models import City, MediaType, QuestionType, Role, User
+from app.core.models import City, Role
 
 
 def add_default_values():
@@ -31,6 +31,24 @@ def add_default_values():
     # Add user with role and city
     dbc.add.user("test@test.se", "password", item_admin.id, item_city.id, "Olle Olsson")
 
+    # Add competition
+    dbc.add.competition("Tom tävling", 2012, item_city.id)
+    item_comp = dbc.add.competition("Tävling 1", 2012, item_city.id)
+
+    # Add slides
+    for i in range(len(question_types)):
+        # Add slide to competition
+        item_slide = dbc.add.slide(item_comp)
+
+        # Populate slide with data
+        item_slide.title = f"Title {i}"
+        item_slide.body = f"Body {i}"
+        item_slide.timer = 100 + i
+        # item_slide.settings = "{}"
+
+        # Add question to competition
+        dbc.add.question(f"Q{i+1}", i + 1, i, item_slide)
+
 
 def get_body(response):
     try:
-- 
GitLab