diff --git a/CHANGES.rst b/CHANGES.rst index 9cfe383..fc099ad 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,9 +1,59 @@ Changelog ========= -2.3.0 (unreleased) +2.3.2 (unreleased) ------------------ +- bugfix: according to IDiscussionSettings.anonymous_email_enabled (cite): + "If selected, anonymous user will have to give their email." - But field + was not required. Now it is. + [jensens] + +- bugfix: anonymous email field was never saved. + [jensens] + +- updated german translations: added some missing msgstr. + [jensens] + +- added i18ndude and a script ``update_translations`` to buildout in order + to make translation updates simpler. + [jensens] + +- Fix reindexObject for content_object in moderation views. + Now reindex only "total_comments" index and not all the indexes + [cekk] + +- Fix comments Title if utf-8 characters in author_name + [huub_bouma] + +- use member.getId as author_username, so membrane users having different id + then username still have there picture shown and author path is correct. + [maartenkling] + +- Make comments editable. + [pjstevns, gyst] + +- Provide 'Delete comments' permission to handle comments deletion + [cekk] + +- Fixed Italian translations + [cekk] + + +2.3.1 (2014-02-22) +------------------ + +- 2.3.0 was a brown bag release. + [timo] + + +2.3.0 (2014-02-22) +------------------ + +- Execute the proper workflow change when using the moderation buttons instead + of hardcoding the workflow action to always publish + [omiron] + - Corrections and additions to the Danish translation [aputtu] @@ -25,11 +75,6 @@ Changelog - Fix ownership of comments. [toutpt] -- Make comments editable. - [pjstevns, gyst] - -- Provide 'Delete comments' permission to handle comments deletion - [cekk] 2.2.10 (2013-09-24) ------------------- diff --git a/plone/app/discussion/tests/test_comments_viewlet.py b/plone/app/discussion/tests/test_comments_viewlet.py index 275f3b9..efcbdf0 100644 --- a/plone/app/discussion/tests/test_comments_viewlet.py +++ b/plone/app/discussion/tests/test_comments_viewlet.py @@ -187,15 +187,69 @@ class TestCommentForm(unittest.TestCase): for comment in comments: self.assertEqual(comment.text, u"foobar") - self.assertEqual(comment.creator, "test-user") + self.assertEqual(comment.creator, "test_user_1_") self.assertEqual(comment.getOwner().getUserName(), "test-user") local_roles = comment.get_local_roles() - self.assertEqual(len(local_roles), 2) + self.assertEqual(len(local_roles), 1) userid, roles = local_roles[0] - self.assertEqual(userid, 'test-user') + self.assertEqual(userid, 'test_user_1_') self.assertEqual(len(roles), 1) self.assertEqual(roles[0], 'Owner') + def test_delete_comment(self): + """Delete a comment as logged-in user. + """ + + # Allow discussion + self.portal.doc1.allow_discussion = True + self.viewlet = CommentsViewlet(self.context, self.request, None, None) + + def make_request(form={}): + request = TestRequest() + request.form.update(form) + alsoProvides(request, IFormLayer) + alsoProvides(request, IAttributeAnnotatable) + return request + + provideAdapter( + adapts=(Interface, IBrowserRequest), + provides=Interface, + factory=CommentForm, + name=u"comment-form" + ) + + # The form is submitted successfully, if the required text field is + # filled out + form_request = make_request(form={'form.widgets.text': u'bar'}) + + commentForm = getMultiAdapter( + (self.context, form_request), + name=u"comment-form" + ) + + commentForm.update() + data, errors = commentForm.extractData() # pylint: disable-msg=W0612 + self.assertEqual(len(errors), 0) + self.assertFalse(commentForm.handleComment(commentForm, "foo")) + + # Delete the last comment + conversation = IConversation(self.context) + comment = [x for x in conversation.getComments()][-1] + deleteView = getMultiAdapter( + (comment, self.request), + name=u"moderate-delete-comment" + ) + # try to delete last comment without "Delete comments" permission + setRoles(self.portal, TEST_USER_ID, ['Member']) + self.assertRaises(Unauthorized, comment.restrictedTraverse, "@@moderate-delete-comment") + deleteView() + self.assertEqual(1, len([x for x in conversation.getComments()])) + # try to delete last comment with "Delete comments" permission + setRoles(self.portal, TEST_USER_ID, ['Reviewer']) + deleteView() + self.assertEqual(0, len([x for x in conversation.getComments()])) + setRoles(self.portal, TEST_USER_ID, ['Manager']) + def test_add_anonymous_comment(self): self.portal.doc1.allow_discussion = True