예제 #1
0
    def test_new_published_version_doesnt_change_status_of_other_content_types(
            self):
        """Regression test for a bug in which filtering byt content_type
        was missed in the query that chooses versions to unpublish,
        thereby unpublishing all versions with a certain object_id, not
        just the versions we want to unpublish.
        """
        pv = factories.PollVersionFactory(state=constants.PUBLISHED,
                                          content__id=11,
                                          content__language='en')
        bv = factories.BlogPostVersionFactory(state=constants.PUBLISHED,
                                              content__id=11)
        version = factories.PollVersionFactory(
            state=constants.DRAFT,
            content__poll=pv.content.poll,
            content__language='en',
        )
        user = factories.UserFactory()

        version.publish(user)

        # Only poll version was changed
        pv_ = Version.objects.get(pk=pv.pk)
        self.assertEqual(pv_.state, constants.UNPUBLISHED)
        bv_ = Version.objects.get(pk=bv.pk)
        self.assertEqual(bv_.state, constants.PUBLISHED)
예제 #2
0
    def test_new_draft_doesnt_change_status_of_drafts_of_other_content_types(
            self):
        """Regression test for a bug in which filtering by content_type
        was missed in the query that chooses versions to archive,
        thereby archiving all versions with a certain object_id, not
        just the versions we want to archive.
        """
        pv = factories.PollVersionFactory(
            state=constants.DRAFT,
            content__id=11,
            content__language='en',
        )
        bv = factories.BlogPostVersionFactory(state=constants.DRAFT,
                                              content__id=11)

        Version.objects.create(content=factories.PollContentFactory(
            poll=pv.content.poll,
            language='en',
        ),
                               created_by=factories.UserFactory(),
                               state=constants.DRAFT)

        # Only poll version was changed
        pv_ = Version.objects.get(pk=pv.pk)
        self.assertEqual(pv_.state, constants.ARCHIVED)
        bv_ = Version.objects.get(pk=bv.pk)
        self.assertEqual(bv_.state, constants.DRAFT)
예제 #3
0
    def test_new_published_version_causes_old_published_versions_to_change_to_unpublished(
        self
    ):
        """When versions relating to the same grouper have a new published
        version created, all old published version should be marked unpublished
        """
        poll = factories.PollFactory()
        factories.PollVersionFactory.create_batch(
            3, state=constants.PUBLISHED, content__poll=poll, content__language="en"
        )
        user = factories.UserFactory()
        version = factories.PollVersionFactory(
            state=constants.DRAFT, content__poll=poll, content__language="en"
        )

        version.publish(user)

        # Only one published version
        self.assertEqual(Version.objects.filter(state=constants.PUBLISHED).count(), 1)
        # Everything other than the last published version has status unpublished
        self.assertEqual(
            Version.objects.exclude(pk=version.pk)
            .filter(state=constants.UNPUBLISHED)
            .count(),
            3,
        )
    def test_placeholders_are_copied(self):
        """The implementation of versioning for PageContent correctly
        copies placeholders
        """
        original_version = factories.PageVersionFactory()
        original_placeholders = factories.PlaceholderFactory.create_batch(
            2, source=original_version.content)
        original_version.content.placeholders.add(*original_placeholders)
        user = factories.UserFactory()

        new_version = original_version.copy(user)

        new_placeholders = new_version.content.placeholders.all()
        self.assertEqual(new_placeholders.count(), 2)
        self.assertNotEqual(new_placeholders[0].pk,
                            original_placeholders[0].pk)
        self.assertEqual(new_placeholders[0].slot,
                         original_placeholders[0].slot)
        self.assertEqual(new_placeholders[0].default_width,
                         original_placeholders[0].default_width)
        self.assertEqual(new_placeholders[0].source, new_version.content)
        self.assertNotEqual(new_placeholders[1].pk,
                            original_placeholders[1].pk)
        self.assertEqual(new_placeholders[1].slot,
                         original_placeholders[1].slot)
        self.assertEqual(new_placeholders[1].default_width,
                         original_placeholders[1].default_width)
        self.assertEqual(new_placeholders[1].source, new_version.content)
    def test_content_object_gets_duplicated_with_default_copy(self):
        """When copying, the new version object should have a new
        related content object. The default copy method will copy all
        content fields (other than the pk) exactly as they were.
        """
        original_version = factories.PollVersionFactory()
        user = factories.UserFactory()
        versioning_app_ext = apps.get_app_config(
            "djangocms_versioning").cms_extension
        versionables_mock = self._create_versionables_mock(default_copy)

        with patch.object(versioning_app_ext, "versionables_by_content",
                          versionables_mock):
            new_version = original_version.copy(user)

        # Created a new content record
        self.assertNotEqual(original_version.content.pk,
                            new_version.content.pk)
        # Has the same fields as the original version
        self.assertEqual(original_version.content.text,
                         new_version.content.text)
        self.assertEqual(original_version.content.language,
                         new_version.content.language)
        self.assertEqual(original_version.content.poll,
                         new_version.content.poll)
예제 #6
0
    def test_new_published_version_doesnt_change_status_of_versions_with_other_states(
        self
    ):
        """When versions relating to the same grouper have non-published
        states, these should not change upon creating a new published version
        """
        poll = factories.PollFactory()
        factories.PollVersionFactory(
            state=constants.DRAFT, content__poll=poll, content__language="en"
        )
        factories.PollVersionFactory(
            state=constants.ARCHIVED, content__poll=poll, content__language="en"
        )
        user = factories.UserFactory()
        version = factories.PollVersionFactory(
            state=constants.DRAFT, content__poll=poll, content__language="en"
        )

        version.publish(user)

        # Nothing has an unpublished state cause there were no published versions
        self.assertEqual(
            Version.objects.exclude(pk=version.pk)
            .filter(state=constants.UNPUBLISHED)
            .count(),
            0,
        )
예제 #7
0
 def test_new_version_is_draft_by_default(self):
     # Not using PollVersionFactory for this as PollVersionFactory
     # could potentially be overriding the value of state and we
     # want to know the default
     version = Version.objects.create(
         content=factories.PollContentFactory(), created_by=factories.UserFactory()
     )
     self.assertEqual(version.state, constants.DRAFT)
예제 #8
0
    def test_published_change_to_unpublished_is_logged(self):
        version = factories.PollVersionFactory(state=constants.PUBLISHED)
        user = factories.UserFactory()

        version.unpublish(user)

        tracking = StateTracking.objects.get()
        self.assertEqual(tracking.version, version)
        self.assertEqual(tracking.date, now())
        self.assertEqual(tracking.old_state, constants.PUBLISHED)
        self.assertEqual(tracking.new_state, constants.UNPUBLISHED)
        self.assertEqual(tracking.user, user)
예제 #9
0
    def test_draft_change_to_archived_is_logged(self):
        version = factories.PollVersionFactory(state=constants.DRAFT)
        user = factories.UserFactory()

        version.archive(user)

        tracking = StateTracking.objects.get()
        self.assertEqual(tracking.version, version)
        self.assertEqual(tracking.date, now())
        self.assertEqual(tracking.old_state, constants.DRAFT)
        self.assertEqual(tracking.new_state, constants.ARCHIVED)
        self.assertEqual(tracking.user, user)
    def test_copy_plugins_method_used(self):
        original_version = factories.PageVersionFactory()
        placeholder = factories.PlaceholderFactory(
            source=original_version.content)
        original_version.content.placeholders.add(placeholder)
        user = factories.UserFactory()

        with patch("djangocms_versioning.cms_config.Placeholder.copy_plugins"
                   ) as mocked_copy:
            new_version = original_version.copy(user)

        new_placeholder = new_version.content.placeholders.get()
        mocked_copy.assert_called_once_with(new_placeholder)
예제 #11
0
    def test_new_draft_doesnt_change_status_of_drafts_from_other_groupers(self):
        """When versions relating to different groupers have a new draft
        created, then this should not change the other draft's status to
        archived.
        """
        factories.PollVersionFactory(state=constants.DRAFT)

        Version.objects.create(
            content=factories.PollContentFactory(),
            state=constants.DRAFT,
            created_by=factories.UserFactory(),
        )

        # Both are still drafts because they relate to different groupers
        self.assertEqual(Version.objects.filter(state=constants.DRAFT).count(), 2)
예제 #12
0
    def test_new_published_version_doesnt_change_status_of_published_versions_from_other_groupers(
            self):
        """When versions relating to different groupers have a new
        published version created, then this should not change the other
        published versions' status to unpublished.
        """
        factories.PollVersionFactory(state=constants.PUBLISHED)
        user = factories.UserFactory()
        version = factories.PollVersionFactory(state=constants.DRAFT)

        version.publish(user)

        # Both are still published versions because they relate to different groupers
        self.assertEqual(
            Version.objects.filter(state=constants.PUBLISHED).count(), 2)
    def test_content_object_gets_duplicated_with_source(self):
        """When copying, the new version object should have a new
        related content object. The default copy method will copy all
        content fields (other than the pk) exactly as they were with source.
        """
        original_version = factories.PollVersionFactory()
        user = factories.UserFactory()
        versioning_app_ext = apps.get_app_config(
            "djangocms_versioning").cms_extension
        versionables_mock = self._create_versionables_mock(default_copy)

        with patch.object(versioning_app_ext, "versionables_by_content",
                          versionables_mock):
            new_version = original_version.copy(user)

        self.assertEqual(original_version, new_version.source)
    def test_new_version_object_gets_created(self):
        """When copying, a new version object should get created
        """
        with freeze_time("2017-07-07"):
            # Make sure created in the past
            original_version = factories.PollVersionFactory(state=PUBLISHED)
        user = factories.UserFactory()

        new_version = original_version.copy(user)

        # Created a new version record
        self.assertNotEqual(original_version.pk, new_version.pk)
        self.assertEqual(new_version.created, now())
        self.assertEqual(new_version.created_by, user)
        # The state should always be DRAFT no matter what the original
        # state was
        self.assertEqual(new_version.state, DRAFT)
    def test_text_plugins_are_copied(self):
        """The implementation of versioning for PageContent correctly
        copies text plugins
        """
        original_version = factories.PageVersionFactory()
        placeholder = factories.PlaceholderFactory(
            source=original_version.content)
        original_version.content.placeholders.add(placeholder)
        with freeze_time("2017-07-07"):
            # Make sure created in the past
            original_plugins = factories.TextPluginFactory.create_batch(
                2, placeholder=placeholder)
        user = factories.UserFactory()

        new_version = original_version.copy(user)

        new_plugins = new_version.content.placeholders.get().cmsplugin_set.all(
        )
        self.assertEqual(new_plugins.count(), 2)
        self.assertNotEqual(new_plugins[0].pk, original_plugins[0].pk)
        self.assertEqual(new_plugins[0].language, original_plugins[0].language)
        self.assertIsNone(new_plugins[0].parent)
        self.assertEqual(new_plugins[0].position, original_plugins[0].position)
        self.assertEqual(new_plugins[0].plugin_type,
                         original_plugins[0].plugin_type)
        self.assertEqual(
            new_plugins[0].djangocms_text_ckeditor_text.body,
            original_plugins[0].djangocms_text_ckeditor_text.body,
        )
        self.assertEqual(new_plugins[0].creation_date,
                         original_plugins[0].creation_date)
        self.assertEqual(new_plugins[0].changed_date, now())
        self.assertNotEqual(new_plugins[1].pk, original_plugins[1].pk)
        self.assertEqual(new_plugins[1].language, original_plugins[1].language)
        self.assertIsNone(new_plugins[1].parent)
        self.assertEqual(new_plugins[1].position, original_plugins[1].position)
        self.assertEqual(new_plugins[1].plugin_type,
                         original_plugins[1].plugin_type)
        self.assertEqual(
            new_plugins[1].djangocms_text_ckeditor_text.body,
            original_plugins[1].djangocms_text_ckeditor_text.body,
        )
        self.assertEqual(new_plugins[1].creation_date,
                         original_plugins[1].creation_date)
        self.assertEqual(new_plugins[1].changed_date, now())
예제 #16
0
    def test_the_copy_method_is_configurable(self):
        """When copying, the new version object should have a new
        related content object. How the content object will be
        copied can be configured.
        """
        original_version = factories.PollVersionFactory()
        user = factories.UserFactory()
        new_content = factories.PollContentFactory(
            poll=original_version.content.poll)
        mocked_copy = Mock(return_value=new_content)
        versionables_mock = self._create_versionables_mock(mocked_copy)
        versioning_app_ext = apps.get_app_config(
            'djangocms_versioning').cms_extension

        with patch.object(versioning_app_ext, 'versionables_by_content', versionables_mock):
            new_version = original_version.copy(user)

        self.assertEqual(new_version.content.pk, new_content.pk)
예제 #17
0
    def test_new_draft_doesnt_change_status_of_drafts_with_other_states(self):
        """When versions relating to the same grouper have non-draft
        states, these should not change upon creating a new draft
        """
        poll = factories.PollFactory()
        factories.PollVersionFactory(state=constants.UNPUBLISHED,
                                     content__poll=poll)
        factories.PollVersionFactory(state=constants.PUBLISHED,
                                     content__poll=poll)

        version = Version.objects.create(
            content=factories.PollContentFactory(poll=poll),
            created_by=factories.UserFactory(),
            state=constants.DRAFT)

        # Nothing has an archived state cause there were no drafts
        self.assertEqual(
            Version.objects.exclude(pk=version.pk).filter(
                state=constants.ARCHIVED).count(), 0)
예제 #18
0
    def test_change_moderation_collection_author_permission(self):
        user = factories.UserFactory(
            username="******",
            email="*****@*****.**",
            password="******",
            is_staff=True,
            is_active=True,
        )
        mock_request = MockRequest()
        mock_request.user = user
        mock_request._collection = self.collection
        self.client.force_login(mock_request.user)

        # check that the user does not have the permissions
        self.assertFalse(
            mock_request.user.has_perm(
                "djangocms_moderation.can_change_author"))

        # check that author is readonly
        self.assertIn(
            "author",
            self.mca.get_readonly_fields(mock_request, self.collection))

        # add the permission
        content_type = ContentType.objects.get_for_model(ModerationCollection)
        permission = Permission.objects.get(content_type=content_type,
                                            codename="can_change_author")
        mock_request.user.user_permissions.add(permission)

        # reload the user to clear permissions cache
        user = User.objects.get(pk=user.pk)
        mock_request.user = user

        # test that the permission was added successfully
        self.assertTrue(
            mock_request.user.has_perm(
                "djangocms_moderation.can_change_author"))

        # check that author is editable
        self.assertNotIn(
            "author",
            self.mca.get_readonly_fields(mock_request, self.collection))
    def test_page_content_object_gets_duplicated(self):
        """The implementation of versioning for PageContent correctly
        copies the PageContent object
        """
        with freeze_time("2017-07-07"):
            # Make sure created in the past
            original_version = factories.PageVersionFactory()
        user = factories.UserFactory()

        new_version = original_version.copy(user)

        # Created a new content record
        self.assertNotEqual(original_version.content.pk,
                            new_version.content.pk)
        # Has the same fields as the original version
        self.assertEqual(original_version.content.title,
                         new_version.content.title)
        self.assertEqual(original_version.content.language,
                         new_version.content.language)
        # new content should have a future date
        self.assertGreater(new_version.content.creation_date,
                           original_version.content.creation_date)
        self.assertEqual(original_version.content.created_by,
                         new_version.content.created_by)
        self.assertEqual(new_version.content.changed_date, now())
        self.assertEqual(original_version.content.changed_by,
                         new_version.content.changed_by)
        self.assertEqual(original_version.content.in_navigation,
                         new_version.content.in_navigation)
        self.assertEqual(original_version.content.soft_root,
                         new_version.content.soft_root)
        self.assertEqual(original_version.content.template,
                         new_version.content.template)
        self.assertEqual(
            original_version.content.limit_visibility_in_menu,
            new_version.content.limit_visibility_in_menu,
        )
        self.assertEqual(original_version.content.xframe_options,
                         new_version.content.xframe_options)
        self.assertEqual(original_version.content.page,
                         new_version.content.page)
예제 #20
0
    def test_new_draft_causes_old_drafts_to_change_to_archived(self):
        """When versions relating to the same grouper have a new draft
        created, all old drafts should be marked archived
        """
        poll = factories.PollFactory()
        factories.PollVersionFactory.create_batch(3,
                                                  state=constants.DRAFT,
                                                  content__poll=poll)

        version = Version.objects.create(
            content=factories.PollContentFactory(poll=poll),
            created_by=factories.UserFactory(),
            state=constants.DRAFT)

        # Only one draft
        self.assertEqual(
            Version.objects.filter(state=constants.DRAFT).count(), 1)
        # Everything other than the last draft we created has status archived
        self.assertEqual(
            Version.objects.exclude(pk=version.pk).filter(
                state=constants.ARCHIVED).count(), 3)
예제 #21
0
    def bootstrap(self):
        """ Setup initial workflow, pages, users and roles for moderation

            From: https://github.com/divio/djangocms-moderation/blob/master/tests/utils.py 
        """

        # create admin user
        admin = factories.UserFactory(is_staff=True, is_superuser=True, 
            username="******", email="*****@*****.**", password="******")

        # create users, groups and roles
        user = factories.UserFactory(username='******', email='*****@*****.**', password='******', is_staff=True,)
        user2 = factories.UserFactory(username='******', email='*****@*****.**', password='******', is_staff=True, is_superuser=True,)
        user3 = factories.UserFactory(username='******', email='*****@*****.**', password='******', is_staff=True, is_superuser=True,)
        moderator = factories.UserFactory(username='******', email='*****@*****.**', password='******', is_staff=True, )
        reviewer = factories.UserFactory(username='******', email='*****@*****.**', password='******', is_staff=True, )
        artworker = factories.UserFactory(username='******', email='*****@*****.**', password='******', is_staff=True, )

        # add permissions
        content_type = ContentType.objects.get_for_model(ModerationCollection)
        permission = Permission.objects.get(content_type=content_type, codename='can_change_author')
        user.user_permissions.add(permission)
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(content_type=content_type, codename='change_moderationcollection')
        user.user_permissions.add(permission)
        moderator.user_permissions.add(permission)
        reviewer.user_permissions.add(permission)
        permission = Permission.objects.get(content_type=content_type, codename='add_moderationcollection')
        user.user_permissions.add(permission)
        moderator.user_permissions.add(permission)
        content_type = ContentType.objects.get_for_model(ModerationRequest)
        permission = Permission.objects.get(content_type=content_type, codename='change_moderationrequest')
        user.user_permissions.add(permission)
        moderator.user_permissions.add(permission)
        reviewer.user_permissions.add(permission)
        permission = Permission.objects.get(content_type=content_type, codename='add_moderationrequest')
        user.user_permissions.add(permission)
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='use_structure')
        moderator.user_permissions.add(permission)
        reviewer.user_permissions.add(permission)
        permission = Permission.objects.get(codename='add_staticplaceholder')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='change_staticplaceholder')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='delete_staticplaceholder')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='add_cmsplugin')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='change_cmsplugin')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='delete_cmsplugin')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='add_page')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='delete_page')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='view_page')
        moderator.user_permissions.add(permission)
        reviewer.user_permissions.add(permission)
        permission = Permission.objects.get(codename='change_page')
        moderator.user_permissions.add(permission)
        reviewer.user_permissions.add(permission)
        permission = Permission.objects.get(codename='publish_page')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='edit_static_placeholder')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='add_aliaspluginmodel')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='change_aliaspluginmodel')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='delete_aliaspluginmodel')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='add_text')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='change_text')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='delete_text')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='add_textareafieldplugin')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='change_textareafieldplugin')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='delete_textareafieldplugin')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='add_image')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='change_image')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='delete_image')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='add_link')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='change_link')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='delete_link')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='add_style')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='change_style')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='delete_style')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='add_snippet')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='change_snippet')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='delete_snippet')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='add_version')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='change_version')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='delete_version')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='add_pagecontentversion')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='change_pagecontentversion')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='delete_pagecontentversion')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='add_versionlock')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='change_versionlock')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='delete_versionlock')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='add_moderationrequest')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='change_moderationrequest')
        moderator.user_permissions.add(permission)
        reviewer.user_permissions.add(permission)
        permission = Permission.objects.get(codename='delete_moderationrequest')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='add_moderationrequestaction')
        moderator.user_permissions.add(permission)
        reviewer.user_permissions.add(permission)
        permission = Permission.objects.get(codename='change_moderationrequestaction')
        moderator.user_permissions.add(permission)
        reviewer.user_permissions.add(permission)
        permission = Permission.objects.get(codename='delete_moderationrequestaction')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='add_workflow')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='change_workflow')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='delete_workflow')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='add_collectioncomment')
        moderator.user_permissions.add(permission)
        reviewer.user_permissions.add(permission)
        permission = Permission.objects.get(codename='change_collectioncomment')
        moderator.user_permissions.add(permission)
        reviewer.user_permissions.add(permission)
        permission = Permission.objects.get(codename='delete_collectioncomment')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='add_confirmationformsubmission')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='change_confirmationformsubmission')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='delete_confirmationformsubmission')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='add_moderationform')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='change_moderationform')
        moderator.user_permissions.add(permission)
        permission = Permission.objects.get(codename='delete_moderationform')
        moderator.user_permissions.add(permission)

        # create pages
        self.create_homepage(admin)
        pg1 = create_page(title='Page 1 by test', template='INHERIT', language='en', created_by=user, )
        pg2 = create_page(title='Page 2 by test2', template='INHERIT', language='en', created_by=user2, )
        pg3 = create_page(title='Page 3 by test3', template='INHERIT', language='en', created_by=user3, )
        pg4 = create_page(title='Page 4 by test', template='INHERIT', language='en', created_by=user,)
        pg5 = create_page(title='Page 5 by moderator', template='INHERIT', language='en', created_by=moderator,)
        assign_user_to_page(pg5, moderator, can_view=True,
                            can_change=True)
        assign_user_to_page(pg5, reviewer, can_view=True,
                            can_change=False)
        assign_user_to_page(pg5, artworker, can_view=True,
                            can_change=True)

        group = Group.objects.create(name='Group 1',)
        group2 = Group.objects.create(name='Moderator',)
        group3 = Group.objects.create(name='Reviewer',)
        group4 = Group.objects.create(name='Artworker',)
        user2.groups.add(group)
        user3.groups.add(group)
        moderator.groups.add(group2)
        reviewer.groups.add(group3)
        artworker.groups.add(group4)

        role1 = Role.objects.create(name='Role 1', user=user,)
        role2 = Role.objects.create(name='Role 2', user=user2,)
        role3 = Role.objects.create(name='Role 3', group=group,)
        role4 = Role.objects.create(name='Moderator', group=group2,)
        role5 = Role.objects.create(name='Reviewer', group=group3,)
        role6 = Role.objects.create(name='Artworker', group=group4,)

        # create workflows
        wf1 = Workflow.objects.create(pk=1, name='Workflow 1', is_default=True,)
        wf2 = Workflow.objects.create(pk=2, name='Workflow 2',)
        wf3 = Workflow.objects.create(pk=3, name='Workflow 3',)
        wf4 = Workflow.objects.create(pk=4, name='NCO',)

        # create versions
        v1 = Version.objects.filter_by_grouper(pg1).filter(state=DRAFT).first()
        v2 = Version.objects.filter_by_grouper(pg2).filter(state=DRAFT).first()
        v3 = Version.objects.filter_by_grouper(pg3).filter(state=DRAFT).first()
        v4 = Version.objects.filter_by_grouper(pg4).filter(state=DRAFT).first()
        v5 = Version.objects.filter_by_grouper(pg5).filter(state=DRAFT).first()

        # create previously published version
        v5.publish(moderator)
        v5.unpublish(moderator)
        v5.copy(moderator)

        # create workflow steps for workflow
        wf1st1 = wf1.steps.create(role=role1, is_required=True, order=1,)
        wf1st2 = wf1.steps.create(role=role2, is_required=False, order=2,)
        wf1st3 = wf1.steps.create(role=role3, is_required=True, order=3,)

        wf2st1 = wf2.steps.create(role=role1, is_required=True, order=1,)
        wf2st2 = wf2.steps.create(role=role3, is_required=True, order=2,)

        wf3st1 = wf3.steps.create(role=role1, is_required=True, order=1,)
        wf3st2 = wf3.steps.create(role=role3, is_required=False, order=2,)

        wf4st1 = wf4.steps.create(role=role5, is_required=True, order=1,)

        # create collections
        # collection 1  (v1 by user, v2 by user2)->
        #   workflow 1 ->
        #       step_role_1 (user) >>
        #       step_role_2 (user2) >>
        #       step_role_3 (user2 and user3) >>
        #

        collection1 = ModerationCollection.objects.create(
            author=user, name='Collection 1', workflow=wf1
        )
        collection2 = ModerationCollection.objects.create(
            author=user2, name='Collection 2', workflow=wf2
        )
        collection3 = ModerationCollection.objects.create(
            author=moderator, name='Collection for review', workflow=wf4
        )

        # add each version to the collection
        collection1.add_version(v1)
        collection1.add_version(v2)
        collection2.add_version(v3)
        collection2.add_version(v4)
        collection3.add_version(v5)
예제 #22
0
 def test_unpublished_cant_change_to_unpublished(self):
     version = factories.PollVersionFactory(state=constants.UNPUBLISHED)
     user = factories.UserFactory()
     with self.assertRaises(TransitionNotAllowed):
         version.unpublish(user)
예제 #23
0
 def test_published_can_change_to_unpublished(self):
     version = factories.PollVersionFactory(state=constants.PUBLISHED)
     user = factories.UserFactory()
     version.unpublish(user)
     self.assertEqual(version.state, constants.UNPUBLISHED)
예제 #24
0
 def test_archived_cant_change_to_archived(self):
     version = factories.PollVersionFactory(state=constants.ARCHIVED)
     user = factories.UserFactory()
     with self.assertRaises(TransitionNotAllowed):
         version.archive(user)
예제 #25
0
 def test_draft_can_change_to_archived(self):
     version = factories.PollVersionFactory(state=constants.DRAFT)
     user = factories.UserFactory()
     version.archive(user)
     self.assertEqual(version.state, constants.ARCHIVED)