Skip to content
Snippets Groups Projects
Commit 204c4cbb authored by Albin Henriksson's avatar Albin Henriksson
Browse files

Merge branch 'dev' of...

Merge branch 'dev' of https://gitlab.liu.se/tddd96-grupp11/teknikattan-scoring-system into 145-add-authorization-to-socketio
parents 42fda1ff e7b10ed4
No related branches found
No related tags found
1 merge request!115Resolve "Add authorization to socketio"
Pipeline #43101 failed
......@@ -56,6 +56,7 @@ export interface Question extends NameID {
slide_id: number
total_score: number
type_id: number
correcting_instructions: string
}
export interface QuestionAlternative {
......
......@@ -36,5 +36,6 @@ export interface RichQuestion {
total_score: number
question_type: QuestionType
type_id: number
correcting_instructions: string
alternatives: QuestionAlternative[]
}
......@@ -29,7 +29,7 @@ const Instructions = ({ activeSlide, competitionId }: InstructionsProps) => {
.put(
`/api/competitions/${competitionId}/slides/${activeSlide.id}/questions/${activeSlide.questions[0].id}`,
{
instructions: event.target.value,
correcting_instructions: event.target.value,
}
)
.then(() => {
......@@ -55,7 +55,7 @@ const Instructions = ({ activeSlide, competitionId }: InstructionsProps) => {
<Center>
<TextField
id="outlined-basic"
defaultValue={''}
defaultValue={activeSlide.questions[0].correcting_instructions}
onChange={updateInstructionsText}
variant="outlined"
fullWidth={true}
......
......@@ -20,7 +20,7 @@ const JudgeScoringInstructions = ({ question }: JudgeScoringInstructionsProps) =
return (
<JudgeScoringInstructionsContainer elevation={3}>
<Typography variant="h4">Rättningsinstruktioner</Typography>
<Typography variant="body1">Såhär rättar du denhär frågan</Typography>
<Typography variant="body1">{question?.correcting_instructions}</Typography>
</JudgeScoringInstructionsContainer>
)
}
......
......@@ -14,11 +14,13 @@ question_parser_add = reqparse.RequestParser()
question_parser_add.add_argument("name", type=str, default=None, location="json")
question_parser_add.add_argument("total_score", type=int, default=None, location="json")
question_parser_add.add_argument("type_id", type=int, required=True, location="json")
question_parser_add.add_argument("correcting_instructions", type=str, default=None, location="json")
question_parser_edit = reqparse.RequestParser()
question_parser_edit.add_argument("name", type=str, default=sentinel, location="json")
question_parser_edit.add_argument("total_score", type=int, default=sentinel, location="json")
question_parser_edit.add_argument("type_id", type=int, default=sentinel, location="json")
question_parser_edit.add_argument("correcting_instructions", type=str, default=sentinel, location="json")
@api.route("/questions")
......
......@@ -25,6 +25,7 @@ class QuestionSchemaRich(RichSchema):
total_score = ma.auto_field()
slide_id = ma.auto_field()
type_id = ma.auto_field()
correcting_instructions = ma.auto_field()
alternatives = fields.Nested(schemas.QuestionAlternativeSchema, many=True)
......
......@@ -63,6 +63,7 @@ class QuestionSchema(BaseSchema):
total_score = ma.auto_field()
type_id = ma.auto_field()
slide_id = ma.auto_field()
correcting_instructions = ma.auto_field()
class QuestionAnswerSchema(BaseSchema):
......
......@@ -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
......@@ -244,12 +247,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, slide_id):
def question(name, total_score, type_id, slide_id, correcting_instructions=None):
"""
Adds a question to the specified slide using the provided arguments.
"""
return db_add(Question(name, total_score, type_id, slide_id))
return db_add(Question(name, total_score, type_id, slide_id, correcting_instructions))
def question_alternative(text, value, question_id):
......
......@@ -24,6 +24,7 @@ def _question(item_question_old, slide_id):
item_question_old.total_score,
item_question_old.type_id,
slide_id,
item_question_old.correcting_instructions,
)
)
......@@ -102,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(
......
......@@ -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)
......@@ -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
......@@ -154,15 +156,17 @@ class Question(db.Model):
total_score = db.Column(db.Integer, nullable=False, default=1)
type_id = db.Column(db.Integer, db.ForeignKey("question_type.id"), nullable=False)
slide_id = db.Column(db.Integer, db.ForeignKey("slide.id"), nullable=False)
correcting_instructions = db.Column(db.Text, nullable=True, default=None)
question_answers = db.relationship("QuestionAnswer", backref="question")
alternatives = db.relationship("QuestionAlternative", backref="question")
def __init__(self, name, total_score, type_id, slide_id):
def __init__(self, name, total_score, type_id, slide_id, correcting_instructions):
self.name = name
self.total_score = total_score
self.type_id = type_id
self.slide_id = slide_id
self.correcting_instructions = correcting_instructions
class QuestionAlternative(db.Model):
......
......@@ -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):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment