""" This module tests all our quiz models"""

from django.test import TestCase
from .models import Sport, Criterion


class SportModelTest(TestCase):
    """Tests the sport model"""

    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.test_sport = Sport(
            name=self.name,
            url=self.url,
        )

        self.test_sport.save()

    def test_sport_can_be_created(self):
        """ New sport is written to the database """
        test_sport = Sport.objects.first()
        self.assertEqual(test_sport.name, self.name)
        self.assertEqual(test_sport.url, self.url)


class CriterionRatingTest(TestCase):
    """Tests the Relation between Sport and Criterion"""
    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.test_sport = Sport(
            name=self.name,
            url=self.url,
        )

        self.test_sport.save()

        self.criterion = Criterion(name="Einzelsport")
        self.criterion.save()

    def test_can_rate_criterion_for_sport(self):
        """ A rating for a specific criterion can be added to a sport """
        self.test_sport.rate(self.criterion, 10)
        self.assertEqual(self.test_sport.criteria_ratings.first(), self.criterion)
        self.assertEqual(self.test_sport.get_rating(self.criterion), 10)


class CriterionModelTest(TestCase):
    """Tests the Criterion model"""
    def test_criterion_can_be_created(self):
        """New criterion is saved to the db"""
        name = "Einzelsport"
        Criterion(name=name).save()
        test_criterion=Criterion.objects.first()
        self.assertEqual(test_criterion.name, name)