from rest_framework.test import APITestCase

from vbv_lernwelt.core.create_default_users import create_default_users
from vbv_lernwelt.course.creators.test_course import create_test_course
from vbv_lernwelt.learnpath.models import Circle, LearningContentAttendanceCourse


class CourseBasePageSaveTestCase(APITestCase):
    def setUp(self) -> None:
        create_default_users()
        create_test_course()

    def test_save_willRenameSlugsOfChildren(self):
        circle_fahrzeug = Circle.objects.get(title="Fahrzeug")
        self.assertEqual(circle_fahrzeug.slug, "test-lehrgang-lp-circle-fahrzeug")

        lc_attendance_course = LearningContentAttendanceCourse.objects.descendant_of(
            circle_fahrzeug
        ).first()
        self.assertEqual(
            lc_attendance_course.slug,
            "test-lehrgang-lp-circle-fahrzeug-lc-präsenzkurs-fahrzeug",
        )

        # title update should also update the slugs of the descendants
        circle_fahrzeug.title = "Foobar"
        circle_fahrzeug.save()

        circle_fahrzeug = Circle.objects.get(id=circle_fahrzeug.id)
        self.assertEqual(circle_fahrzeug.slug, "test-lehrgang-lp-circle-foobar")

        lc_attendance_course = LearningContentAttendanceCourse.objects.descendant_of(
            circle_fahrzeug
        ).first()
        self.assertEqual(
            lc_attendance_course.slug,
            "test-lehrgang-lp-circle-foobar-lc-präsenzkurs-fahrzeug",
        )
