Skip to content
Snippets Groups Projects
Commit 4675bb44 authored by fu2662cw's avatar fu2662cw :speech_balloon:
Browse files

Add model and tests for KnowledgeSnack

parent 5be4f930
No related branches found
No related tags found
No related merge requests found
......@@ -4,6 +4,7 @@ from django.apps import AppConfig
class QuizConfig(AppConfig):
"""Application Config for the quiz app """
default_auto_field = 'django.db.models.BigAutoField'
name = 'quiz'
"""Application Config for the quiz app"""
default_auto_field = "django.db.models.BigAutoField"
name = "quiz"
......@@ -7,86 +7,280 @@ import django.db.models.deletion
class Migration(migrations.Migration):
replaces = [('quiz', '0001_initial'), ('quiz', '0002_wissensnack_text'), ('quiz', '0003_auto_20210517_1437'), ('quiz', '0004_criterion'), ('quiz', '0005_auto_20210517_1520'), ('quiz', '0006_rename_criterion_ratings_sport_criteria_ratings'), ('quiz', '0007_auto_20210518_1521'), ('quiz', '0008_alter_sport_url')]
replaces = [
("quiz", "0001_initial"),
("quiz", "0002_wissensnack_text"),
("quiz", "0003_auto_20210517_1437"),
("quiz", "0004_criterion"),
("quiz", "0005_auto_20210517_1520"),
("quiz", "0006_rename_criterion_ratings_sport_criteria_ratings"),
("quiz", "0007_auto_20210518_1521"),
("quiz", "0008_alter_sport_url"),
]
initial = True
dependencies = [
]
dependencies = []
operations = [
migrations.CreateModel(
name='Sport',
name="Sport",
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.TextField(choices=[('After Work Fitness', 'After Work Fitness'), ('Ballett', 'Ballett'), ('Basketball', 'Basketball'), ('Beachvolleyball', 'Beachvolleyball'), ('Bouldern', 'Bouldern'), ('Drachenfliegen', 'Drachenfliegen'), ('Functional Fitness', 'Functional Fitness'), ('Gerätturnen', 'Gerätturnen'), ('HIIT', 'HIIT'), ('Karate', 'Karate'), ('Kickboxen', 'Kickboxen'), ('Laufen', 'Laufen'), ('Pilates', 'Pilates'), ('Qigong', 'Qigong'), ('Rückenfit', 'Rückenfit'), ('Segeln Sportbootführerschein', 'Segeln Sportbootführerschein'), ('Skilanglauf & Schneeschuhwandern', 'Skilanglauf & Schneeschuhwandern'), ('Sweat & Relax', 'Sweat & Relax'), ('Tennis', 'Tennis'), ('Ultimate Frisbee', 'Ultimate Frisbee'), ('Yoga', 'Yoga')])),
('field', models.CharField(choices=[('indoor', 'indoor'), ('outdoor', 'outdoor')], default='outdoor', max_length=50)),
('einzelsport', models.IntegerField(choices=[(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10)], default=1)),
('mannschaftssport', models.IntegerField(choices=[(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10)], default=1)),
('ausdauer', models.IntegerField(choices=[(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10)], default=1)),
('kraft', models.IntegerField(choices=[(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10)], default=1)),
('kampfsport', models.IntegerField(choices=[(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10)], default=1)),
('technischakrobatisch', models.IntegerField(choices=[(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10)], default=1)),
('url', models.TextField()),
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
(
"name",
models.TextField(
choices=[
("After Work Fitness", "After Work Fitness"),
("Ballett", "Ballett"),
("Basketball", "Basketball"),
("Beachvolleyball", "Beachvolleyball"),
("Bouldern", "Bouldern"),
("Drachenfliegen", "Drachenfliegen"),
("Functional Fitness", "Functional Fitness"),
("Gerätturnen", "Gerätturnen"),
("HIIT", "HIIT"),
("Karate", "Karate"),
("Kickboxen", "Kickboxen"),
("Laufen", "Laufen"),
("Pilates", "Pilates"),
("Qigong", "Qigong"),
("Rückenfit", "Rückenfit"),
(
"Segeln Sportbootführerschein",
"Segeln Sportbootführerschein",
),
(
"Skilanglauf & Schneeschuhwandern",
"Skilanglauf & Schneeschuhwandern",
),
("Sweat & Relax", "Sweat & Relax"),
("Tennis", "Tennis"),
("Ultimate Frisbee", "Ultimate Frisbee"),
("Yoga", "Yoga"),
]
),
),
(
"field",
models.CharField(
choices=[("indoor", "indoor"), ("outdoor", "outdoor")],
default="outdoor",
max_length=50,
),
),
(
"einzelsport",
models.IntegerField(
choices=[
(1, 1),
(2, 2),
(3, 3),
(4, 4),
(5, 5),
(6, 6),
(7, 7),
(8, 8),
(9, 9),
(10, 10),
],
default=1,
),
),
(
"mannschaftssport",
models.IntegerField(
choices=[
(1, 1),
(2, 2),
(3, 3),
(4, 4),
(5, 5),
(6, 6),
(7, 7),
(8, 8),
(9, 9),
(10, 10),
],
default=1,
),
),
(
"ausdauer",
models.IntegerField(
choices=[
(1, 1),
(2, 2),
(3, 3),
(4, 4),
(5, 5),
(6, 6),
(7, 7),
(8, 8),
(9, 9),
(10, 10),
],
default=1,
),
),
(
"kraft",
models.IntegerField(
choices=[
(1, 1),
(2, 2),
(3, 3),
(4, 4),
(5, 5),
(6, 6),
(7, 7),
(8, 8),
(9, 9),
(10, 10),
],
default=1,
),
),
(
"kampfsport",
models.IntegerField(
choices=[
(1, 1),
(2, 2),
(3, 3),
(4, 4),
(5, 5),
(6, 6),
(7, 7),
(8, 8),
(9, 9),
(10, 10),
],
default=1,
),
),
(
"technischakrobatisch",
models.IntegerField(
choices=[
(1, 1),
(2, 2),
(3, 3),
(4, 4),
(5, 5),
(6, 6),
(7, 7),
(8, 8),
(9, 9),
(10, 10),
],
default=1,
),
),
("url", models.TextField()),
],
),
migrations.CreateModel(
name='Criterion',
name="Criterion",
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.TextField()),
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.TextField()),
],
),
migrations.CreateModel(
name='CriterionRating',
name="CriterionRating",
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('rating', models.IntegerField(validators=[django.core.validators.MaxValueValidator(10), django.core.validators.MinValueValidator(0)])),
('criterion', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='quiz.criterion')),
('sport', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='quiz.sport')),
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
(
"rating",
models.IntegerField(
validators=[
django.core.validators.MaxValueValidator(10),
django.core.validators.MinValueValidator(0),
]
),
),
(
"criterion",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="quiz.criterion"
),
),
(
"sport",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="quiz.sport"
),
),
],
),
migrations.AddField(
model_name='sport',
name='criteria_ratings',
field=models.ManyToManyField(through='quiz.CriterionRating', to='quiz.Criterion'),
model_name="sport",
name="criteria_ratings",
field=models.ManyToManyField(
through="quiz.CriterionRating", to="quiz.Criterion"
),
),
migrations.RemoveField(
model_name='sport',
name='ausdauer',
model_name="sport",
name="ausdauer",
),
migrations.RemoveField(
model_name='sport',
name='einzelsport',
model_name="sport",
name="einzelsport",
),
migrations.RemoveField(
model_name='sport',
name='field',
model_name="sport",
name="field",
),
migrations.RemoveField(
model_name='sport',
name='kampfsport',
model_name="sport",
name="kampfsport",
),
migrations.RemoveField(
model_name='sport',
name='kraft',
model_name="sport",
name="kraft",
),
migrations.RemoveField(
model_name='sport',
name='mannschaftssport',
model_name="sport",
name="mannschaftssport",
),
migrations.RemoveField(
model_name='sport',
name='technischakrobatisch',
model_name="sport",
name="technischakrobatisch",
),
migrations.AlterField(
model_name='sport',
name='name',
model_name="sport",
name="name",
field=models.TextField(),
),
migrations.AlterField(
model_name='sport',
name='url',
model_name="sport",
name="url",
field=models.URLField(),
),
]
# Generated by Django 3.2 on 2021-06-02 12:47
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("quiz", "0003_auto_20210601_1549"),
]
operations = [
migrations.CreateModel(
name="KnowledgeSnack",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("text", models.TextField()),
("image", models.ImageField(max_length=200, null=True, upload_to="")),
],
),
migrations.AlterField(
model_name="calltomove",
name="image",
field=models.ImageField(max_length=200, null=True, upload_to=""),
),
]
......@@ -57,5 +57,14 @@ class Criterion(models.Model):
class CallToMove(models.Model):
"""Defines text and image that are used to show a call to move between questions"""
text = models.TextField()
image = models.ImageField(null=True, max_length=200)
class KnowledgeSnack(models.Model):
"""Defines text and image that are used to show a KnowledgeSnack between questions"""
text = models.TextField()
image = models.ImageField(null=True, max_length=200)
......@@ -4,11 +4,10 @@ import os
import shutil
import tempfile
from django.core.files import File
from django.core.files.uploadedfile import SimpleUploadedFile
from django.test import TestCase, override_settings
from .models import Sport, Criterion, CallToMove
from django.conf import settings
from .models import Sport, Criterion, CallToMove, KnowledgeSnack
class SportModelTest(TestCase):
......@@ -84,12 +83,14 @@ class CriterionModelTest(TestCase):
FIXTURE_IMAGES = os.path.join(settings.BASE_DIR, "quiz", "fixtures", "images")
MEDIA_ROOT = tempfile.mkdtemp(suffix="testing") # Create a temp directory for files created during tests
MEDIA_ROOT = tempfile.mkdtemp(
suffix="testing"
) # Create a temp directory for files created during tests
@override_settings(MEDIA_ROOT=MEDIA_ROOT)
class InfoScreenTest(TestCase):
"""Tests the Model for the info screen (Call To Move or Knowledge Snack)"""
class CallToMoveTest(TestCase):
"""Tests the Model for Call To Move"""
def setUp(self):
tempfile.mkdtemp(suffix="testing") # recreate tmp folder before each test
......@@ -106,16 +107,51 @@ class InfoScreenTest(TestCase):
self.call_to_move.save()
def tearDown(self) -> None:
""" Delete the temp dir after each test """
"""Delete the temp dir after each test"""
shutil.rmtree(MEDIA_ROOT, ignore_errors=True)
def test_can_create_call_to_move(self):
""" A call to move can be correctly created """
"""A call to move can be correctly created"""
self.assertEqual(self.call_to_move.text, self.text)
self.assertEqual(self.call_to_move.image.name, self.image.name)
def test_can_save_and_load_call_to_move(self):
""" A saved Call to Move can be loaded """
"""A saved Call to Move can be loaded"""
call_to_move = CallToMove.objects.first()
self.assertEqual(call_to_move.text, self.text)
self.assertEqual(call_to_move.image.name, self.image.name)
@override_settings(MEDIA_ROOT=MEDIA_ROOT)
class KnowledgeSnackTest(TestCase):
"""Tests the Model for Knowledge Snack"""
def setUp(self):
tempfile.mkdtemp(suffix="testing") # recreate tmp folder before each test
self.text = "Dass Treppensteigen fast 5x so viele Kalorien verbrennt," \
"als bei der Nutzung des Aufzuges?"
self.image_name = "test_image.png"
self.image_path = os.path.join(FIXTURE_IMAGES, self.image_name)
self.image = SimpleUploadedFile(
name=self.image_name,
content=open(self.image_path, "rb").read(),
content_type="image/png",
)
self.knowledge_snack = KnowledgeSnack(text=self.text, image=self.image)
self.knowledge_snack.save()
def tearDown(self) -> None:
"""Delete the temp dir after each test"""
shutil.rmtree(MEDIA_ROOT, ignore_errors=True)
def test_can_create_knowledge_snack(self):
"""A knowledge snack can be correctly created"""
self.assertEqual(self.knowledge_snack.text, self.text)
self.assertEqual(self.knowledge_snack.image.name, self.image.name)
def test_can_save_and_load_call_to_move(self):
"""A saved Knowledge Snack can be loaded"""
knowledge_snack = KnowledgeSnack.objects.first()
self.assertEqual(knowledge_snack.text, self.text)
self.assertEqual(knowledge_snack.image.name, self.image.name)
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