2010-08-28 19:06:53 +02:00
|
|
|
"""Test for the plone.app.discussion indexers
|
|
|
|
"""
|
2022-05-02 00:39:34 +02:00
|
|
|
from .. import catalog
|
|
|
|
from ..interfaces import IConversation
|
|
|
|
from ..testing import PLONE_APP_DISCUSSION_INTEGRATION_TESTING # noqa
|
2018-06-15 10:22:11 +02:00
|
|
|
from datetime import datetime
|
2022-10-21 15:20:32 +02:00
|
|
|
from datetime import timezone
|
|
|
|
from dateutil import tz
|
2022-05-01 23:14:00 +02:00
|
|
|
from DateTime import DateTime
|
2022-10-21 15:20:32 +02:00
|
|
|
from plone.app.event.base import localized_now
|
|
|
|
from plone.app.event.base import default_timezone
|
2015-05-03 08:16:39 +02:00
|
|
|
from plone.app.testing import setRoles
|
|
|
|
from plone.app.testing import TEST_USER_ID
|
2009-05-31 21:07:35 +02:00
|
|
|
from plone.indexer.delegate import DelegatingIndexerFactory
|
2022-10-21 15:20:32 +02:00
|
|
|
from plone.registry.interfaces import IRegistry
|
2015-05-03 08:16:39 +02:00
|
|
|
from zope.component import createObject
|
2022-10-21 15:20:32 +02:00
|
|
|
from zope.component import getUtility
|
|
|
|
import os
|
2015-05-03 08:16:39 +02:00
|
|
|
|
2017-05-08 09:24:38 +02:00
|
|
|
import unittest
|
2009-05-31 19:55:46 +02:00
|
|
|
|
|
|
|
|
2010-12-16 00:52:56 +01:00
|
|
|
LONG_TEXT = """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 vero eos et accusam et justo duo dolores et ea rebum.
|
|
|
|
Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit
|
2010-08-28 19:06:53 +02:00
|
|
|
amet."""
|
|
|
|
|
2010-12-16 00:52:56 +01:00
|
|
|
LONG_TEXT_CUT = """Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed
|
|
|
|
diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
|
2010-08-28 19:06:53 +02:00
|
|
|
sed diam voluptua. At [...]"""
|
|
|
|
|
2009-07-01 22:57:55 +02:00
|
|
|
|
2011-04-16 11:35:34 +02:00
|
|
|
class ConversationIndexersTest(unittest.TestCase):
|
2022-05-01 23:14:09 +02:00
|
|
|
"""Conversation Indexer Tests"""
|
2009-07-01 22:57:55 +02:00
|
|
|
|
2011-04-16 11:35:34 +02:00
|
|
|
layer = PLONE_APP_DISCUSSION_INTEGRATION_TESTING
|
|
|
|
|
|
|
|
def setUp(self):
|
2022-05-01 23:14:09 +02:00
|
|
|
self.portal = self.layer["portal"]
|
|
|
|
setRoles(self.portal, TEST_USER_ID, ["Manager"])
|
2009-07-01 22:57:55 +02:00
|
|
|
|
2017-01-10 18:09:01 +01:00
|
|
|
workflow = self.portal.portal_workflow
|
2022-05-01 23:14:09 +02:00
|
|
|
workflow.doActionFor(self.portal.doc1, "publish")
|
2017-01-10 18:09:01 +01:00
|
|
|
|
2022-10-21 15:20:32 +02:00
|
|
|
# Change the timezone to europe to test timezones properly
|
|
|
|
os.environ['TZ'] = 'UTC'
|
|
|
|
reg_key = "plone.portal_timezone"
|
|
|
|
registry = getUtility(IRegistry)
|
|
|
|
registry[reg_key] = "Europe/Berlin"
|
|
|
|
self.portal_timezone = tz.gettz(default_timezone())
|
|
|
|
|
2009-07-01 22:57:55 +02:00
|
|
|
# Create a conversation.
|
|
|
|
conversation = IConversation(self.portal.doc1)
|
|
|
|
|
2022-05-01 23:14:09 +02:00
|
|
|
comment1 = createObject("plone.Comment")
|
|
|
|
comment1.text = "Comment Text"
|
|
|
|
comment1.creator = "jim"
|
|
|
|
comment1.author_username = "Jim"
|
2022-10-21 15:20:32 +02:00
|
|
|
# Purposefully exclude timezone to test the conversation getter
|
|
|
|
# (see plone.app.discussion.comment.Comment object)
|
2009-07-01 22:57:55 +02:00
|
|
|
comment1.creation_date = datetime(2006, 9, 17, 14, 18, 12)
|
|
|
|
comment1.modification_date = datetime(2006, 9, 17, 14, 18, 12)
|
|
|
|
self.new_id1 = conversation.addComment(comment1)
|
|
|
|
|
2022-05-01 23:14:09 +02:00
|
|
|
comment2 = createObject("plone.Comment")
|
|
|
|
comment2.text = "Comment Text"
|
|
|
|
comment2.creator = "emma"
|
|
|
|
comment2.author_username = "Emma"
|
2022-10-21 15:20:32 +02:00
|
|
|
comment2.creation_date = datetime(2007, 12, 13, 4, 18, 12).astimezone(self.portal_timezone)
|
|
|
|
comment2.modification_date = datetime(2007, 12, 13, 4, 18, 12).astimezone(self.portal_timezone)
|
2009-07-01 22:57:55 +02:00
|
|
|
self.new_id2 = conversation.addComment(comment2)
|
|
|
|
|
2022-05-01 23:14:09 +02:00
|
|
|
comment3 = createObject("plone.Comment")
|
|
|
|
comment3.text = "Comment Text"
|
|
|
|
comment3.creator = "lukas"
|
|
|
|
comment3.author_username = "Lukas"
|
2022-10-21 15:20:32 +02:00
|
|
|
comment3.creation_date = datetime(2009, 4, 12, 11, 12, 12).astimezone(self.portal_timezone)
|
|
|
|
comment3.modification_date = datetime(2009, 4, 12, 11, 12, 12).astimezone(self.portal_timezone)
|
2009-07-01 22:57:55 +02:00
|
|
|
self.new_id3 = conversation.addComment(comment3)
|
|
|
|
|
|
|
|
self.conversation = conversation
|
|
|
|
|
|
|
|
def test_conversation_total_comments(self):
|
2022-05-01 23:14:09 +02:00
|
|
|
self.assertTrue(
|
|
|
|
isinstance(
|
|
|
|
catalog.total_comments,
|
|
|
|
DelegatingIndexerFactory,
|
|
|
|
)
|
|
|
|
)
|
2011-04-15 18:23:38 +02:00
|
|
|
self.assertEqual(catalog.total_comments(self.portal.doc1)(), 3)
|
2009-07-01 22:57:55 +02:00
|
|
|
del self.conversation[self.new_id1]
|
2011-04-15 18:23:38 +02:00
|
|
|
self.assertEqual(catalog.total_comments(self.portal.doc1)(), 2)
|
2009-07-01 22:57:55 +02:00
|
|
|
del self.conversation[self.new_id2]
|
|
|
|
del self.conversation[self.new_id3]
|
2011-04-15 18:23:38 +02:00
|
|
|
self.assertEqual(catalog.total_comments(self.portal.doc1)(), 0)
|
2009-07-01 22:57:55 +02:00
|
|
|
|
|
|
|
def test_conversation_last_comment_date(self):
|
2022-05-01 23:14:09 +02:00
|
|
|
self.assertTrue(
|
|
|
|
isinstance(
|
|
|
|
catalog.last_comment_date,
|
|
|
|
DelegatingIndexerFactory,
|
|
|
|
)
|
|
|
|
)
|
2013-04-17 19:07:40 +02:00
|
|
|
self.assertEqual(
|
|
|
|
catalog.last_comment_date(self.portal.doc1)(),
|
2022-10-21 15:20:32 +02:00
|
|
|
datetime(2009, 4, 12, 11, 12, 12).astimezone(self.portal_timezone),
|
2013-04-17 19:07:40 +02:00
|
|
|
)
|
2009-07-01 22:57:55 +02:00
|
|
|
del self.conversation[self.new_id3]
|
2013-04-17 19:07:40 +02:00
|
|
|
self.assertEqual(
|
|
|
|
catalog.last_comment_date(self.portal.doc1)(),
|
2022-10-21 15:20:32 +02:00
|
|
|
datetime(2007, 12, 13, 4, 18, 12).astimezone(self.portal_timezone),
|
2013-04-17 19:07:40 +02:00
|
|
|
)
|
2009-07-01 22:57:55 +02:00
|
|
|
del self.conversation[self.new_id2]
|
|
|
|
del self.conversation[self.new_id1]
|
2011-04-15 18:23:38 +02:00
|
|
|
self.assertEqual(catalog.last_comment_date(self.portal.doc1)(), None)
|
2009-07-01 22:57:55 +02:00
|
|
|
|
|
|
|
def test_conversation_commentators(self):
|
|
|
|
pass
|
2015-05-13 14:03:11 +02:00
|
|
|
# self.assertEqual(catalog.commentators(self.portal.doc1)(),
|
2010-08-28 19:06:53 +02:00
|
|
|
# ('Jim', 'Emma', 'Lukas'))
|
2015-05-13 14:03:11 +02:00
|
|
|
# self.assertTrue(isinstance(catalog.commentators,
|
2010-08-28 19:06:53 +02:00
|
|
|
# DelegatingIndexerFactory))
|
2009-07-01 22:57:55 +02:00
|
|
|
|
2010-12-16 00:52:56 +01:00
|
|
|
|
2011-04-16 11:35:34 +02:00
|
|
|
class CommentIndexersTest(unittest.TestCase):
|
|
|
|
|
|
|
|
layer = PLONE_APP_DISCUSSION_INTEGRATION_TESTING
|
|
|
|
|
|
|
|
def setUp(self):
|
2022-05-01 23:14:09 +02:00
|
|
|
self.portal = self.layer["portal"]
|
|
|
|
setRoles(self.portal, TEST_USER_ID, ["Manager"])
|
2009-05-18 17:15:36 +02:00
|
|
|
|
2009-05-31 19:55:46 +02:00
|
|
|
# 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)
|
|
|
|
|
2010-12-16 00:52:56 +01:00
|
|
|
# Add a comment. Note: in real life, we always create comments via the
|
2010-08-28 19:06:53 +02:00
|
|
|
# factory to allow different factories to be swapped in
|
2009-05-31 19:55:46 +02:00
|
|
|
|
2022-10-21 15:20:32 +02:00
|
|
|
# Change the timezone to europe to test timezones properly
|
|
|
|
os.environ['TZ'] = 'UTC'
|
|
|
|
reg_key = "plone.portal_timezone"
|
|
|
|
registry = getUtility(IRegistry)
|
|
|
|
registry[reg_key] = "Europe/Berlin"
|
|
|
|
portal_timezone = tz.gettz(default_timezone())
|
|
|
|
|
|
|
|
|
2022-05-01 23:14:09 +02:00
|
|
|
comment = createObject("plone.Comment")
|
|
|
|
comment.text = "Lorem ipsum dolor sit amet."
|
|
|
|
comment.creator = "jim"
|
|
|
|
comment.author_name = "Jim"
|
2022-10-21 15:20:32 +02:00
|
|
|
|
|
|
|
# Create date in CEST (ie not daylight savings = UTC+2)
|
|
|
|
comment.creation_date = datetime(2006, 9, 17, 14, 18, 12).astimezone(portal_timezone)
|
|
|
|
|
|
|
|
# Create date in CET (ie daylight savings = UTC+1)
|
|
|
|
comment.modification_date = datetime(2008, 3, 12, 7, 32, 52).astimezone(portal_timezone)
|
2009-05-31 19:55:46 +02:00
|
|
|
|
2010-08-28 19:06:53 +02:00
|
|
|
self.comment_id = conversation.addComment(comment)
|
2009-10-16 14:11:58 +02:00
|
|
|
self.comment = comment.__of__(conversation)
|
2009-07-01 12:01:37 +02:00
|
|
|
self.conversation = conversation
|
2009-05-31 21:07:35 +02:00
|
|
|
|
2009-06-02 01:45:49 +02:00
|
|
|
def test_title(self):
|
2022-05-01 23:14:09 +02:00
|
|
|
self.assertEqual(catalog.title(self.comment)(), "Jim on Document 1")
|
2011-04-15 18:23:38 +02:00
|
|
|
self.assertTrue(isinstance(catalog.title, DelegatingIndexerFactory))
|
2009-06-02 01:45:49 +02:00
|
|
|
|
|
|
|
def test_description(self):
|
2013-04-17 19:07:40 +02:00
|
|
|
self.assertEqual(
|
|
|
|
catalog.description(self.comment)(),
|
2022-05-01 23:14:09 +02:00
|
|
|
"Lorem ipsum dolor sit amet.",
|
2013-04-17 19:07:40 +02:00
|
|
|
)
|
2022-05-01 23:14:09 +02:00
|
|
|
self.assertTrue(isinstance(catalog.description, DelegatingIndexerFactory))
|
2009-07-01 12:01:37 +02:00
|
|
|
|
|
|
|
def test_description_long(self):
|
2009-06-01 11:59:07 +02:00
|
|
|
# Create a 50 word comment and make sure the description returns
|
|
|
|
# only the first 25 words
|
2022-05-01 23:14:09 +02:00
|
|
|
comment_long = createObject("plone.Comment")
|
|
|
|
comment_long.title = "Long Comment"
|
2010-08-28 19:06:53 +02:00
|
|
|
comment_long.text = LONG_TEXT
|
2009-07-01 12:01:37 +02:00
|
|
|
|
2010-07-13 12:45:53 +02:00
|
|
|
self.conversation.addComment(comment_long)
|
2013-04-17 19:07:40 +02:00
|
|
|
self.assertEqual(
|
|
|
|
catalog.description(comment_long)(),
|
2022-05-01 23:14:09 +02:00
|
|
|
LONG_TEXT_CUT.replace("\n", " "),
|
2013-04-17 19:07:40 +02:00
|
|
|
)
|
2009-05-31 19:55:46 +02:00
|
|
|
|
2009-05-18 17:15:36 +02:00
|
|
|
def test_dates(self):
|
2009-06-02 01:17:13 +02:00
|
|
|
# Test if created, modified, effective etc. are set correctly
|
2013-04-17 19:07:40 +02:00
|
|
|
self.assertEqual(
|
|
|
|
catalog.created(self.comment)(),
|
2022-10-21 15:20:32 +02:00
|
|
|
DateTime(2006, 9, 17, 16, 18, 12, "GMT+2"),
|
2013-04-17 19:07:40 +02:00
|
|
|
)
|
|
|
|
self.assertEqual(
|
|
|
|
catalog.effective(self.comment)(),
|
2022-10-21 15:20:32 +02:00
|
|
|
DateTime(2006, 9, 17, 16, 18, 12, "GMT+2"),
|
2013-04-17 19:07:40 +02:00
|
|
|
)
|
|
|
|
self.assertEqual(
|
|
|
|
catalog.modified(self.comment)(),
|
2022-10-21 15:20:32 +02:00
|
|
|
DateTime(2008, 3, 12, 8, 32, 52, "GMT+1"),
|
2013-04-17 19:07:40 +02:00
|
|
|
)
|
2009-05-18 17:15:36 +02:00
|
|
|
|
|
|
|
def test_searchable_text(self):
|
2009-06-02 01:45:49 +02:00
|
|
|
# Test if searchable text is a concatenation of title and comment text
|
2013-04-17 19:07:40 +02:00
|
|
|
self.assertEqual(
|
|
|
|
catalog.searchable_text(self.comment)(),
|
2022-05-01 23:14:09 +02:00
|
|
|
("Lorem ipsum dolor sit amet."),
|
|
|
|
)
|
|
|
|
self.assertTrue(
|
|
|
|
isinstance(
|
|
|
|
catalog.searchable_text,
|
|
|
|
DelegatingIndexerFactory,
|
|
|
|
)
|
2013-04-17 19:07:40 +02:00
|
|
|
)
|
2009-05-18 17:15:36 +02:00
|
|
|
|
|
|
|
def test_creator(self):
|
2022-05-01 23:14:09 +02:00
|
|
|
self.assertEqual(catalog.creator(self.comment)(), ("jim"))
|
2009-05-31 19:55:46 +02:00
|
|
|
|
2009-07-03 10:03:09 +02:00
|
|
|
def test_in_response_to(self):
|
|
|
|
# make sure in_response_to returns the title or id of the content
|
|
|
|
# object the comment was added to
|
2022-05-01 23:14:09 +02:00
|
|
|
self.assertEqual(catalog.in_response_to(self.comment)(), "Document 1")
|