From e7b10ed4c899062f9161b10ba6e8a9efe84a96b9 Mon Sep 17 00:00:00 2001 From: Josef Olsson <josol381@student.liu.se> Date: Thu, 29 Apr 2021 09:30:27 +0000 Subject: [PATCH] Resolve "Copy contest should create new codes" --- server/app/database/controller/add.py | 7 +++++-- server/app/database/controller/copy.py | 1 - server/app/database/controller/delete.py | 16 +++++++++++++--- server/app/database/models.py | 2 ++ server/tests/test_db.py | 23 ++++++++++++++++++++--- 5 files changed, 40 insertions(+), 9 deletions(-) diff --git a/server/app/database/controller/add.py b/server/app/database/controller/add.py index 128a3398..18bcd4b1 100644 --- a/server/app/database/controller/add.py +++ b/server/app/database/controller/add.py @@ -179,10 +179,13 @@ def _competition_no_slides(name, year, city_id, font=None): item_competition.font = font # Add code for Judge view - code(item_competition.id, 2) + code(2, item_competition.id) # Add code for Audience view - code(item_competition.id, 3) + code(3, item_competition.id) + + # Add code for Operator view + code(4, item_competition.id) item_competition = utils.refresh(item_competition) return item_competition diff --git a/server/app/database/controller/copy.py b/server/app/database/controller/copy.py index 9a1aa671..08d74347 100644 --- a/server/app/database/controller/copy.py +++ b/server/app/database/controller/copy.py @@ -103,7 +103,6 @@ def competition(item_competition_old): name = "Kopia av " + item_competition_old.name item_competition, total = search.competition(name=name) if item_competition: - print(f"{item_competition[total-1].name}, {total=}") name = "Kopia av " + item_competition[total - 1].name item_competition_new = add._competition_no_slides( diff --git a/server/app/database/controller/delete.py b/server/app/database/controller/delete.py index f3dc2dd5..93a4c339 100644 --- a/server/app/database/controller/delete.py +++ b/server/app/database/controller/delete.py @@ -56,10 +56,13 @@ def slide(item_slide): def team(item_team): - """ Deletes team and its question answers. """ + """ Deletes team, its question answers and the code. """ for item_question_answer in item_team.question_answers: question_answers(item_question_answer) + for item_code in item_team.code: + code(item_code) + default(item_team) @@ -86,12 +89,19 @@ def question_answers(item_question_answers): def competition(item_competition): - """ Deletes competition and its slides and teams. """ + """ Deletes competition, its slides, teams and codes. """ for item_slide in item_competition.slides: _slide(item_slide) for item_team in item_competition.teams: team(item_team) + for item_code in item_competition.codes: + code(item_code) - # TODO codes default(item_competition) + + +def code(item_code): + """ Deletes competition code. """ + + default(item_code) diff --git a/server/app/database/models.py b/server/app/database/models.py index 4bb95967..0f909aee 100644 --- a/server/app/database/models.py +++ b/server/app/database/models.py @@ -104,6 +104,7 @@ class Competition(db.Model): slides = db.relationship("Slide", backref="competition") teams = db.relationship("Team", backref="competition") + codes = db.relationship("Code", backref="competition") background_image = db.relationship("Media", uselist=False) @@ -121,6 +122,7 @@ class Team(db.Model): competition_id = db.Column(db.Integer, db.ForeignKey("competition.id"), nullable=False) question_answers = db.relationship("QuestionAnswer", backref="team") + code = db.relationship("Code", backref="team") def __init__(self, name, competition_id): self.name = name diff --git a/server/tests/test_db.py b/server/tests/test_db.py index dd13427c..c504ed14 100644 --- a/server/tests/test_db.py +++ b/server/tests/test_db.py @@ -3,10 +3,10 @@ This file tests the database controller functions. """ import app.database.controller as dbc -from app.database.models import City, Media, MediaType, Role, User +from app.database.models import City, Competition, Media, MediaType, Role, User, Code from tests import app, client, db -from tests.test_helpers import add_default_values, assert_exists, assert_insert_fail +from tests.test_helpers import add_default_values, assert_exists, assert_insert_fail, delete def test_user(client): @@ -58,7 +58,7 @@ def test_copy(client): item_slide_original = item_slides[0] # Inserts several copies of the same slide - num_copies = 10 + num_copies = 3 for _ in range(num_copies): item_slide_copy = dbc.copy.slide(item_slide_original) num_slides += 1 @@ -73,6 +73,23 @@ def test_copy(client): item_slide_original = item_competition_original.slides[order] check_slides_copy(item_slide_original, item_slide, num_slides, order) assert item_slide.competition_id != item_slide_original.competition_id + # TODO: Check that all codes are corectly created + + # Deleting competition deletes all corresponding codes + item_competitions = dbc.get.all(Competition) + for item_competition in item_competitions: + dbc.delete.competition(item_competition) + assert len(dbc.get.all(Code)) == 0 + + # Deleting team deletes the right code + item_competition = dbc.add.competition("tom", 1971, 1) + item_team_1 = dbc.add.team("Lag 1", item_competition.id) + item_team_2 = dbc.add.team("Lag 2", item_competition.id) + assert len(dbc.get.all(Code)) == 5 + dbc.delete.team(item_team_1) + assert len(dbc.get.all(Code)) == 4 + dbc.delete.team(item_team_2) + assert len(dbc.get.all(Code)) == 3 def check_slides_copy(item_slide_original, item_slide_copy, num_slides, order): -- GitLab