コード例 #1
0
 def test_form_valid(self):
     response = self.client.post(
         get_admin_url(name='cms_moderation_select_new_moderation',
                       language='en',
                       args=(self.pg1.pk, 'en')), {'workflow': self.wf2.pk})
     form_valid_redirect_url = '{}?{}'.format(
         get_admin_url(name='cms_moderation_new_request',
                       language='en',
                       args=(self.pg1.pk, 'en')),
         'workflow={}'.format(self.wf2.pk))
     self.assertEqual(response.url, form_valid_redirect_url)
コード例 #2
0
    def test_comment_list(self):
        response = self.client.get(
            get_admin_url(name='cms_moderation_comments',
                          language='en',
                          args=(self.pg3.pk, 'en')))

        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.context_data['object_list'].count(), 3)
コード例 #3
0
 def test_throws_error_if_workflow_has_not_been_resolved(self, mock_gpmw):
     response = self.client.get(
         get_admin_url(name='cms_moderation_new_request',
                       language='en',
                       args=(self.pg2.pk, 'en')))
     self.assertEqual(response.status_code, 400)
     self.assertEqual(response.content,
                      b'No moderation workflow exists for page.')
コード例 #4
0
 def test_get_form_kwargs(self):
     response = self.client.get(
         get_admin_url(name='cms_moderation_select_new_moderation',
                       language='en',
                       args=(self.pg1.pk, 'en')))
     view = response.context_data['view']
     kwargs = view.get_form_kwargs()
     self.assertEqual(kwargs.get('page'), self.pg1)
コード例 #5
0
 def test_form_valid(self):
     response = self.client.post(
         get_admin_url(name='cms_moderation_new_request',
                       language='en',
                       args=(self.pg2.pk, 'en')), {
                           'moderator': '',
                           'message': 'Some review message'
                       })
     self.assertEqual(response.status_code, 200)
     self.assertContains(response, 'reloadBrowser')  # check html part
コード例 #6
0
 def test_throws_no_active_moderation_request(self):
     response = self.client.get(
         get_admin_url(
             name='cms_moderation_cancel_request',
             language='en',
             args=(self.pg2.pk, 'en')  # pg2 => no active requests
         ))
     self.assertEqual(response.status_code, 400)
     self.assertEqual(response.content,
                      b'Page does not have an active moderation request.')
コード例 #7
0
 def test_throws_error_invalid_workflow_passed(self):
     response = self.client.get('{}?{}'.format(
         get_admin_url(name='cms_moderation_new_request',
                       language='en',
                       args=(self.pg2.pk, 'en')),
         'workflow=10'  # pg2 => no active requests, 10 => workflow does not exist
     ))
     self.assertEqual(response.status_code, 400)
     self.assertEqual(response.content,
                      b'No moderation workflow exists for page.')
コード例 #8
0
 def test_throws_error_moderation_already_exists(self):
     response = self.client.get('{}?{}'.format(
         get_admin_url(name='cms_moderation_new_request',
                       language='en',
                       args=(self.pg1.pk, 'en')),
         'workflow={}'.format(self.wf1.pk)  # pg1 => active request
     ))
     self.assertEqual(response.status_code, 400)
     self.assertEqual(response.content,
                      b'Page already has an active moderation request.')
コード例 #9
0
 def _process_moderation_request(self,
                                 user,
                                 action,
                                 message='Test message'):
     self.client.force_login(user)
     response = self.client.post(get_admin_url(
         name='cms_moderation_{}_request'.format(action),
         language='en',
         args=(self.page.pk, 'en')),
                                 data={'message': message})
     return response
コード例 #10
0
 def test_throws_error_already_approved(self):
     response = self.client.get(
         get_admin_url(
             name='cms_moderation_approve_request',
             language='en',
             args=(self.pg3.pk, 'en'
                   )  # pg3 => active request with all approved steps
         ))
     self.assertEqual(response.status_code, 400)
     self.assertEqual(response.content,
                      b'Moderation request has already been approved.')
コード例 #11
0
    def test_comment_list_protected(self):
        new_user = User.objects.create_superuser(username='******',
                                                 email='*****@*****.**',
                                                 password='******')
        self.client.force_login(new_user)

        response = self.client.get(
            get_admin_url(name='cms_moderation_comments',
                          language='en',
                          args=(self.pg3.pk, 'en')))

        self.assertEqual(response.status_code, 403)
コード例 #12
0
 def test_resubmit_request_view_with_form(self):
     response = self.client.get(
         get_admin_url(name='cms_moderation_resubmit_request',
                       language='en',
                       args=(self.pg1.pk, 'en')))
     self._assert_render(response=response,
                         page=self.pg1,
                         action=constants.ACTION_RESUBMITTED,
                         active_request=self.moderation_request1,
                         workflow=self.wf1,
                         form_cls=UpdateModerationRequestForm,
                         title=_('Resubmit changes'))
コード例 #13
0
 def test_moderation_menu_add_rendered(self):
     new_page = create_page(title='New Page', template='page.html', language='en',)
     self.setup_toolbar(new_page, self.user)
     page_menu = self.toolbar.menus['page']
     opts = PageModeration._meta
     url = get_admin_url(
         name='{}_{}_{}'.format(opts.app_label, opts.model_name, 'add'),
         language='en',
         args=[],
     )
     url += '?extended_object=%s' % new_page.pk
     self.assertEqual(len(page_menu.find_items(ModalItem, url=url)), 1)
コード例 #14
0
 def test_moderation_menu_change_rendered(self):
     new_page = create_page(title='New Page', template='page.html', language='en',)
     extension = PageModeration.objects.create(extended_object=new_page, enabled=True, workflow=self.wf1,)
     self.setup_toolbar(new_page, self.user)
     page_menu = self.toolbar.menus['page']
     opts = PageModeration._meta
     url = get_admin_url(
         name='{}_{}_{}'.format(opts.app_label, opts.model_name, 'change'),
         language='en',
         args=[extension.pk],
     )
     self.assertEqual(len(page_menu.find_items(ModalItem, url=url)), 1)
コード例 #15
0
 def test_new_request_view_with_form(self):
     response = self.client.get(
         get_admin_url(name='cms_moderation_new_request',
                       language='en',
                       args=(self.pg2.pk, 'en')))
     self._assert_render(response=response,
                         page=self.pg2,
                         action=constants.ACTION_STARTED,
                         active_request=None,
                         workflow=self.wf1,
                         form_cls=ModerationRequestForm,
                         title=_('Submit for moderation'))
コード例 #16
0
 def test_renders_view_with_form(self):
     response = self.client.get(
         get_admin_url(name='cms_moderation_select_new_moderation',
                       language='en',
                       args=(self.pg1.pk, 'en')))
     view = response.context_data['view']
     form = response.context_data['adminform']
     self.assertEqual(response.status_code, 200)
     self.assertEqual(response.template_name[0],
                      'djangocms_moderation/select_workflow_form.html')
     self.assertEqual(view.page_id, str(self.pg1.pk))
     self.assertEqual(view.current_lang, 'en')
     self.assertIsInstance(form, SelectModerationForm)
コード例 #17
0
 def test_submit_for_moderation_button_with_default_settings(self):
     new_page = create_page(title='New Page', template='page.html', language='en', published=True,)
     self.setup_toolbar(new_page, self.user)
     buttons = sum([item.buttons for item in self.toolbar_right_items if isinstance(item, ButtonList)], [])
     submit_for_moderation_button = [
         button for button in buttons if force_text(button.name) == 'Submit for moderation'
     ][0]
     url = get_admin_url(
         name='cms_moderation_new_request',
         language='en',
         args=(new_page.pk, 'en'),
     )
     self.assertEqual(submit_for_moderation_button.url, url)
コード例 #18
0
 def test_get_form_kwargs(self):
     response = self.client.get(
         get_admin_url(name='cms_moderation_new_request',
                       language='en',
                       args=(self.pg2.pk, 'en')))
     view = response.context_data['view']
     kwargs = view.get_form_kwargs()
     self.assertEqual(kwargs.get('action'), view.action)
     self.assertEqual(kwargs.get('language'), view.language)
     self.assertEqual(kwargs.get('page'), view.page)
     self.assertEqual(kwargs.get('user'), view.request.user)
     self.assertEqual(kwargs.get('workflow'), view.workflow)
     self.assertEqual(kwargs.get('active_request'), view.active_request)
コード例 #19
0
 def test_redirects_to_confirmation_page_if_invalid_check(self):
     self._create_confirmation_page(self.moderation_request1)
     response = self.client.get(
         get_admin_url(name='cms_moderation_approve_request',
                       language='en',
                       args=(self.pg1.pk, 'en')))
     redirect_url = add_url_parameters(
         self.cp.get_absolute_url(),
         content_view=True,
         page=self.pg1.pk,
         language='en',
     )
     self.assertEqual(response.status_code, 302)  # redirection
     self.assertEqual(response.url, redirect_url)
コード例 #20
0
 def _process_moderation_request(self,
                                 user,
                                 action,
                                 message="Test message"):
     self.client.force_login(user)
     response = self.client.post(
         get_admin_url(
             name="cms_moderation_{}_request".format(action),
             language="en",
             args=(self.page.pk, "en"),
         ),
         data={"message": message},
     )
     return response
コード例 #21
0
 def test_throws_error_forbidden_user(self):
     from django.contrib.auth.models import User
     user = User.objects.create_user(username='******',
                                     email='*****@*****.**',
                                     password='******',
                                     is_staff=True)
     self.client.force_login(user)
     response = self.client.get(
         get_admin_url(
             name='cms_moderation_approve_request',
             language='en',
             args=(self.pg1.pk, 'en')  # pg1 => active request
         ))
     self.assertEqual(response.status_code, 403)
     self.assertEqual(response.content,
                      b'User is not allowed to update request.')
コード例 #22
0
 def test_renders_post_view(self):
     response = self.client.post(
         add_url_parameters(
             self.cp.get_absolute_url(),
             content_view=True,
             page=self.pg1.pk,
             language='en',
         ))
     self.assertEqual(response.status_code, 200)
     self.assertEqual(response.templates[0].name, self.cp.template)
     self.assertEqual(response.context['CONFIRMATION_BASE_TEMPLATE'],
                      'djangocms_moderation/base_confirmation.html')
     self.assertTrue(response.context['submitted'])
     redirect_url = add_url_parameters(
         get_admin_url(
             name='cms_moderation_approve_request',
             language='en',
             args=(self.pg1.pk, 'en'),
         ),
         reviewed=True,
     )
     self.assertEqual(response.context['redirect_url'], redirect_url)
コード例 #23
0
 def test_does_not_redirect_to_confirmation_page_if_valid_check(self):
     self._create_confirmation_page(self.moderation_request1)
     ConfirmationFormSubmission.objects.create(
         request=self.moderation_request1,
         for_step=self.wf1st1,
         by_user=self.user,
         data=json.dumps([{
             'label': 'Question 1',
             'answer': 'Yes'
         }]),
         confirmation_page=self.cp,
     )
     response = self.client.get(
         get_admin_url(name='cms_moderation_approve_request',
                       language='en',
                       args=(self.pg1.pk, 'en')))
     self._assert_render(response=response,
                         page=self.pg1,
                         action=constants.ACTION_APPROVED,
                         active_request=self.moderation_request1,
                         workflow=self.wf1,
                         form_cls=UpdateModerationRequestForm,
                         title=_('Approve changes'))
コード例 #24
0
 def test_renders_all_form_submissions(self):
     self._create_confirmation_page(self.moderation_request1)
     ConfirmationFormSubmission.objects.create(
         request=self.moderation_request1,
         for_step=self.wf1st1,
         by_user=self.user,
         data=json.dumps([{
             'label': 'Question 1',
             'answer': 'Yes'
         }]),
         confirmation_page=self.cp,
     )
     response = self.client.get(
         get_admin_url(name='cms_moderation_approve_request',
                       language='en',
                       args=(self.pg1.pk, 'en')))
     form_submissions = response.context_data['form_submissions']
     results = ConfirmationFormSubmission.objects.filter(
         request=self.moderation_request1)
     self.assertQuerysetEqual(form_submissions,
                              results,
                              transform=lambda x: x,
                              ordered=False)
コード例 #25
0
def _get_moderation_link(self, version, request):
    if not is_registered_for_moderation(version.content):
        return ""

    if version.state != DRAFT:
        return ""

    content_object = version.content
    moderation_request = get_active_moderation_request(content_object)
    if moderation_request:
        title, url = get_moderation_button_title_and_url(moderation_request)
        return format_html('<a href="{}">{}</a>', url, title)
    elif is_obj_version_unlocked(content_object, request.user):
        url = add_url_parameters(
            get_admin_url(name="cms_moderation_items_to_collection",
                          language="en",
                          args=()),
            version_ids=version.pk,
            return_to_url=version_list_url(version.content),
        )
        # TODO use a fancy icon as for the rest of the actions?
        return format_html('<a href="{}">{}</a>', url,
                           _("Submit for moderation"))
    return ""