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 ...@@ -4,6 +4,7 @@ from django.apps import AppConfig
class QuizConfig(AppConfig): class QuizConfig(AppConfig):
"""Application Config for the quiz app """ """Application Config for the quiz app"""
default_auto_field = 'django.db.models.BigAutoField'
name = 'quiz' default_auto_field = "django.db.models.BigAutoField"
name = "quiz"
...@@ -7,86 +7,280 @@ import django.db.models.deletion ...@@ -7,86 +7,280 @@ import django.db.models.deletion
class Migration(migrations.Migration): 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 initial = True
dependencies = [ dependencies = []
]
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
name='Sport', name="Sport",
fields=[ 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')])), "id",
('field', models.CharField(choices=[('indoor', 'indoor'), ('outdoor', 'outdoor')], default='outdoor', max_length=50)), models.BigAutoField(
('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)), auto_created=True,
('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)), primary_key=True,
('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)), serialize=False,
('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)), verbose_name="ID",
('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()), (
"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( migrations.CreateModel(
name='Criterion', name="Criterion",
fields=[ 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( migrations.CreateModel(
name='CriterionRating', name="CriterionRating",
fields=[ 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)])), "id",
('criterion', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='quiz.criterion')), models.BigAutoField(
('sport', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='quiz.sport')), 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( migrations.AddField(
model_name='sport', model_name="sport",
name='criteria_ratings', name="criteria_ratings",
field=models.ManyToManyField(through='quiz.CriterionRating', to='quiz.Criterion'), field=models.ManyToManyField(
through="quiz.CriterionRating", to="quiz.Criterion"
),
), ),
migrations.RemoveField( migrations.RemoveField(
model_name='sport', model_name="sport",
name='ausdauer', name="ausdauer",
), ),
migrations.RemoveField( migrations.RemoveField(
model_name='sport', model_name="sport",
name='einzelsport', name="einzelsport",
), ),
migrations.RemoveField( migrations.RemoveField(
model_name='sport', model_name="sport",
name='field', name="field",
), ),
migrations.RemoveField( migrations.RemoveField(
model_name='sport', model_name="sport",
name='kampfsport', name="kampfsport",
), ),
migrations.RemoveField( migrations.RemoveField(
model_name='sport', model_name="sport",
name='kraft', name="kraft",
), ),
migrations.RemoveField( migrations.RemoveField(
model_name='sport', model_name="sport",
name='mannschaftssport', name="mannschaftssport",
), ),
migrations.RemoveField( migrations.RemoveField(
model_name='sport', model_name="sport",
name='technischakrobatisch', name="technischakrobatisch",
), ),
migrations.AlterField( migrations.AlterField(
model_name='sport', model_name="sport",
name='name', name="name",
field=models.TextField(), field=models.TextField(),
), ),
migrations.AlterField( migrations.AlterField(
model_name='sport', model_name="sport",
name='url', name="url",
field=models.URLField(), 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): ...@@ -57,5 +57,14 @@ class Criterion(models.Model):
class CallToMove(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() text = models.TextField()
image = models.ImageField(null=True, max_length=200) image = models.ImageField(null=True, max_length=200)
...@@ -4,11 +4,10 @@ import os ...@@ -4,11 +4,10 @@ import os
import shutil import shutil
import tempfile import tempfile
from django.core.files import File
from django.core.files.uploadedfile import SimpleUploadedFile from django.core.files.uploadedfile import SimpleUploadedFile
from django.test import TestCase, override_settings from django.test import TestCase, override_settings
from .models import Sport, Criterion, CallToMove
from django.conf import settings from django.conf import settings
from .models import Sport, Criterion, CallToMove, KnowledgeSnack
class SportModelTest(TestCase): class SportModelTest(TestCase):
...@@ -84,12 +83,14 @@ class CriterionModelTest(TestCase): ...@@ -84,12 +83,14 @@ class CriterionModelTest(TestCase):
FIXTURE_IMAGES = os.path.join(settings.BASE_DIR, "quiz", "fixtures", "images") 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) @override_settings(MEDIA_ROOT=MEDIA_ROOT)
class InfoScreenTest(TestCase): class CallToMoveTest(TestCase):
"""Tests the Model for the info screen (Call To Move or Knowledge Snack)""" """Tests the Model for Call To Move"""
def setUp(self): def setUp(self):
tempfile.mkdtemp(suffix="testing") # recreate tmp folder before each test tempfile.mkdtemp(suffix="testing") # recreate tmp folder before each test
...@@ -106,16 +107,51 @@ class InfoScreenTest(TestCase): ...@@ -106,16 +107,51 @@ class InfoScreenTest(TestCase):
self.call_to_move.save() self.call_to_move.save()
def tearDown(self) -> None: 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) shutil.rmtree(MEDIA_ROOT, ignore_errors=True)
def test_can_create_call_to_move(self): 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.text, self.text)
self.assertEqual(self.call_to_move.image.name, self.image.name) self.assertEqual(self.call_to_move.image.name, self.image.name)
def test_can_save_and_load_call_to_move(self): 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() call_to_move = CallToMove.objects.first()
self.assertEqual(call_to_move.text, self.text) self.assertEqual(call_to_move.text, self.text)
self.assertEqual(call_to_move.image.name, self.image.name) 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