From 6c8a2bd6527672146029b103e0bf635df72806ae Mon Sep 17 00:00:00 2001 From: Andrew Aikman Date: Sun, 11 Apr 2021 20:29:10 +0100 Subject: [PATCH 1/7] Added initial v4 compatibility --- djangocms_redirect/admin.py | 9 ++++++++- djangocms_redirect/compat.py | 6 ++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 djangocms_redirect/compat.py diff --git a/djangocms_redirect/admin.py b/djangocms_redirect/admin.py index da7028e..2781b38 100644 --- a/djangocms_redirect/admin.py +++ b/djangocms_redirect/admin.py @@ -3,6 +3,7 @@ from django.forms import ModelForm from django.utils.translation import get_language +from .compat import CMS_LT_4 from .models import Redirect from .utils import normalize_url @@ -14,7 +15,13 @@ class Meta: def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - widget = PageSmartLinkWidget(ajax_view="admin:cms_page_get_published_pagelist") + + pagelist_endpoint = "admin:cms_page_get_published_pagelist" + # django-cms 4+ support + if not CMS_LT_4: + pagelist_endpoint = "admin:cms_page_get_list" + + widget = PageSmartLinkWidget(ajax_view=pagelist_endpoint) widget.language = get_language() self.fields["old_path"].widget = widget self.fields["new_path"].widget = widget diff --git a/djangocms_redirect/compat.py b/djangocms_redirect/compat.py new file mode 100644 index 0000000..0202f02 --- /dev/null +++ b/djangocms_redirect/compat.py @@ -0,0 +1,6 @@ +from distutils.version import LooseVersion +import cms + +CMS_VERSION = cms.__version__ + +CMS_LT_4 = LooseVersion(CMS_VERSION) < LooseVersion("4.0") From b05374e1157910198bca789763c3d4dd198e0a54 Mon Sep 17 00:00:00 2001 From: Andrew Aikman Date: Sun, 11 Apr 2021 20:36:28 +0100 Subject: [PATCH 2/7] Fix isort errors --- djangocms_redirect/compat.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/djangocms_redirect/compat.py b/djangocms_redirect/compat.py index 0202f02..4f8c1c5 100644 --- a/djangocms_redirect/compat.py +++ b/djangocms_redirect/compat.py @@ -1,6 +1,8 @@ from distutils.version import LooseVersion + import cms + CMS_VERSION = cms.__version__ CMS_LT_4 = LooseVersion(CMS_VERSION) < LooseVersion("4.0") From 0a141dccbcda7a981e679acca000bb821ee66e11 Mon Sep 17 00:00:00 2001 From: Andrew Aikman Date: Sun, 11 Apr 2021 20:45:01 +0100 Subject: [PATCH 3/7] Fixed isort failure --- djangocms_redirect/compat.py | 1 - 1 file changed, 1 deletion(-) diff --git a/djangocms_redirect/compat.py b/djangocms_redirect/compat.py index 4f8c1c5..f68db32 100644 --- a/djangocms_redirect/compat.py +++ b/djangocms_redirect/compat.py @@ -2,7 +2,6 @@ import cms - CMS_VERSION = cms.__version__ CMS_LT_4 = LooseVersion(CMS_VERSION) < LooseVersion("4.0") From 2afe1e8fda7cd966d9076c2f95f6eab6d175892d Mon Sep 17 00:00:00 2001 From: Andrew Aikman Date: Sun, 11 Apr 2021 20:52:43 +0100 Subject: [PATCH 4/7] Keep test coverage --- tests/tests_admin.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tests/tests_admin.py b/tests/tests_admin.py index a65f11a..20fe74c 100644 --- a/tests/tests_admin.py +++ b/tests/tests_admin.py @@ -1,8 +1,10 @@ +from unittest import skipIf from cms.forms.widgets import PageSmartLinkWidget from django.contrib import admin from django.urls import reverse from django.utils.translation import activate +from djangocms_redirect.compat import CMS_LT_4 from djangocms_redirect.models import Redirect from . import BaseRedirectTest @@ -11,6 +13,24 @@ class AdminPageTest(BaseRedirectTest): + @skipIf(CMS_LT_4, "Test relevant only for CMS<4.0") + def test_get_form_widgets(self): + """ + Admin form has proper widgets. + """ + activate("it") + request = self.request("/", lang="it", user=self.user) + form_class = redirect_admin.get_form(request) + form = form_class() + self.assertTrue(form.fields["old_path"].widget, PageSmartLinkWidget) + self.assertTrue(form.fields["new_path"].widget, PageSmartLinkWidget) + self.assertEqual(form.fields["old_path"].widget.language, "it") + self.assertEqual(form.fields["new_path"].widget.language, "it") + self.assertEqual(form.fields["old_path"].widget.ajax_url, reverse("admin:cms_page_get_published_pagelist")) + self.assertEqual(form.fields["new_path"].widget.ajax_url, reverse("admin:cms_page_get_published_pagelist")) + activate("en") + + @skipIf(not CMS_LT_4, "Test relevant only for CMS>=4.0") def test_get_form_widgets(self): """ Admin form has proper widgets. From 3e0b6cde54b0d072faf58f7a5bec20bd1614bbd5 Mon Sep 17 00:00:00 2001 From: Andrew Aikman Date: Sun, 11 Apr 2021 20:57:06 +0100 Subject: [PATCH 5/7] Amended tests --- tests/tests_admin.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/tests_admin.py b/tests/tests_admin.py index 20fe74c..76af59b 100644 --- a/tests/tests_admin.py +++ b/tests/tests_admin.py @@ -31,7 +31,7 @@ def test_get_form_widgets(self): activate("en") @skipIf(not CMS_LT_4, "Test relevant only for CMS>=4.0") - def test_get_form_widgets(self): + def test_get_form_widgets_djangocms_4_plus(self): """ Admin form has proper widgets. """ @@ -43,6 +43,6 @@ def test_get_form_widgets(self): self.assertTrue(form.fields["new_path"].widget, PageSmartLinkWidget) self.assertEqual(form.fields["old_path"].widget.language, "it") self.assertEqual(form.fields["new_path"].widget.language, "it") - self.assertEqual(form.fields["old_path"].widget.ajax_url, reverse("admin:cms_page_get_published_pagelist")) - self.assertEqual(form.fields["new_path"].widget.ajax_url, reverse("admin:cms_page_get_published_pagelist")) + self.assertEqual(form.fields["old_path"].widget.ajax_url, reverse("admin:cms_page_get_list")) + self.assertEqual(form.fields["new_path"].widget.ajax_url, reverse("admin:cms_page_get_list")) activate("en") From 74de0208abf48fe0981f0068b44402a13e0ab1bb Mon Sep 17 00:00:00 2001 From: Andrew Aikman Date: Sun, 11 Apr 2021 21:00:52 +0100 Subject: [PATCH 6/7] Fixed lint error --- tests/tests_admin.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/tests_admin.py b/tests/tests_admin.py index 76af59b..1f78753 100644 --- a/tests/tests_admin.py +++ b/tests/tests_admin.py @@ -1,4 +1,5 @@ from unittest import skipIf + from cms.forms.widgets import PageSmartLinkWidget from django.contrib import admin from django.urls import reverse From ef3765cccc521a9d61ebcde1b2fa571795f8295d Mon Sep 17 00:00:00 2001 From: Andrew Aikman Date: Sun, 11 Apr 2021 21:09:03 +0100 Subject: [PATCH 7/7] Flip incorrect test logic --- tests/tests_admin.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/tests_admin.py b/tests/tests_admin.py index 1f78753..611e848 100644 --- a/tests/tests_admin.py +++ b/tests/tests_admin.py @@ -14,7 +14,7 @@ class AdminPageTest(BaseRedirectTest): - @skipIf(CMS_LT_4, "Test relevant only for CMS<4.0") + @skipIf(not CMS_LT_4, "Test relevant only for CMS<4.0") def test_get_form_widgets(self): """ Admin form has proper widgets. @@ -31,7 +31,7 @@ def test_get_form_widgets(self): self.assertEqual(form.fields["new_path"].widget.ajax_url, reverse("admin:cms_page_get_published_pagelist")) activate("en") - @skipIf(not CMS_LT_4, "Test relevant only for CMS>=4.0") + @skipIf(CMS_LT_4, "Test relevant only for CMS>=4.0") def test_get_form_widgets_djangocms_4_plus(self): """ Admin form has proper widgets.