Remove portal_discussion tool.

This commit is contained in:
tisto 2013-10-10 15:36:18 +02:00
parent 3eae5378ff
commit fbc78e2951
15 changed files with 44 additions and 484 deletions

View File

@ -4,14 +4,20 @@ Changelog
2.3.0 (unreleased) 2.3.0 (unreleased)
------------------ ------------------
- Refactor tests to use the PLONE_APP_CONTENTTYPES_FIXTURE instead of the PLONE_FIXTURE. - Remove portal_discussion tool.
[timo]
- Refactor tests to use the PLONE_APP_CONTENTTYPES_FIXTURE instead of
PLONE_FIXTURE.
[timo] [timo]
2.2.10 (2013-09-24) 2.2.10 (2013-09-24)
------------------- -------------------
- Revert "Refactor tests to use the PLONE_APP_CONTENTTYPES_FIXTURE instead of the PLONE_FIXTURE." that has been accidentially introduced into the 2.2.9 release. - Revert "Refactor tests to use the PLONE_APP_CONTENTTYPES_FIXTURE instead of
the PLONE_FIXTURE." that has been accidentially introduced into the 2.2.9
release.
[timo] [timo]

View File

@ -184,38 +184,6 @@ class ICaptcha(Interface):
required=False) required=False)
class ICommentingTool(Interface):
"""A tool that indexes all comments for usage by the management interface.
This means the management interface can still work even though we don't
index the comments in portal_catalog.
The default implementation of this interface simply defers to
portal_catalog, but a custom version of the tool can be used to provide
an alternate indexing mechanism.
"""
def indexObject(comment):
"""Indexes a comment
"""
def reindexObject(comment):
"""Reindex a comment
"""
def unindexObject(comment):
"""Removes a comment from the indexes
"""
def uniqueValuesFor(name):
"""Get unique values for FieldIndex name
"""
def searchResults(REQUEST=None, **kw):
"""Perform a search over all indexed comments.
"""
class IDiscussionSettings(Interface): class IDiscussionSettings(Interface):
"""Global discussion settings. This describes records stored in the """Global discussion settings. This describes records stored in the
configuration registry and obtainable via plone.registry. configuration registry and obtainable via plone.registry.

View File

@ -1,3 +1,5 @@
from Products.CMFCore.utils import getToolByName
from zope.component import queryUtility from zope.component import queryUtility
from Acquisition import aq_inner, aq_parent from Acquisition import aq_inner, aq_parent
@ -8,7 +10,6 @@ from Products.CMFPlone.utils import base_hasattr
from Products.CMFPlone.utils import safe_callable from Products.CMFPlone.utils import safe_callable
from plone.app.discussion.conversation import ANNOTATION_KEY from plone.app.discussion.conversation import ANNOTATION_KEY
from plone.app.discussion.interfaces import ICommentingTool
def patchedClearFindAndRebuild(self): def patchedClearFindAndRebuild(self):
@ -26,14 +27,14 @@ def patchedClearFindAndRebuild(self):
obj.indexObject() obj.indexObject()
annotions = IAnnotations(obj) annotions = IAnnotations(obj)
ctool = queryUtility(ICommentingTool) catalog = getToolByName(obj, "portal_catalog")
if ANNOTATION_KEY in annotions: if ANNOTATION_KEY in annotions:
conversation = annotions[ANNOTATION_KEY] conversation = annotions[ANNOTATION_KEY]
conversation = conversation.__of__(obj) conversation = conversation.__of__(obj)
for comment in conversation.getComments(): for comment in conversation.getComments():
try: try:
if ctool: if catalog:
ctool.indexObject(comment) catalog.indexObject(comment)
except StopIteration: # pragma: no cover except StopIteration: # pragma: no cover
pass pass

View File

@ -1,9 +0,0 @@
<?xml version="1.0"?>
<componentregistry>
<utilities>
<utility
interface="plone.app.discussion.interfaces.ICommentingTool"
object="portal_discussion"
/>
</utilities>
</componentregistry>

View File

@ -1,5 +0,0 @@
<?xml version="1.0"?>
<tool-setup>
<required tool_id="portal_discussion"
class="plone.app.discussion.tool.CommentingTool"/>
</tool-setup>

View File

@ -0,0 +1,14 @@
from Products.CMFCore.utils import getToolByName
def index_object(obj, event):
"""Index the object when it is added to the conversation.
"""
catalog = getToolByName(obj, 'portal_catalog')
return catalog.reindexObject(obj)
def unindex_object(obj, event):
"""Unindex the object when it is removed from the conversation.
"""
catalog = getToolByName(obj, 'portal_catalog')
return catalog.unindexObject(obj)

View File

@ -24,13 +24,13 @@
<subscriber <subscriber
for="plone.app.discussion.interfaces.IComment for="plone.app.discussion.interfaces.IComment
zope.lifecycleevent.interfaces.IObjectAddedEvent" zope.lifecycleevent.interfaces.IObjectAddedEvent"
handler=".tool.index_object" handler=".subscribers.index_object"
/> />
<subscriber <subscriber
for="plone.app.discussion.interfaces.IComment for="plone.app.discussion.interfaces.IComment
zope.lifecycleevent.interfaces.IObjectRemovedEvent" zope.lifecycleevent.interfaces.IObjectRemovedEvent"
handler=".tool.unindex_object" handler=".subscribers.unindex_object"
/> />
<subscriber <subscriber

View File

@ -459,6 +459,9 @@ class CommentCatalogTest(unittest.TestCase):
) )
def test_clear_and_rebuild_catalog(self): def test_clear_and_rebuild_catalog(self):
brains = self.catalog.searchResults({'portal_type': 'Discussion Item'})
self.assertTrue(brains)
# Clear and rebuild catalog # Clear and rebuild catalog
self.catalog.clearFindAndRebuild() self.catalog.clearFindAndRebuild()

View File

@ -61,12 +61,7 @@ class TestCommentForm(unittest.TestCase):
typetool.constructContent('Document', self.portal, 'doc1') typetool.constructContent('Document', self.portal, 'doc1')
wftool = getToolByName(self.portal, "portal_workflow") wftool = getToolByName(self.portal, "portal_workflow")
wftool.doActionFor(self.portal.doc1, action='publish') wftool.doActionFor(self.portal.doc1, action='publish')
self.discussionTool = getToolByName( self.portal.doc1.allow_discussion = True
self.portal,
'portal_discussion',
None
)
self.discussionTool.overrideDiscussionFor(self.portal.doc1, False)
self.membershipTool = getToolByName(self.folder, 'portal_membership') self.membershipTool = getToolByName(self.folder, 'portal_membership')
self.memberdata = self.portal.portal_memberdata self.memberdata = self.portal.portal_memberdata
self.context = getattr(self.portal, 'doc1') self.context = getattr(self.portal, 'doc1')
@ -81,7 +76,7 @@ class TestCommentForm(unittest.TestCase):
""" """
# Allow discussion # Allow discussion
self.discussionTool.overrideDiscussionFor(self.portal.doc1, True) self.portal.doc1.allow_discussion = True
self.viewlet = CommentsViewlet(self.context, self.request, None, None) self.viewlet = CommentsViewlet(self.context, self.request, None, None)
def make_request(form={}): def make_request(form={}):
@ -126,7 +121,7 @@ class TestCommentForm(unittest.TestCase):
self.assertFalse(commentForm.handleComment(commentForm, "foo")) self.assertFalse(commentForm.handleComment(commentForm, "foo"))
def test_add_anonymous_comment(self): def test_add_anonymous_comment(self):
self.discussionTool.overrideDiscussionFor(self.portal.doc1, True) self.portal.doc1.allow_discussion = True
self.viewlet = CommentsViewlet(self.context, self.request, None, None) self.viewlet = CommentsViewlet(self.context, self.request, None, None)
@ -169,7 +164,10 @@ class TestCommentForm(unittest.TestCase):
"""Make sure that comments can't be posted if discussion is disabled. """Make sure that comments can't be posted if discussion is disabled.
""" """
# Discussion is disabled by default # Disable discussion
registry = queryUtility(IRegistry)
settings = registry.forInterface(IDiscussionSettings)
settings.globally_enabled = False
def make_request(form={}): def make_request(form={}):
request = TestRequest() request = TestRequest()
@ -195,6 +193,7 @@ class TestCommentForm(unittest.TestCase):
# No form errors, but raise unauthorized because discussion is not # No form errors, but raise unauthorized because discussion is not
# allowed # allowed
self.assertEqual(len(errors), 0) self.assertEqual(len(errors), 0)
self.assertRaises(Unauthorized, self.assertRaises(Unauthorized,
commentForm.handleComment, commentForm.handleComment,
commentForm, commentForm,
@ -257,11 +256,6 @@ class TestCommentsViewlet(unittest.TestCase):
typetool = self.portal.portal_types typetool = self.portal.portal_types
typetool.constructContent('Document', self.portal, 'doc1') typetool.constructContent('Document', self.portal, 'doc1')
self.portal_discussion = getToolByName(
self.portal,
'portal_discussion',
None
)
self.membershipTool = getToolByName(self.folder, 'portal_membership') self.membershipTool = getToolByName(self.folder, 'portal_membership')
self.memberdata = self.portal.portal_memberdata self.memberdata = self.portal.portal_memberdata
context = getattr(self.portal, 'doc1') context = getattr(self.portal, 'doc1')
@ -311,8 +305,7 @@ class TestCommentsViewlet(unittest.TestCase):
# By default, discussion is disabled # By default, discussion is disabled
self.assertFalse(self.viewlet.is_discussion_allowed()) self.assertFalse(self.viewlet.is_discussion_allowed())
# Enable discussion # Enable discussion
portal_discussion = getToolByName(self.portal, 'portal_discussion') self.portal.doc1.allow_discussion = True
portal_discussion.overrideDiscussionFor(self.portal.doc1, True)
# Test if discussion has been enabled # Test if discussion has been enabled
self.assertTrue(self.viewlet.is_discussion_allowed()) self.assertTrue(self.viewlet.is_discussion_allowed())

View File

@ -313,7 +313,7 @@ class ConversationTest(unittest.TestCase):
conversation = self.portal.f1.restrictedTraverse('@@conversation_view') conversation = self.portal.f1.restrictedTraverse('@@conversation_view')
# Allow discussion for the folder # Allow discussion for the folder
self.portal_discussion.overrideDiscussionFor(f1, True) self.portal.f1.allow_discussion = True
# Allow discussion on Folder content type # Allow discussion on Folder content type
portal_types = getToolByName(self.portal, 'portal_types') portal_types = getToolByName(self.portal, 'portal_types')
@ -334,12 +334,12 @@ class ConversationTest(unittest.TestCase):
self.assertEqual(conversation.enabled(), False) self.assertEqual(conversation.enabled(), False)
# Allow discussion on content object # Allow discussion on content object
self.portal_discussion.overrideDiscussionFor(self.portal.doc1, True) self.portal.doc1.allow_discussion = True
# Check if discussion is now allowed on the content object # Check if discussion is now allowed on the content object
self.assertEqual(conversation.enabled(), True) self.assertEqual(conversation.enabled(), True)
self.portal_discussion.overrideDiscussionFor(self.portal.doc1, False) self.portal.doc1.allow_discussion = False
self.assertEqual(conversation.enabled(), False) self.assertEqual(conversation.enabled(), False)
def test_dict_operations(self): def test_dict_operations(self):

View File

@ -1,328 +0,0 @@
from datetime import datetime
from DateTime import DateTime
import unittest2 as unittest
from zope.annotation.interfaces import IAnnotations
from Products.CMFCore.utils import getToolByName
from plone.app.testing import TEST_USER_ID, setRoles
from plone.app.discussion.testing import (
PLONE_APP_DISCUSSION_INTEGRATION_TESTING
)
from plone.app.discussion.browser.migration import View
from plone.app.discussion.interfaces import IConversation, IComment
class MigrationTest(unittest.TestCase):
layer = PLONE_APP_DISCUSSION_INTEGRATION_TESTING
def _publish(self, reply):
# publish the reply
status = self.portal.portal_workflow.getStatusOf(
'comment_review_workflow', reply
).copy()
status['review_state'] = 'published'
self.portal.portal_workflow.setStatusOf(
'comment_review_workflow',
reply,
status,
)
def setUp(self):
self.portal = self.layer['portal']
self.request = self.layer['request']
setRoles(self.portal, TEST_USER_ID, ['Manager'])
self.portal.invokeFactory(
id='doc',
title='Document 1',
type_name='Document'
)
# Create a document
self.discussion = getToolByName(self.portal, 'portal_discussion', None)
self.discussion.overrideDiscussionFor(self.portal.doc, 1)
# Publish it
self.workflowTool = getToolByName(self.portal, 'portal_workflow')
self.workflowTool.setDefaultChain('simple_publication_workflow')
self.workflowTool.doActionFor(self.portal.doc, 'publish')
self.request.set("test", True)
self.view = View(self.portal, self.request)
self.workflowTool.setChainForPortalTypes(
('Discussion Item',),
'comment_review_workflow'
)
# Create a user Jimmy Jones so comments creator migration can work?
acl_users = getToolByName(self.portal, 'acl_users')
acl_users.userFolderAddUser('Jim', 'secret', ['Member'], [])
mt = getToolByName(self.portal, 'portal_membership')
member = mt.getMemberById('Jim')
member.fullname = 'Jimmy Jones'
self.doc = self.portal.doc
def test_migrate_comment(self):
# Create a comment
talkback = self.discussion.getDiscussionFor(self.doc)
self.doc.talkback.createReply('My Title', 'My Text', Creator='Jim')
reply = talkback.getReplies()[0]
reply.setReplyTo(self.doc)
reply.creation_date = DateTime(2003, 3, 11, 9, 28, 6, 'GMT')
reply.modification_date = DateTime(2009, 7, 12, 19, 38, 7, 'GMT')
self._publish(reply)
self.assertEqual(reply.Title(), 'My Title')
self.assertEqual(reply.EditableBody(), 'My Text')
self.assertTrue('Jim' in reply.listCreators())
self.assertEqual(talkback.replyCount(self.doc), 1)
self.assertEqual(reply.inReplyTo(), self.doc)
# Call migration script
self.view()
# Make sure a conversation has been created
self.assertTrue(
'plone.app.discussion:conversation' in IAnnotations(self.doc)
)
conversation = IConversation(self.doc)
# Check migration
self.assertEqual(conversation.total_comments, 1)
self.assertTrue(conversation.getComments().next())
comment1 = conversation.values()[0]
self.assertTrue(IComment.providedBy(comment1))
self.assertEqual(comment1.Title(), 'My Title')
self.assertEqual(comment1.text, '<p>My Text</p>\n')
self.assertEqual(comment1.mime_type, 'text/html')
self.assertEqual(comment1.Creator(), 'Jim')
self.assertEqual(
comment1.creation_date,
datetime(2003, 3, 11, 9, 28, 6)
)
self.assertEqual(
comment1.modification_date,
datetime(2009, 7, 12, 19, 38, 7)
)
self.assertEqual([
{'comment': comment1, 'depth': 0, 'id': long(comment1.id)}
], list(conversation.getThreads()))
self.assertFalse(self.doc.talkback)
def test_migrate_comment_with_creator(self):
# Create a comment
talkback = self.discussion.getDiscussionFor(self.doc)
self.doc.talkback.createReply('My Title', 'My Text', Creator='Jim')
reply = talkback.getReplies()[0]
reply.setReplyTo(self.doc)
reply.creation_date = DateTime(2003, 3, 11, 9, 28, 6, 'GMT')
reply.modification_date = DateTime(2009, 7, 12, 19, 38, 7, 'GMT')
reply.author_username = 'Jim'
reply.email = 'jimmy@jones.xyz'
self._publish(reply)
self.assertEqual(reply.Title(), 'My Title')
self.assertEqual(reply.EditableBody(), 'My Text')
self.assertTrue('Jim' in reply.listCreators())
self.assertEqual(talkback.replyCount(self.doc), 1)
self.assertEqual(reply.inReplyTo(), self.doc)
self.assertEqual(reply.author_username, 'Jim')
self.assertEqual(reply.email, 'jimmy@jones.xyz')
# Call migration script
self.view()
# Make sure a conversation has been created
self.assertTrue(
'plone.app.discussion:conversation' in IAnnotations(self.doc)
)
conversation = IConversation(self.doc)
# Check migration
self.assertEqual(conversation.total_comments, 1)
self.assertTrue(conversation.getComments().next())
comment1 = conversation.values()[0]
self.assertTrue(IComment.providedBy(comment1))
self.assertEqual(comment1.Title(), 'My Title')
self.assertEqual(comment1.text, '<p>My Text</p>\n')
self.assertEqual(comment1.mime_type, 'text/html')
self.assertEqual(comment1.Creator(), 'Jim')
self.assertEqual(
comment1.creation_date,
datetime(2003, 3, 11, 9, 28, 6)
)
self.assertEqual(
comment1.modification_date,
datetime(2009, 7, 12, 19, 38, 7)
)
self.assertEqual([
{'comment': comment1, 'depth': 0, 'id': long(comment1.id)}
], list(conversation.getThreads()))
self.assertFalse(self.doc.talkback)
# Though this should be Jimmy, but looks like getProperty won't pick
# up 'author_username' (reply.author_username is not None), so it's
# propagating Creator()..?
self.assertEqual(comment1.author_username, 'Jim')
self.assertEqual(comment1.author_name, 'Jimmy Jones')
self.assertEqual(comment1.author_email, 'jimmy@jones.xyz')
def test_migrate_nested_comments(self):
# Create some nested comments and migrate them
#
# self.doc
# +- First comment
# +- Re: First comment
# + Re: Re: First comment
# + Re: Re: Re: First comment
# +- Re: First comment (2)
# +- Re: First comment (3)
# +- Re: First comment (4)
# +- Second comment
talkback = self.discussion.getDiscussionFor(self.doc)
# First comment
talkback.createReply(title='First comment',
text='This is my first comment.')
comment1 = talkback.getReplies()[0]
self._publish(comment1)
talkback_comment1 = self.discussion.getDiscussionFor(comment1)
# Re: First comment
talkback_comment1.createReply(title='Re: First comment',
text='This is my first reply.')
comment1_1 = talkback_comment1.getReplies()[0]
self._publish(comment1_1)
talkback_comment1_1 = self.discussion.getDiscussionFor(comment1_1)
self.assertEqual(len(talkback.getReplies()), 1)
self.assertEqual(len(talkback_comment1.getReplies()), 1)
self.assertEqual(len(talkback_comment1_1.getReplies()), 0)
#Re: Re: First comment
talkback_comment1_1.createReply(title='Re: Re: First comment',
text='This is my first re-reply.')
comment1_1_1 = talkback_comment1_1.getReplies()[0]
self._publish(comment1_1_1)
talkback_comment1_1_1 = self.discussion.getDiscussionFor(comment1_1_1)
# Re: Re: Re: First comment
talkback_comment1_1_1.createReply(title='Re: Re: Re: First comment',
text='This is my first re-re-reply.')
self._publish(talkback_comment1_1_1.getReplies()[0])
# Re: First comment (2)
talkback_comment1.createReply(title='Re: First comment (2)',
text='This is my first reply (2).')
self._publish(talkback_comment1.getReplies()[1])
# Re: First comment (3)
talkback_comment1.createReply(title='Re: First comment (3)',
text='This is my first reply (3).')
self._publish(talkback_comment1.getReplies()[2])
# Re: First comment (4)
talkback_comment1.createReply(title='Re: First comment (4)',
text='This is my first reply (4).')
self._publish(talkback_comment1.getReplies()[3])
# Second comment
talkback.createReply(title='Second comment',
text='This is my second comment.')
self._publish(talkback.getReplies()[1])
# Call migration script
self.view()
# Check migration
conversation = IConversation(self.doc)
self.assertEqual(conversation.total_comments, 8)
comment1 = conversation.values()[0]
comment1_1 = conversation.values()[1]
comment1_1_1 = conversation.values()[2]
comment1_1_1_1 = conversation.values()[3]
comment1_2 = conversation.values()[4]
comment1_3 = conversation.values()[5]
comment1_4 = conversation.values()[6]
comment2 = conversation.values()[7]
self.assertEqual([
{'comment': comment1, 'depth': 0, 'id': long(comment1.id)},
{'comment': comment1_1, 'depth': 1, 'id': long(comment1_1.id)},
{'comment': comment1_1_1, 'depth': 2, 'id': long(comment1_1_1.id)},
{'comment': comment1_1_1_1, 'depth': 3,
'id': long(comment1_1_1_1.id)},
{'comment': comment1_2, 'depth': 1, 'id': long(comment1_2.id)},
{'comment': comment1_3, 'depth': 1, 'id': long(comment1_3.id)},
{'comment': comment1_4, 'depth': 1, 'id': long(comment1_4.id)},
{'comment': comment2, 'depth': 0, 'id': long(comment2.id)},
], list(conversation.getThreads()))
talkback = self.discussion.getDiscussionFor(self.doc)
self.assertEqual(len(talkback.getReplies()), 0)
def test_migrate_nested_comments_with_filter(self):
# Create some nested comments and migrate them.
# But use a filter that filters the top-level comment.
# All the comments should be removed, but not migrated.
#
# self.doc
# +- First comment
# +- Re: First comment
talkback = self.discussion.getDiscussionFor(self.doc)
# First comment
talkback.createReply(title='First comment',
text='This is my first comment.')
comment1 = talkback.getReplies()[0]
talkback_comment1 = self.discussion.getDiscussionFor(comment1)
# Re: First comment
talkback_comment1.createReply(title='Re: First comment',
text='This is my first reply.')
comment1_1 = talkback_comment1.getReplies()[0]
talkback_comment1_1 = self.discussion.getDiscussionFor(comment1_1)
self.assertEqual(len(talkback.getReplies()), 1)
self.assertEqual(len(talkback_comment1.getReplies()), 1)
self.assertEqual(len(talkback_comment1_1.getReplies()), 0)
def deny_comments(reply):
return False
# Call migration script
self.view(filter_callback=deny_comments)
# Check migration
conversation = IConversation(self.doc)
self.assertEqual(conversation.total_comments, 0)
talkback = self.discussion.getDiscussionFor(self.doc)
self.assertEqual(len(talkback.getReplies()), 0)
def test_migrate_no_comment(self):
# Call migration script
self.view()
# Make sure no conversation has been created
self.assertTrue(
'plone.app.discussion:conversation' not in IAnnotations(self.doc)
)
def test_suite():
return unittest.defaultTestLoader.loadTestsFromName(__name__)

View File

@ -58,29 +58,6 @@ class ModerationViewTest(unittest.TestCase):
('comment_review_workflow,')) ('comment_review_workflow,'))
self.assertEqual(self.view.moderation_enabled(), True) self.assertEqual(self.view.moderation_enabled(), True)
def test_old_comments_not_shown_in_moderation_view(self):
# Create old comment
discussion = getToolByName(self.portal, 'portal_discussion', None)
discussion.overrideDiscussionFor(self.portal.doc1, 1)
talkback = discussion.getDiscussionFor(self.portal.doc1)
self.portal.doc1.talkback.createReply('My Title',
'My Text',
Creator='Jim')
reply = talkback.getReplies()[0]
reply.setReplyTo(self.portal.doc1)
reply.creation_date = DateTime(2003, 3, 11, 9, 28, 6)
reply.modification_date = DateTime(2009, 7, 12, 19, 38, 7)
self.assertEqual(reply.Title(), 'My Title')
self.assertEqual(reply.EditableBody(), 'My Text')
self.assertTrue('Jim' in reply.listCreators())
self.assertEqual(talkback.replyCount(self.portal.doc1), 1)
self.assertEqual(reply.inReplyTo(), self.portal.doc1)
view = self.view()
self.assertTrue('No comments to moderate' in view)
self.assertEqual(len(self.view.comments), 0)
class ModerationBulkActionsViewTest(unittest.TestCase): class ModerationBulkActionsViewTest(unittest.TestCase):

View File

@ -42,7 +42,6 @@ class TestUserNotificationUnit(unittest.TestCase):
'.user_notification_enabled'] = True '.user_notification_enabled'] = True
# Create test content # Create test content
self.portal.invokeFactory('Document', 'doc1') self.portal.invokeFactory('Document', 'doc1')
self.portal_discussion = self.portal.portal_discussion
# Archetypes content types store data as utf-8 encoded strings # Archetypes content types store data as utf-8 encoded strings
# The missing u in front of a string is therefor not missing # The missing u in front of a string is therefor not missing
self.portal.doc1.title = 'Kölle Alaaf' # What is "Fasching"? self.portal.doc1.title = 'Kölle Alaaf' # What is "Fasching"?
@ -189,7 +188,6 @@ class TestModeratorNotificationUnit(unittest.TestCase):
] = True ] = True
# Create test content # Create test content
self.portal.invokeFactory('Document', 'doc1') self.portal.invokeFactory('Document', 'doc1')
self.portal_discussion = self.portal.portal_discussion
# Archetypes content types store data as utf-8 encoded strings # Archetypes content types store data as utf-8 encoded strings
# The missing u in front of a string is therefor not missing # The missing u in front of a string is therefor not missing
self.portal.doc1.title = 'Kölle Alaaf' # What is "Fasching"? self.portal.doc1.title = 'Kölle Alaaf' # What is "Fasching"?

View File

@ -1,56 +0,0 @@
import unittest2 as unittest
from zope.component import queryUtility, createObject
from plone.app.testing import TEST_USER_ID, setRoles
from plone.app.discussion.testing import \
PLONE_APP_DISCUSSION_INTEGRATION_TESTING
from plone.app.discussion.interfaces import ICommentingTool, IConversation
class ToolTest(unittest.TestCase):
layer = PLONE_APP_DISCUSSION_INTEGRATION_TESTING
def setUp(self):
self.portal = self.layer['portal']
setRoles(self.portal, TEST_USER_ID, ['Manager'])
self.portal.invokeFactory(id='doc1',
title='Document 1',
type_name='Document')
def test_tool_indexing(self):
# Create a conversation. In this case we doesn't assign it to an
# object, as we just want to check the Conversation object API.
conversation = IConversation(self.portal.doc1)
# Add a comment.
comment = createObject('plone.Comment')
comment.creator = 'jim'
comment.author_name = "Jim"
comment.text = 'Comment text'
conversation.addComment(comment)
# Check that the comment got indexed in the tool:
tool = queryUtility(ICommentingTool)
comment = list(tool.searchResults())
self.assertTrue(
len(comment) == 1,
"There is only one comment, but we got"
" %s results in the search" % len(comment)
)
self.assertEqual(comment[0].Title, 'Jim on Document 1')
def test_unindexing(self):
pass
def test_search(self):
# search returns only comments
pass
def test_suite():
return unittest.defaultTestLoader.loadTestsFromName(__name__)

View File

@ -32,7 +32,6 @@ class WorkflowSetupTest(unittest.TestCase):
self.portal.invokeFactory('Folder', 'test-folder') self.portal.invokeFactory('Folder', 'test-folder')
self.folder = self.portal['test-folder'] self.folder = self.portal['test-folder']
self.portal.portal_types['Document'].allow_discussion = True self.portal.portal_types['Document'].allow_discussion = True
self.portal_discussion = self.portal.portal_discussion
self.folder.invokeFactory('Document', 'doc1') self.folder.invokeFactory('Document', 'doc1')
self.doc = self.folder.doc1 self.doc = self.folder.doc1
@ -190,7 +189,6 @@ class CommentReviewWorkflowTest(unittest.TestCase):
# Create a Document # Create a Document
self.portal.invokeFactory('Document', 'doc1') self.portal.invokeFactory('Document', 'doc1')
self.portal_discussion = self.portal.portal_discussion
# Create a conversation for this Document # Create a conversation for this Document
conversation = IConversation(self.portal.doc1) conversation = IConversation(self.portal.doc1)