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)
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)
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.')
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)
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
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.')
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.')
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.')
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
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.')
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)
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'))
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)
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)
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'))
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)
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)
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)
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)
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
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.')
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)
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'))
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)
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 ""