Exemple #1
0
    def test_queryset_filter_for_distinct_groupers(self):
        poll1_archived_version = PollVersionFactory(
            content__poll=self.initial_version.content.poll, state=ARCHIVED)
        poll1_published_version = PollVersionFactory(
            content__poll=self.initial_version.content.poll, state=PUBLISHED)
        poll2_version = PollVersionFactory()
        PollVersionFactory(content__poll=poll2_version.content.poll,
                           state=ARCHIVED)
        poll2_archived_version = PollVersionFactory(
            content__poll=poll2_version.content.poll, state=ARCHIVED)

        versionable = VersionableItem(
            content_model=PollContent,
            grouper_field_name="poll",
            copy_function=default_copy,
        )

        qs_published_filter = {"versions__state__in": [PUBLISHED]}
        # Should be one published version
        self.assertQuerysetEqual(
            versionable.distinct_groupers(**qs_published_filter),
            [poll1_published_version.pk],
            transform=lambda x: x.pk,
            ordered=False,
        )

        qs_archive_filter = {"versions__state__in": [ARCHIVED]}
        # Should be two archived versions
        self.assertQuerysetEqual(
            versionable.distinct_groupers(**qs_archive_filter),
            [poll1_archived_version.pk, poll2_archived_version.pk],
            transform=lambda x: x.pk,
            ordered=False,
        )
 def test_raises_exception_if_content_class_already_registered_in_different_config(
         self):
     """Tests ImproperlyConfigured exception is raised if the same
     content class is registered twice in different config files
     """
     extension = VersioningCMSExtension()
     poll_versionable = VersionableItem(
         content_model=PollContent,
         grouper_field_name="poll",
         copy_function=default_copy,
     )
     poll_versionable2 = VersionableItem(
         content_model=PollContent,
         grouper_field_name="poll",
         copy_function=default_copy,
     )
     cms_config1 = Mock(spec=[],
                        djangocms_versioning_enabled=True,
                        versioning=[poll_versionable])
     cms_config2 = Mock(spec=[],
                        djangocms_versioning_enabled=True,
                        versioning=[poll_versionable2])
     with self.assertRaises(ImproperlyConfigured):
         extension.handle_versioning_setting(cms_config1)
         extension.handle_versioning_setting(cms_config2)
Exemple #3
0
class BlogpostCMSConfig(CMSAppConfig):
    djangocms_versioning_enabled = True
    versioning = [
        VersionableItem(
            content_model=BlogContent,
            grouper_field_name='blogpost',
            copy_function=default_copy,
        ),
        VersionableItem(
            content_model=CommentContent,
            grouper_field_name='comment',
            copy_function=default_copy,
        ),
    ]
    def test_for_grouper(self):
        poll1_version2 = PollVersionFactory(
            content__poll=self.initial_version.content.poll, )
        poll2_version = PollVersionFactory()
        PollVersionFactory(content__poll=poll2_version.content.poll)
        PollVersionFactory(content__poll=poll2_version.content.poll)

        versionable = VersionableItem(content_model=PollContent,
                                      grouper_field_name='poll',
                                      copy_function=default_copy)

        self.assertQuerysetEqual(
            versionable.for_grouper(self.initial_version.content.poll),
            [self.initial_version.content.pk, poll1_version2.content.pk],
            transform=lambda x: x.pk,
            ordered=False)
Exemple #5
0
class NavigationCMSAppConfig(CMSAppConfig):
    djangocms_navigation_enabled = getattr(
        settings, "DJANGOCMS_NAVIGATION_CMS_MODELS_ENABLED", True)
    djangocms_versioning_enabled = getattr(
        settings, "DJANGOCMS_NAVIGATION_VERSIONING_ENABLED", True)
    djangocms_moderation_enabled = getattr(
        settings, "DJANGOCMS_NAVIGATION_MODERATION_ENABLED", True)
    navigation_models = {
        # model_class : field(s) to search in menu item form UI
        Page: ["title"]
    }

    if djangocms_versioning_enabled:
        from djangocms_versioning.datastructures import VersionableItem

        versioning = [
            VersionableItem(
                content_model=MenuContent,
                grouper_field_name="menu",
                copy_function=copy_menu_content,
                preview_url=MenuContent.get_preview_url,
                on_publish=on_menu_content_publish,
                on_unpublish=on_menu_content_unpublish,
                on_draft_create=on_menu_content_draft_create,
                on_archive=on_menu_content_archive,
            )
        ]
    moderated_models = [MenuContent]
Exemple #6
0
 def test_versionables_list_created(self):
     """Test handle_versioning_setting method adds all the
     models into the versionables list
     """
     extension = VersioningCMSExtension()
     poll_versionable = VersionableItem(content_model=PollContent,
                                        grouper_field_name='poll',
                                        copy_function=default_copy)
     blog_versionable = VersionableItem(content_model=BlogContent,
                                        grouper_field_name='blogpost',
                                        copy_function=default_copy)
     cms_config = Mock(spec=[],
                       djangocms_versioning_enabled=True,
                       versioning=[poll_versionable, blog_versionable])
     extension.handle_versioning_setting(cms_config)
     self.assertListEqual(extension.versionables,
                          [poll_versionable, blog_versionable])
Exemple #7
0
    def test_grouper_model(self):
        versionable = VersionableItem(
            content_model=PollContent,
            grouper_field_name="poll",
            copy_function=default_copy,
        )

        self.assertEqual(versionable.grouper_model, Poll)
Exemple #8
0
class CMSApp1Config(CMSAppConfig):
    djangocms_moderation_enabled = True
    djangocms_versioning_enabled = True
    moderated_models = (App1PostContent, App1TitleContent)

    versioning = [
        VersionableItem(
            content_model=App1PostContent,
            grouper_field_name="post",
            copy_function=lambda x: x,
        ),
        VersionableItem(
            content_model=App1TitleContent,
            grouper_field_name="title",
            copy_function=lambda x: x,
        ),
    ]
Exemple #9
0
 def _create_versionables_mock(self, copy_function):
     """Helper function for mocking the versionables_by_content
     property so that a different copy_function can be specified on
     the polls app.
     """
     versionable = VersionableItem(content_model=PollContent,
                                   grouper_field_name='poll',
                                   copy_function=copy_function)
     return {PollContent: versionable}
Exemple #10
0
class PollsCMSConfig(CMSAppConfig):
    djangocms_versioning_enabled = True
    versioning = [
        VersionableItem(
            content_model=PollContent,
            grouper_field_name='poll',
            copy_function=default_copy,
        ),
    ]
Exemple #11
0
 def test_raises_exception_if_content_model_does_not_have_url_method(self):
     """Tests ImproperlyConfigured exception is raised if a content
     model does not have get_absolute_url implemented
     """
     # NOTE: Answer doesn't have get_absolute_url so this should
     # throw an exception
     with self.assertRaises(ImproperlyConfigured):
         answer_versionable = VersionableItem(
             content_model=Answer, grouper_field_name='poll_content',
             copy_function=default_copy)
    def test_version_model_proxy(self):
        versionable = VersionableItem(content_model=PersonContent,
                                      grouper_field_name='person',
                                      copy_function=default_copy)
        version_model_proxy = versionable.version_model_proxy

        self.assertIn(Version, version_model_proxy.mro())
        self.assertEqual(version_model_proxy.__name__, 'PersonContentVersion')
        self.assertEqual(version_model_proxy._source_model, PersonContent)
        self.assertTrue(version_model_proxy._meta.proxy)
    def test_is_content_model_versioned(self):
        """Test that is_content_model_versioned returns True for
        content model that's versioned
        """
        extension = VersioningCMSExtension()
        extension.versionables = [VersionableItem(
            content_model=PollContent, grouper_field_name='poll',
            copy_function=default_copy
        )]

        self.assertTrue(extension.is_content_model_versioned(PollContent))
Exemple #14
0
    def test_distinct_groupers(self):
        latest_poll1_version = PollVersionFactory(
            content__poll=self.initial_version.content.poll)
        poll2_version = PollVersionFactory()
        PollVersionFactory(content__poll=poll2_version.content.poll)
        latest_poll2_version = PollVersionFactory(
            content__poll=poll2_version.content.poll)

        versionable = VersionableItem(
            content_model=PollContent,
            grouper_field_name="poll",
            copy_function=default_copy,
        )

        self.assertQuerysetEqual(
            versionable.distinct_groupers(),
            [latest_poll1_version.pk, latest_poll2_version.pk],
            transform=lambda x: x.pk,
            ordered=False,
        )
Exemple #15
0
    def test_version_model_proxy_cached(self):
        """Test that version_model_proxy property is cached
        and return value is created once."""
        versionable = VersionableItem(
            content_model=PersonContent,
            grouper_field_name="person",
            copy_function=default_copy,
        )

        self.assertEqual(id(versionable.version_model_proxy),
                         id(versionable.version_model_proxy))
Exemple #16
0
    def test_content_model_is_sideframe_editable_for_sideframe_enabled_model(
            self):
        """
        A content model without placeholders should be opened in the sideframe
        """
        versionable = VersionableItem(
            content_model=PollContent,
            grouper_field_name="poll",
            copy_function=default_copy,
        )

        self.assertEqual(versionable.content_model_is_sideframe_editable, True)
class VersionedNoneModeratedAppConfig(CMSAppConfig):
    djangocms_moderation_enabled = False
    djangocms_versioning_enabled = True
    versioning = [
        VersionableItem(
            content_model=NoneModeratedPollContent,
            grouper_field_name="poll",
            extra_grouping_fields=["language"],
            version_list_filter_lookups={"language": get_language_tuple},
            copy_function=default_copy,
        )
    ]
class PollsCMSConfig(CMSAppConfig):
    djangocms_versioning_enabled = True
    versioning = [
        VersionableItem(
            content_model=PollContent,
            grouper_field_name='poll',
            extra_grouping_fields=['language'],
            version_list_filter_lookups={
                'language': get_language_tuple,
            },
            copy_function=default_copy,
        ),
    ]
Exemple #19
0
 def test_raises_exception_if_versioning_not_iterable(self):
     """Tests ImproperlyConfigured exception is raised if
     versioning setting is not an iterable
     """
     extensions = VersioningCMSExtension()
     cms_config = Mock(spec=[],
                       djangocms_versioning_enabled=True,
                       versioning=VersionableItem(
                           content_model=PollContent,
                           grouper_field_name='poll',
                           copy_function=default_copy))
     with self.assertRaises(ImproperlyConfigured):
         extensions.handle_versioning_setting(cms_config)
Exemple #20
0
    def test_content_model_is_sideframe_editable_for_sideframe_disabled_model(
            self):
        """
        A content model with placeholders should not be opened in the sideframe
        """
        versionable = VersionableItem(
            content_model=PageContent,
            grouper_field_name="page",
            copy_function=default_copy,
        )

        self.assertEqual(versionable.content_model_is_sideframe_editable,
                         False)
class PollsCMSConfig(CMSAppConfig):
    djangocms_versioning_enabled = True
    versioning = [
        VersionableItem(
            content_model=PollContent,
            grouper_field_name="poll",
            extra_grouping_fields=["language"],
            version_list_filter_lookups={"language": get_language_tuple},
            copy_function=default_copy,
            preview_url=PollContent.get_preview_url,
        )
    ]
    versioning_add_to_confirmation_context = {
        "unpublish": OrderedDict([("warning", unpublish_warning)])
    }
Exemple #22
0
 def test_handle_content_admin_classes(self):
     """Test handle_admin_classes replaces the admin model class
     with an admin model class that inherits from VersioningAdminMixin
     """
     extensions = VersioningCMSExtension()
     cms_config = Mock(spec=[],
                       djangocms_versioning_enabled=True,
                       versioning=[
                           VersionableItem(content_model=PollContent,
                                           grouper_field_name='poll',
                                           copy_function=default_copy)
                       ])
     extensions.handle_admin_classes(cms_config)
     self.assertIn(PollContent, admin.site._registry)
     self.assertIn(VersioningAdminMixin,
                   admin.site._registry[PollContent].__class__.mro())
 def test_versioning_add_to_confirmation_context_is_an_optional_setting(
         self):
     extension = VersioningCMSExtension()
     poll_versionable = VersionableItem(
         content_model=PollContent,
         grouper_field_name="poll",
         copy_function=default_copy,
     )
     cms_config = Mock(spec=[],
                       djangocms_versioning_enabled=True,
                       versioning=[poll_versionable])
     try:
         extension.configure_app(cms_config)
     except ImproperlyConfigured:
         self.fail(
             "versioning_add_to_confirmation_context setting should be optional"
         )
Exemple #24
0
class AliasCMSConfig(CMSAppConfig):
    cms_enabled = True
    cms_toolbar_enabled_models = [(AliasContent, render_alias_content)]
    moderated_models = [AliasContent]

    djangocms_moderation_enabled = getattr(settings,
                                           'MODERATING_ALIAS_MODELS_ENABLED',
                                           True)
    djangocms_versioning_enabled = getattr(settings,
                                           'VERSIONING_ALIAS_MODELS_ENABLED',
                                           True)

    if djangocms_versioning_enabled and djangocms_versioning_installed:

        from cms.utils.i18n import get_language_tuple

        from djangocms_versioning.datastructures import VersionableItem

        versioning = [
            VersionableItem(
                content_model=AliasContent,
                grouper_field_name='alias',
                extra_grouping_fields=["language"],
                version_list_filter_lookups={"language": get_language_tuple},
                copy_function=copy_alias_content,
                grouper_selector_option_label=lambda obj, lang: obj.get_name(
                    lang),
            ),
        ]

    djangocms_references_enabled = getattr(settings,
                                           'REFERENCES_ALIAS_MODELS_ENABLED',
                                           True)
    reference_fields = [
        (AliasPlugin, 'alias'),
    ]

    # Internalsearch configuration
    if AliasContentConfig:
        djangocms_internalsearch_enabled = True
        internalsearch_config_list = [
            AliasContentConfig,
        ]
Exemple #25
0
class PollsCMSConfig(CMSAppConfig):
    djangocms_moderation_enabled = True
    # Moderation configuration
    moderated_models = (PollContent, )
    moderation_request_changelist_actions = [
        get_poll_additional_changelist_action
    ]
    moderation_request_changelist_fields = [
        get_poll_additional_changelist_field
    ]
    # Versioning configuration
    djangocms_versioning_enabled = True
    versioning = [
        VersionableItem(
            content_model=PollContent,
            grouper_field_name="poll",
            extra_grouping_fields=["language"],
            version_list_filter_lookups={"language": get_language_tuple},
            copy_function=default_copy,
        )
    ]
class NavigationCMSAppConfig(CMSAppConfig):
    djangocms_navigation_enabled = getattr(
        settings, "DJANGOCMS_NAVIGATION_CMS_MODELS_ENABLED", True)
    djangocms_versioning_enabled = getattr(
        settings, "DJANGOCMS_NAVIGATION_VERSIONING_ENABLED", True)
    djangocms_moderation_enabled = getattr(
        settings, "DJANGOCMS_NAVIGATION_MODERATION_ENABLED", True)
    navigation_models = {
        # model_class : field(s) to search in menu item form UI
        Page: ["title"]
    }
    djangocms_references_enabled = True
    reference_fields = [
        (NavigationPlugin, "menu"),
    ]

    if djangocms_versioning_enabled:
        from djangocms_versioning.datastructures import VersionableItem

        cms_enabled = True
        cms_toolbar_enabled_models = [(MenuContent, render_navigation_content)]

        versioning = [
            VersionableItem(
                content_model=MenuContent,
                grouper_field_name="menu",
                extra_grouping_fields=["language"],
                version_list_filter_lookups={"language": get_language_tuple},
                copy_function=copy_menu_content,
                preview_url=MenuContent.get_preview_url,
                on_publish=on_menu_content_publish,
                on_unpublish=on_menu_content_unpublish,
                on_draft_create=on_menu_content_draft_create,
                on_archive=on_menu_content_archive,
            )
        ]
    moderated_models = [MenuContent]
 def test_raises_exception_if_unsupported_key_added_to_add_to_context(self):
     """Tests ImproperlyConfigured exception is raised if an unsupported
     dict key is used for the versioning_add_to_confirmation_context setting
     """
     extension = VersioningCMSExtension()
     poll_versionable = VersionableItem(
         content_model=PollContent,
         grouper_field_name="poll",
         copy_function=default_copy,
     )
     cms_config = Mock(
         spec=[],
         djangocms_versioning_enabled=True,
         versioning=[poll_versionable],
         # versioning doesn't know what red rabbits is
         # so this should raise an exception
         versioning_add_to_confirmation_context={
             "red_rabbits": OrderedDict({
                 "rabbit": lambda r, v: v.content
             })
         },
     )
     with self.assertRaises(ImproperlyConfigured):
         extension.configure_app(cms_config)