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.
"""
from datetime import datetime
from zope.interface import implements
from zope.component.factory import Factory
@ -26,6 +26,7 @@ class Comment(Explicit, Traversable, RoleManager, Owned):
__parent__ = None
comment_id = None # int
reply_to = None # int
title = u""
@ -44,14 +45,15 @@ class Comment(Explicit, Traversable, RoleManager, Owned):
def __init__(self, id=0, conversation=None, **kw):
self.comment_id = id
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)
@property
def in_reply_to(self):
# TODO
return None
return self.reply_to
@property
def __name__(self):

View File

@ -60,26 +60,41 @@ class Conversation(Persistent, Explicit):
@property
def total_comments(self):
# TODO
return 0
return len(self._comments)
@property
def last_comment_date(self):
# TODO
return None
return self._last_comment_date
@property
def commentators(self):
# TODO:
return set()
def getComments(start=0, size=None):
# TODO
pass
def getComments(self, start=0, size=None):
return self._comments.values()
def getThreads(start=0, size=None, root=None, depth=None):
# TODO
pass
def getThreads(self, start=0, size=None, root=None, depth=None):
return self._comments.values()
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
# 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
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):
"""A set of related comments in reply to a given content object or

View File

@ -1,5 +1,5 @@
import unittest
from datetime import datetime, timedelta
from base import TestCase
from zope.testing import doctestunit
@ -13,7 +13,10 @@ from Products.Five import fiveconfigure
from Products.PloneTestCase import PloneTestCase as ptc
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):
# XXX If we make this a layer, it only get run once...
# First we need to create some content.
@ -21,13 +24,29 @@ class APITest(TestCase):
typetool = self.portal.portal_types
typetool.constructContent('Document', self.portal, 'doc1')
def test_test(self):
raise NotImplementedError
def test_add_comment(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 = 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():
return unittest.TestSuite([
unittest.makeSuite(APITest),
unittest.makeSuite(ConversationTest),
])
if __name__ == '__main__':