Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • tddd96-grupp11/teknikattan-scoring-system
1 result
Show changes
Commits on Source (2)
...@@ -56,6 +56,7 @@ export interface Question extends NameID { ...@@ -56,6 +56,7 @@ export interface Question extends NameID {
slide_id: number slide_id: number
total_score: number total_score: number
type_id: number type_id: number
correcting_instructions: string
} }
export interface QuestionAlternative { export interface QuestionAlternative {
......
...@@ -36,5 +36,6 @@ export interface RichQuestion { ...@@ -36,5 +36,6 @@ export interface RichQuestion {
total_score: number total_score: number
question_type: QuestionType question_type: QuestionType
type_id: number type_id: number
correcting_instructions: string
alternatives: QuestionAlternative[] alternatives: QuestionAlternative[]
} }
...@@ -30,7 +30,7 @@ const Instructions = ({ activeSlide, competitionId }: InstructionsProps) => { ...@@ -30,7 +30,7 @@ const Instructions = ({ activeSlide, competitionId }: InstructionsProps) => {
.put( .put(
`/api/competitions/${competitionId}/slides/${activeSlide.id}/questions/${activeSlide.questions[0].id}`, `/api/competitions/${competitionId}/slides/${activeSlide.id}/questions/${activeSlide.questions[0].id}`,
{ {
instructions: event.target.value, correcting_instructions: event.target.value,
} }
) )
.then(() => { .then(() => {
...@@ -56,7 +56,7 @@ const Instructions = ({ activeSlide, competitionId }: InstructionsProps) => { ...@@ -56,7 +56,7 @@ const Instructions = ({ activeSlide, competitionId }: InstructionsProps) => {
<Center> <Center>
<TextField <TextField
id="outlined-basic" id="outlined-basic"
defaultValue={''} defaultValue={activeSlide.questions[0].correcting_instructions}
onChange={updateInstructionsText} onChange={updateInstructionsText}
variant="outlined" variant="outlined"
fullWidth={true} fullWidth={true}
......
...@@ -20,7 +20,7 @@ const JudgeScoringInstructions = ({ question }: JudgeScoringInstructionsProps) = ...@@ -20,7 +20,7 @@ const JudgeScoringInstructions = ({ question }: JudgeScoringInstructionsProps) =
return ( return (
<JudgeScoringInstructionsContainer elevation={3}> <JudgeScoringInstructionsContainer elevation={3}>
<Typography variant="h4">Rättningsinstruktioner</Typography> <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> </JudgeScoringInstructionsContainer>
) )
} }
......
...@@ -14,11 +14,13 @@ question_parser_add = reqparse.RequestParser() ...@@ -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("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("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("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 = reqparse.RequestParser()
question_parser_edit.add_argument("name", type=str, default=sentinel, location="json") 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("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("type_id", type=int, default=sentinel, location="json")
question_parser_edit.add_argument("correcting_instructions", type=str, default=sentinel, location="json")
@api.route("/questions") @api.route("/questions")
......
...@@ -25,6 +25,7 @@ class QuestionSchemaRich(RichSchema): ...@@ -25,6 +25,7 @@ class QuestionSchemaRich(RichSchema):
total_score = ma.auto_field() total_score = ma.auto_field()
slide_id = ma.auto_field() slide_id = ma.auto_field()
type_id = ma.auto_field() type_id = ma.auto_field()
correcting_instructions = ma.auto_field()
alternatives = fields.Nested(schemas.QuestionAlternativeSchema, many=True) alternatives = fields.Nested(schemas.QuestionAlternativeSchema, many=True)
......
...@@ -63,6 +63,7 @@ class QuestionSchema(BaseSchema): ...@@ -63,6 +63,7 @@ class QuestionSchema(BaseSchema):
total_score = ma.auto_field() total_score = ma.auto_field()
type_id = ma.auto_field() type_id = ma.auto_field()
slide_id = ma.auto_field() slide_id = ma.auto_field()
correcting_instructions = ma.auto_field()
class QuestionAnswerSchema(BaseSchema): class QuestionAnswerSchema(BaseSchema):
......
...@@ -179,10 +179,13 @@ def _competition_no_slides(name, year, city_id, font=None): ...@@ -179,10 +179,13 @@ def _competition_no_slides(name, year, city_id, font=None):
item_competition.font = font item_competition.font = font
# Add code for Judge view # Add code for Judge view
code(item_competition.id, 2) code(2, item_competition.id)
# Add code for Audience view # 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) item_competition = utils.refresh(item_competition)
return item_competition return item_competition
...@@ -244,12 +247,12 @@ def user(email, password, role_id, city_id, name=None): ...@@ -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)) 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. 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): def question_alternative(text, value, question_id):
......
...@@ -24,6 +24,7 @@ def _question(item_question_old, slide_id): ...@@ -24,6 +24,7 @@ def _question(item_question_old, slide_id):
item_question_old.total_score, item_question_old.total_score,
item_question_old.type_id, item_question_old.type_id,
slide_id, slide_id,
item_question_old.correcting_instructions,
) )
) )
...@@ -102,7 +103,6 @@ def competition(item_competition_old): ...@@ -102,7 +103,6 @@ def competition(item_competition_old):
name = "Kopia av " + item_competition_old.name name = "Kopia av " + item_competition_old.name
item_competition, total = search.competition(name=name) item_competition, total = search.competition(name=name)
if item_competition: if item_competition:
print(f"{item_competition[total-1].name}, {total=}")
name = "Kopia av " + item_competition[total - 1].name name = "Kopia av " + item_competition[total - 1].name
item_competition_new = add._competition_no_slides( item_competition_new = add._competition_no_slides(
......
...@@ -56,10 +56,13 @@ def slide(item_slide): ...@@ -56,10 +56,13 @@ def slide(item_slide):
def team(item_team): 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: for item_question_answer in item_team.question_answers:
question_answers(item_question_answer) question_answers(item_question_answer)
for item_code in item_team.code:
code(item_code)
default(item_team) default(item_team)
...@@ -86,12 +89,19 @@ def question_answers(item_question_answers): ...@@ -86,12 +89,19 @@ def question_answers(item_question_answers):
def competition(item_competition): 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: for item_slide in item_competition.slides:
_slide(item_slide) _slide(item_slide)
for item_team in item_competition.teams: for item_team in item_competition.teams:
team(item_team) team(item_team)
for item_code in item_competition.codes:
code(item_code)
# TODO codes
default(item_competition) default(item_competition)
def code(item_code):
""" Deletes competition code. """
default(item_code)
...@@ -104,6 +104,7 @@ class Competition(db.Model): ...@@ -104,6 +104,7 @@ class Competition(db.Model):
slides = db.relationship("Slide", backref="competition") slides = db.relationship("Slide", backref="competition")
teams = db.relationship("Team", backref="competition") teams = db.relationship("Team", backref="competition")
codes = db.relationship("Code", backref="competition")
background_image = db.relationship("Media", uselist=False) background_image = db.relationship("Media", uselist=False)
...@@ -121,6 +122,7 @@ class Team(db.Model): ...@@ -121,6 +122,7 @@ class Team(db.Model):
competition_id = db.Column(db.Integer, db.ForeignKey("competition.id"), nullable=False) competition_id = db.Column(db.Integer, db.ForeignKey("competition.id"), nullable=False)
question_answers = db.relationship("QuestionAnswer", backref="team") question_answers = db.relationship("QuestionAnswer", backref="team")
code = db.relationship("Code", backref="team")
def __init__(self, name, competition_id): def __init__(self, name, competition_id):
self.name = name self.name = name
...@@ -154,15 +156,17 @@ class Question(db.Model): ...@@ -154,15 +156,17 @@ class Question(db.Model):
total_score = db.Column(db.Integer, nullable=False, default=1) total_score = db.Column(db.Integer, nullable=False, default=1)
type_id = db.Column(db.Integer, db.ForeignKey("question_type.id"), nullable=False) 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) 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") question_answers = db.relationship("QuestionAnswer", backref="question")
alternatives = db.relationship("QuestionAlternative", 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.name = name
self.total_score = total_score self.total_score = total_score
self.type_id = type_id self.type_id = type_id
self.slide_id = slide_id self.slide_id = slide_id
self.correcting_instructions = correcting_instructions
class QuestionAlternative(db.Model): class QuestionAlternative(db.Model):
......
...@@ -3,10 +3,10 @@ This file tests the database controller functions. ...@@ -3,10 +3,10 @@ This file tests the database controller functions.
""" """
import app.database.controller as dbc 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 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): def test_user(client):
...@@ -58,7 +58,7 @@ def test_copy(client): ...@@ -58,7 +58,7 @@ def test_copy(client):
item_slide_original = item_slides[0] item_slide_original = item_slides[0]
# Inserts several copies of the same slide # Inserts several copies of the same slide
num_copies = 10 num_copies = 3
for _ in range(num_copies): for _ in range(num_copies):
item_slide_copy = dbc.copy.slide(item_slide_original) item_slide_copy = dbc.copy.slide(item_slide_original)
num_slides += 1 num_slides += 1
...@@ -73,6 +73,23 @@ def test_copy(client): ...@@ -73,6 +73,23 @@ def test_copy(client):
item_slide_original = item_competition_original.slides[order] item_slide_original = item_competition_original.slides[order]
check_slides_copy(item_slide_original, item_slide, num_slides, order) check_slides_copy(item_slide_original, item_slide, num_slides, order)
assert item_slide.competition_id != item_slide_original.competition_id 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): def check_slides_copy(item_slide_original, item_slide_copy, num_slides, order):
......