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

Implement model and tests for question and criterion

Implement model and tests for sports and criterions
parent aba99400
No related branches found
No related tags found
No related merge requests found
Showing
with 285 additions and 55 deletions
from django.contrib import admin from django.contrib import admin
# Register your models here. # Register your models here.
from .models import Sport
admin.site.register(Sport)
# Generated by Django 3.2 on 2021-05-13 14:09
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Question',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
],
),
migrations.CreateModel(
name='Sport',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('sportart', 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='Wissensnack',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
],
),
]
# Generated by Django 3.2 on 2021-05-13 14:59
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('quiz', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='wissensnack',
name='text',
field=models.TextField(default=''),
),
]
# Generated by Django 3.2 on 2021-05-17 14:37
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('quiz', '0002_wissensnack_text'),
]
operations = [
migrations.DeleteModel(
name='Question',
),
migrations.DeleteModel(
name='Wissensnack',
),
migrations.RenameField(
model_name='sport',
old_name='sportart',
new_name='name',
),
]
# Generated by Django 3.2 on 2021-05-17 14:44
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('quiz', '0003_auto_20210517_1437'),
]
operations = [
migrations.CreateModel(
name='Criterion',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.TextField()),
],
),
]
# Generated by Django 3.2 on 2021-05-17 15:20
import django.core.validators
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('quiz', '0004_criterion'),
]
operations = [
migrations.CreateModel(
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')),
],
),
migrations.AddField(
model_name='sport',
name='criterion_ratings',
field=models.ManyToManyField(through='quiz.CriterionRating', to='quiz.Criterion'),
),
]
# Generated by Django 3.2 on 2021-05-17 15:20
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('quiz', '0005_auto_20210517_1520'),
]
operations = [
migrations.RenameField(
model_name='sport',
old_name='criterion_ratings',
new_name='criteria_ratings',
),
]
# Generated by Django 3.2 on 2021-05-18 15:21
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('quiz', '0006_rename_criterion_ratings_sport_criteria_ratings'),
]
operations = [
migrations.RemoveField(
model_name='sport',
name='ausdauer',
),
migrations.RemoveField(
model_name='sport',
name='einzelsport',
),
migrations.RemoveField(
model_name='sport',
name='field',
),
migrations.RemoveField(
model_name='sport',
name='kampfsport',
),
migrations.RemoveField(
model_name='sport',
name='kraft',
),
migrations.RemoveField(
model_name='sport',
name='mannschaftssport',
),
migrations.RemoveField(
model_name='sport',
name='technischakrobatisch',
),
migrations.AlterField(
model_name='sport',
name='name',
field=models.TextField(),
),
]
# Generated by Django 3.2 on 2021-05-18 15:34
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('quiz', '0007_auto_20210518_1521'),
]
operations = [
migrations.AlterField(
model_name='sport',
name='url',
field=models.URLField(),
),
]
from django.core.validators import MaxValueValidator, MinValueValidator
from django.db import models from django.db import models
# Create your models here.
class Sport(models.Model): class CriterionRating(models.Model):
bewertungsskala = [] rating = models.IntegerField(
for i in range(1,11): validators=[MaxValueValidator(10), MinValueValidator(0)] # validation on user level (not db level)
bewertungsskala.append((i,i)) )
criterion = models.ForeignKey("Criterion", on_delete=models.CASCADE)
sportart_list = [ sport = models.ForeignKey("Sport", on_delete=models.CASCADE)
('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')
]
fields = [ class Sport(models.Model):
('indoor','indoor'), name = models.TextField()
('outdoor','outdoor') url = models.URLField()
] criteria_ratings = models.ManyToManyField("Criterion", through="CriterionRating")
sportart = models.TextField(choices=sportart_list)
field = models.CharField(default='outdoor',max_length=50,choices=fields)
einzelsport = models.IntegerField(default=1,choices=bewertungsskala)
mannschaftssport = models.IntegerField(default=1,choices=bewertungsskala)
ausdauer = models.IntegerField(default=1,choices=bewertungsskala)
kraft = models.IntegerField(default=1,choices=bewertungsskala)
kampfsport = models.IntegerField(default=1,choices=bewertungsskala)
technischakrobatisch = models.IntegerField(default=1,choices=bewertungsskala)
url = models.TextField()#URLField liefert Error
def __str__(self): def __str__(self):
return self.sportart return self.name
#fragen-class
class Question(models.Model):
pass
#Wissensnack def rate(self, criterion, rating):
class Wissensnack(models.Model): rating = CriterionRating(sport=self, criterion=criterion, rating=10)
pass rating.save()
def get_rating(self, criterion):
criterion_rating = CriterionRating.objects.get(sport=self, criterion=criterion)
return criterion_rating.rating
class Criterion(models.Model):
name = models.TextField()
from django.test import TestCase from django.test import TestCase
# Create your tests here. from .models import Sport, Criterion
class SportModelTest(TestCase):
def setUp(self):
self.name = "HIIT"
self.url = "https://www.buchsys.de/fu-berlin/angebote/aktueller_zeitraum/_HIIT_-_High_Intensity_Interval_Training___HOME.html"
self.testSport = Sport(
name=self.name,
url=self.url,
)
self.testSport.save()
def test_sport_can_be_created(self):
self.assertEquals(self.testSport.name, self.name)
self.assertEquals(self.testSport.url, self.url)
class CriterionRatingTest(TestCase):
def setUp(self):
self.name = "HIIT"
self.url = "https://www.buchsys.de/fu-berlin/angebote/aktueller_zeitraum/_HIIT_-_High_Intensity_Interval_Training___HOME.html"
self.testSport = Sport(
name=self.name,
url=self.url,
)
self.testSport.save()
self.criterion = Criterion(name="Einzelsport")
self.criterion.save()
def test_can_rate_criterion_for_sport(self):
self.testSport.rate(self.criterion, 10)
self.assertEquals(self.testSport.criteria_ratings.first(), self.criterion)
self.assertEquals(self.testSport.get_rating(self.criterion), 10)
class CriterionModelTest(TestCase):
def test_criterion_can_be_created(self):
name = "Einzelsport"
test_criterion = Criterion(name=name)
self.assertEquals(test_criterion.name, name)
...@@ -31,6 +31,7 @@ ALLOWED_HOSTS = [] ...@@ -31,6 +31,7 @@ ALLOWED_HOSTS = []
# Application definition # Application definition
INSTALLED_APPS = [ INSTALLED_APPS = [
'quiz.apps.QuizConfig',
'django.contrib.admin', 'django.contrib.admin',
'django.contrib.auth', 'django.contrib.auth',
'django.contrib.contenttypes', 'django.contrib.contenttypes',
......
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