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)
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)
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)
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, )
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)
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)
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)
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)
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())
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)
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)
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)
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)
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)
def test_unpublished_cant_change_to_unpublished(self): version = factories.PollVersionFactory(state=constants.UNPUBLISHED) user = factories.UserFactory() with self.assertRaises(TransitionNotAllowed): version.unpublish(user)
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)
def test_archived_cant_change_to_archived(self): version = factories.PollVersionFactory(state=constants.ARCHIVED) user = factories.UserFactory() with self.assertRaises(TransitionNotAllowed): version.archive(user)
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)