First running test.

svn path=/plone.app.discussion/trunk/; revision=26962
This commit is contained in:
Lennart Regebro 2009-05-16 10:34:12 +00:00
parent a6fb8dd8de
commit 49c6c45453
4 changed files with 57 additions and 16 deletions

View File

@ -1,6 +1,6 @@
"""The default comment class and factory. """The default comment class and factory.
""" """
from datetime import datetime
from zope.interface import implements from zope.interface import implements
from zope.component.factory import Factory from zope.component.factory import Factory
@ -26,6 +26,7 @@ class Comment(Explicit, Traversable, RoleManager, Owned):
__parent__ = None __parent__ = None
comment_id = None # int comment_id = None # int
reply_to = None # int
title = u"" title = u""
@ -44,14 +45,15 @@ class Comment(Explicit, Traversable, RoleManager, Owned):
def __init__(self, id=0, conversation=None, **kw): def __init__(self, id=0, conversation=None, **kw):
self.comment_id = id self.comment_id = id
self.__parent__ = conversation self.__parent__ = conversation
self.creation_date = self.modification_date = datetime.now()
for k, v in kw: for k, v in kw.items():
setattr(self, k, v) setattr(self, k, v)
@property @property
def in_reply_to(self): def in_reply_to(self):
# TODO # TODO
return None return self.reply_to
@property @property
def __name__(self): def __name__(self):

View File

@ -60,26 +60,41 @@ class Conversation(Persistent, Explicit):
@property @property
def total_comments(self): def total_comments(self):
# TODO # TODO
return 0 return len(self._comments)
@property @property
def last_comment_date(self): def last_comment_date(self):
# TODO # TODO
return None return self._last_comment_date
@property @property
def commentators(self): def commentators(self):
# TODO: # TODO:
return set() return set()
def getComments(start=0, size=None): def getComments(self, start=0, size=None):
# TODO return self._comments.values()
pass
def getThreads(start=0, size=None, root=None, depth=None): def getThreads(self, start=0, size=None, root=None, depth=None):
# TODO return self._comments.values()
pass
def addComment(self, comment):
id = len(self._comments) + 1
self._comments[id] = comment
comment.comment_id = id
commentator = comment.creator
if not commentator in self._commentators:
self._commentators[commentator] = 0
self._commentators[commentator] += 1
self._last_comment_date = comment.creation_date
reply_to = comment.in_reply_to
if not reply_to in self._children:
self._children[reply_to] = IISet()
self._children[reply_to].insert(id)
# Dict API # Dict API
# TODO: Update internal data structures when items added or removed # TODO: Update internal data structures when items added or removed

View File

@ -73,6 +73,11 @@ class IConversation(IIterableMapping, IWriteMapping):
in order to give enough context to show the full lineage of the in order to give enough context to show the full lineage of the
starting comment. starting comment.
""" """
def addComment(comment):
"""Adds a new comment to the list of comments, amd returns the
comment id that was assigned.
"""
class IReplies(IIterableMapping, IWriteMapping): class IReplies(IIterableMapping, IWriteMapping):
"""A set of related comments in reply to a given content object or """A set of related comments in reply to a given content object or

View File

@ -1,5 +1,5 @@
import unittest import unittest
from datetime import datetime, timedelta
from base import TestCase from base import TestCase
from zope.testing import doctestunit from zope.testing import doctestunit
@ -13,7 +13,10 @@ from Products.Five import fiveconfigure
from Products.PloneTestCase import PloneTestCase as ptc from Products.PloneTestCase import PloneTestCase as ptc
from Products.PloneTestCase.layer import PloneSite from Products.PloneTestCase.layer import PloneSite
class APITest(TestCase): from plone.app.discussion.conversation import Conversation
from plone.app.discussion.comment import Comment
class ConversationTest(TestCase):
def afterSetUp(self): def afterSetUp(self):
# XXX If we make this a layer, it only get run once... # XXX If we make this a layer, it only get run once...
# First we need to create some content. # First we need to create some content.
@ -21,13 +24,29 @@ class APITest(TestCase):
typetool = self.portal.portal_types typetool = self.portal.portal_types
typetool.constructContent('Document', self.portal, 'doc1') typetool.constructContent('Document', self.portal, 'doc1')
def test_test(self): def test_add_comment(self):
raise NotImplementedError # 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 = Conversation()
# Add a comment. reply_to=0 means it's not a reply
comment = Comment(conversation=conversation, reply_to=0)
comment.title = 'Comment 1'
comment.text = 'Comment text'
conversation.addComment(comment)
# Check that the conversation methods return the correct data
self.assertEquals(comment.id, '1')
self.assertEquals(len(conversation.getComments()), 1)
self.assertEquals(len(conversation.getThreads()), 1)
self.assertEquals(conversation.total_comments, 1)
self.assert_(conversation.last_comment_date - datetime.now() < timedelta(seconds=1))
def test_suite(): def test_suite():
return unittest.TestSuite([ return unittest.TestSuite([
unittest.makeSuite(APITest), unittest.makeSuite(ConversationTest),
]) ])
if __name__ == '__main__': if __name__ == '__main__':