diff --git a/server/vbv_lernwelt/assignment/models.py b/server/vbv_lernwelt/assignment/models.py index 5f8dac4a..205d2099 100644 --- a/server/vbv_lernwelt/assignment/models.py +++ b/server/vbv_lernwelt/assignment/models.py @@ -15,7 +15,8 @@ class AssignmentListPage(CourseBasePage): def save(self, clean=True, user=None, log_action=False, **kwargs): self.slug = find_available_slug( - slugify(f"{self.get_parent().slug}-assignment", allow_unicode=True) + slugify(f"{self.get_parent().slug}-assignment", allow_unicode=True), + ignore_page_id=self.id, ) super(AssignmentListPage, self).save(clean, user, log_action, **kwargs) @@ -130,6 +131,7 @@ class Assignment(CourseBasePage): def save(self, clean=True, user=None, log_action=False, **kwargs): self.slug = find_available_slug( - slugify(f"{self.get_parent().slug}-{self.title}", allow_unicode=True) + slugify(f"{self.get_parent().slug}-{self.title}", allow_unicode=True), + ignore_page_id=self.id, ) super(Assignment, self).save(clean, user, log_action, **kwargs) diff --git a/server/vbv_lernwelt/competence/models.py b/server/vbv_lernwelt/competence/models.py index 95622c4f..2f64a188 100644 --- a/server/vbv_lernwelt/competence/models.py +++ b/server/vbv_lernwelt/competence/models.py @@ -28,7 +28,8 @@ class CompetenceProfilePage(CourseBasePage): def save(self, clean=True, user=None, log_action=False, **kwargs): self.slug = find_available_slug( - slugify(f"{self.get_parent().slug}-competence", allow_unicode=True) + slugify(f"{self.get_parent().slug}-competence", allow_unicode=True), + ignore_page_id=self.id, ) super(CompetenceProfilePage, self).save(clean, user, log_action, **kwargs) @@ -59,7 +60,8 @@ class CompetencePage(CourseBasePage): slugify( f"{self.get_parent().slug}-competence-{self.competence_id}", allow_unicode=True, - ) + ), + ignore_page_id=self.id, ) super(CompetencePage, self).save(clean, user, log_action, **kwargs) @@ -87,14 +89,16 @@ class PerformanceCriteria(CourseBasePage): slugify( f"{profile_parent.slug}-crit-{self.competence_id}-{self.learning_unit.course_category.title}", allow_unicode=True, - ) + ), + ignore_page_id=self.id, ) else: self.slug = find_available_slug( slugify( f"{profile_parent.slug}-crit-{self.competence_id}", allow_unicode=True, - ) + ), + ignore_page_id=self.id, ) super(PerformanceCriteria, self).save(clean, user, log_action, **kwargs) diff --git a/server/vbv_lernwelt/course/models.py b/server/vbv_lernwelt/course/models.py index b2903b07..fa70a344 100644 --- a/server/vbv_lernwelt/course/models.py +++ b/server/vbv_lernwelt/course/models.py @@ -129,7 +129,9 @@ class CoursePage(CourseBasePage): verbose_name = _("Lehrgang-Seite") def save(self, *args, **kwargs): - self.slug = find_available_slug(slugify(self.title, allow_unicode=True)) + self.slug = find_available_slug( + slugify(self.title, allow_unicode=True), ignore_page_id=self.id + ) super(CoursePage, self).save(*args, **kwargs) def __str__(self): diff --git a/server/vbv_lernwelt/learnpath/models.py b/server/vbv_lernwelt/learnpath/models.py index 7ed6dc51..6ef604a5 100644 --- a/server/vbv_lernwelt/learnpath/models.py +++ b/server/vbv_lernwelt/learnpath/models.py @@ -37,7 +37,8 @@ class LearningPath(CourseBasePage): def save(self, clean=True, user=None, log_action=False, **kwargs): self.slug = find_available_slug( - slugify(f"{self.get_parent().slug}-lp", allow_unicode=True) + slugify(f"{self.get_parent().slug}-lp", allow_unicode=True), + ignore_page_id=self.id, ) super(LearningPath, self).save(clean, user, log_action, **kwargs) @@ -307,5 +308,6 @@ def find_slug_with_parent_prefix(page, type_prefix, slug_postfix=None): slug_postfix = page.title return find_available_slug( - slugify(f"{slug_prefix}-{slug_postfix}", allow_unicode=True) + slugify(f"{slug_prefix}-{slug_postfix}", allow_unicode=True), + ignore_page_id=page.id, ) diff --git a/server/vbv_lernwelt/learnpath/tests/test_models.py b/server/vbv_lernwelt/learnpath/tests/test_models.py new file mode 100644 index 00000000..c89786ba --- /dev/null +++ b/server/vbv_lernwelt/learnpath/tests/test_models.py @@ -0,0 +1,33 @@ +from django.test import TestCase + +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 LearningContent + + +class SaveSlugTestCase(TestCase): + def setUp(self) -> None: + create_default_users() + create_test_course() + + def test_save_willHandleSlug(self): + lc_fachcheck = LearningContent.objects.get(title="Fachcheck Fahrzeug") + self.assertEqual( + lc_fachcheck.slug, "test-lehrgang-lp-circle-analyse-lc-fachcheck-fahrzeug" + ) + + # only changing minutes should not change slug + lc_fachcheck.minutes = 135 + lc_fachcheck.save() + lc_fachcheck = LearningContent.objects.get(id=lc_fachcheck.id) + self.assertEqual( + lc_fachcheck.slug, "test-lehrgang-lp-circle-analyse-lc-fachcheck-fahrzeug" + ) + + # changing title should change slug + lc_fachcheck.title = "Fachcheck Foobar" + lc_fachcheck.save() + lc_fachcheck = LearningContent.objects.get(id=lc_fachcheck.id) + self.assertEqual( + lc_fachcheck.slug, "test-lehrgang-lp-circle-analyse-lc-fachcheck-foobar" + ) diff --git a/server/vbv_lernwelt/media_library/models.py b/server/vbv_lernwelt/media_library/models.py index 763cde4d..5ce5a8d3 100644 --- a/server/vbv_lernwelt/media_library/models.py +++ b/server/vbv_lernwelt/media_library/models.py @@ -25,7 +25,8 @@ class MediaLibraryPage(CourseBasePage): def save(self, clean=True, user=None, log_action=False, **kwargs): self.slug = find_available_slug( - slugify(f"{self.get_parent().slug}-media", allow_unicode=True) + slugify(f"{self.get_parent().slug}-media", allow_unicode=True), + ignore_page_id=self.id, ) super(MediaLibraryPage, self).save(clean, user, log_action, **kwargs) @@ -86,7 +87,8 @@ class MediaCategoryPage(CourseBasePage): def save(self, clean=True, user=None, log_action=False, **kwargs): self.slug = find_available_slug( - slugify(f"{self.get_parent().slug}-cat-{self.title}", allow_unicode=True) + slugify(f"{self.get_parent().slug}-cat-{self.title}", allow_unicode=True), + ignore_page_id=self.id, ) super(MediaCategoryPage, self).save(clean, user, log_action, **kwargs)