plone.app.discussion/plone/app/discussion/tests/test_migration.py
Timo Stollenwerk 8bc0b068ae delete old replies and talkbacks during the migration.
svn path=/plone.app.discussion/trunk/; revision=28052
2009-07-13 20:22:37 +00:00

116 lines
4.4 KiB
Python

from datetime import datetime
from DateTime import DateTime
import unittest
from zope.annotation.interfaces import IAnnotations
from Products.CMFCore.utils import getToolByName
from Products.PloneTestCase.ptc import PloneTestCase
from plone.app.discussion.tests.layer import DiscussionLayer
from plone.app.discussion.browser.migration import View
from plone.app.discussion.interfaces import IConversation, IComment
class MigrationTest(PloneTestCase):
def afterSetUp(self):
self.loginAsPortalOwner()
typetool = self.portal.portal_types
typetool.constructContent('Document', self.portal, 'doc')
# Create a document
self.discussion = getToolByName(self.portal, 'portal_discussion', None)
self.discussion.overrideDiscussionFor(self.portal.doc, 1)
# Publish it
self.workflow = self.portal.portal_workflow
self.workflow.doActionFor(self.portal.doc, 'publish')
request = self.app.REQUEST
context = getattr(self.portal, 'doc')
self.view = View(context, request)
self.workflow.setChainForPortalTypes(('Discussion Item',), 'comment_review_workflow')
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)
reply.modification_date = DateTime(2009, 7, 12, 19, 38, 7)
self.assertEquals(reply.Title(), 'My Title')
self.assertEquals(reply.EditableBody(), 'My Text')
self.failUnless('Jim' in reply.listCreators())
self.assertEquals(talkback.replyCount(self.doc), 1)
self.assertEquals(reply.inReplyTo(), self.doc)
# Call migration script
self.view()
# Make sure a conversation has been created
self.failUnless('plone.app.discussion:conversation' in IAnnotations(self.doc))
conversation = IConversation(self.doc)
# Check migration
self.assertEquals(conversation.total_comments, 1)
self.failUnless(conversation.getComments().next())
comment1 = conversation.values()[0]
self.assert_(IComment.providedBy(comment1))
self.assertEquals(comment1.Title(), 'My Title')
self.assertEquals(comment1.text, 'My Text')
self.assertEquals(comment1.Creator(), 'Jim')
self.assertEquals(comment1.creation_date, datetime(2003, 3, 11, 9, 28, 6))
self.assertEquals(comment1.modification_date, datetime(2009, 7, 12, 19, 38, 7))
self.assertEquals(
[{'comment': comment1, 'depth': 0, 'id': long(comment1.id)},]
, list(conversation.getThreads()))
self.failIf(self.doc.talkback)
def test_migrate_nested_comments(self):
# Create some nested comments and migrate them
#
# self.doc
# +- First comment
# +- Re: First comment
talkback = self.discussion.getDiscussionFor(self.doc)
# Create comment
comment1_id = talkback.createReply(title='First comment',
text='This is my first comment.')
comment1 = talkback.getReplies()[0]
talkback_comment1 = self.discussion.getDiscussionFor(comment1)
# Create reply to comment
comment1_1_id = 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.assertEquals(len(talkback.getReplies()), 1)
self.assertEquals(len(talkback_comment1.getReplies()), 1)
self.assertEquals(len(talkback_comment1_1.getReplies()), 0)
# Call migration script
self.view()
# Check migration
conversation = IConversation(self.doc)
self.assertEquals(conversation.total_comments, 2)
comment1 = conversation.values()[0]
comment2 = conversation.values()[1]
self.assertEquals(
[{'comment': comment1, 'depth': 0, 'id': long(comment1.id)},
{'comment': comment2, 'depth': 0, 'id': long(comment2.id)},
], list(conversation.getThreads()))
def test_suite():
return unittest.defaultTestLoader.loadTestsFromName(__name__)