diff --git a/plone/app/discussion/catalog.py b/plone/app/discussion/catalog.py
index 1f46ddb..ed6caf9 100644
--- a/plone/app/discussion/catalog.py
+++ b/plone/app/discussion/catalog.py
@@ -6,6 +6,8 @@ Also provide event handlers to actually catalog the comments.
from string import split, join
+from DateTime import DateTime
+
from plone.indexer import indexer
from plone.app.discussion.interfaces import IComment
@@ -25,3 +27,28 @@ def comment_description(object):
def comment_searchable_text(object):
return object.title, object.text
+@indexer(IComment)
+def effective(object):
+ # the catalog index needs Zope DateTime instead of Python datetime
+ # Todo!!!
+ return DateTime
+
+@indexer(IComment)
+def created(object):
+ # the catalog index needs Zope DateTime instead of Python datetime
+ return DateTime(object.creation_date.year,
+ object.creation_date.month,
+ object.creation_date.day,
+ object.creation_date.hour,
+ object.creation_date.minute,
+ object.creation_date.second)
+
+@indexer(IComment)
+def modified(object):
+ # the catalog index needs Zope DateTime instead of Python datetime
+ return DateTime(object.modification_date.year,
+ object.modification_date.month,
+ object.modification_date.day,
+ object.modification_date.hour,
+ object.modification_date.minute,
+ object.modification_date.second)
diff --git a/plone/app/discussion/configure.zcml b/plone/app/discussion/configure.zcml
index 20dcada..4b7b01f 100644
--- a/plone/app/discussion/configure.zcml
+++ b/plone/app/discussion/configure.zcml
@@ -61,5 +61,9 @@
+
+
+
+
diff --git a/plone/app/discussion/tests/test_indexers.py b/plone/app/discussion/tests/test_indexers.py
index 5bfef8f..b0531d9 100644
--- a/plone/app/discussion/tests/test_indexers.py
+++ b/plone/app/discussion/tests/test_indexers.py
@@ -1,5 +1,8 @@
import unittest
+from datetime import datetime, timedelta
+from DateTime import DateTime
+
from zope.component import createObject
from Products.PloneTestCase.ptc import PloneTestCase
@@ -12,7 +15,7 @@ from plone.indexer.delegate import DelegatingIndexerFactory
from zope.component import provideAdapter
-from plone.app.discussion.catalog import comment_title, comment_description, comment_searchable_text
+from plone.app.discussion import catalog
class IndexersTest(PloneTestCase):
@@ -23,7 +26,7 @@ class IndexersTest(PloneTestCase):
self.loginAsPortalOwner()
typetool = self.portal.portal_types
typetool.constructContent('Document', self.portal, 'doc1')
- provideAdapter(comment_title, name='title')
+ provideAdapter(catalog.comment_title, name='title')
def test_comment_title(self):
@@ -43,8 +46,8 @@ class IndexersTest(PloneTestCase):
new_id = conversation.addComment(comment)
- self.assertEquals(comment_title(comment)(), 'Comment 1')
- self.assert_(isinstance(comment_title, DelegatingIndexerFactory))
+ self.assertEquals(catalog.comment_title(comment)(), 'Comment 1')
+ self.assert_(isinstance(catalog.comment_title, DelegatingIndexerFactory))
def test_comment_description(self):
# Create a 50 word comment and make sure the description returns
@@ -66,12 +69,33 @@ class IndexersTest(PloneTestCase):
new_id = conversation.addComment(comment)
- self.assertEquals(comment_description(comment)(), 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At...')
- self.assert_(isinstance(comment_description, DelegatingIndexerFactory))
+ self.assertEquals(catalog.comment_description(comment)(), 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At...')
+ self.assert_(isinstance(catalog.comment_description, DelegatingIndexerFactory))
def test_dates(self):
- # created, modified, effective etc
- pass
+ # Test if created, modified, effective etc. are set correctly
+
+ # 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)
+
+ # Pretend that we have traversed to the comment by aq wrapping it.
+ conversation = conversation.__of__(self.portal.doc1)
+
+ # Add a comment. Note: in real life, we always create comments via the factory
+ # to allow different factories to be swapped in
+
+ comment = createObject('plone.Comment')
+ comment.title = 'Comment 1'
+ comment.text = 'Comment Text'
+ comment.creation_date = datetime(2006, 9, 17, 14, 18, 12)
+ comment.modification_date = datetime(2008, 3, 12, 7, 32, 52)
+
+ new_id = conversation.addComment(comment)
+
+ # Check the indexes
+ self.assertEquals(catalog.created(comment)(), DateTime(2006, 9, 17, 14, 18, 12))
+ self.assertEquals(catalog.modified(comment)(), DateTime(2008, 3, 12, 7, 32, 52))
def test_searchable_text(self):
# Create a conversation. In this case we doesn't assign it to an
@@ -90,8 +114,8 @@ class IndexersTest(PloneTestCase):
new_id = conversation.addComment(comment)
- self.assertEquals(comment_searchable_text(comment)(), ('Comment 1', 'Comment text'))
- self.assert_(isinstance(comment_searchable_text, DelegatingIndexerFactory))
+ self.assertEquals(catalog.comment_searchable_text(comment)(), ('Comment 1', 'Comment text'))
+ self.assert_(isinstance(catalog.comment_searchable_text, DelegatingIndexerFactory))
def test_creator(self):
pass