示例#1
0
    def test_post_creation(self):
        self.ws.addMember(testing.MEMBER)
        login(self.portal, testing.MEMBER)

        helpers.create_post(self.ws, 'post-1', title=u"Post 1")

        self.assertTrue('post-1' in self.ws)
    def test_thread_sort(self):
        setRoles(self.portal, TEST_USER_ID, ('Manager',))

        ws = helpers.create_workspace(self.portal, 'ws1', title=u"Workspace 1")

        t1 = helpers.publish_post(helpers.create_task(
            ws, 't1', title=u"Task 1",
            deadline=datetime.now() + timedelta(1)))
        p1 = helpers.publish_post(helpers.create_post(
            ws, 'p1', title=u"Post 1",
            creation_date=DateTime() - 3))
        t2 = helpers.publish_post(helpers.create_task(
            ws, 't2', title=u"Task 2",
            deadline=datetime.now() - timedelta(4)))
        t3 = helpers.publish_post(helpers.create_task(
            ws, 't3', title=u"Task 3",
            deadline=datetime.now() - timedelta(2)))
        p2 = helpers.publish_post(helpers.create_post(
            ws, 'p2', title=u"Post 2",
            creation_date=DateTime() - 1))
        r1 = helpers.create_reply(
            p2, 'r1', title=u"Reply 1",
            creation_date=DateTime() - 1)
        p3 = helpers.publish_post(helpers.create_post(
            ws, 'p3', title=u"Post 3",
            creation_date=DateTime()))
        r2 = helpers.create_reply(
            p2, 'r2', title=u"Reply 2",
            creation_date=DateTime())
        r3 = helpers.create_reply(
            p2, 'r3', title=u"Reply 3",
            creation_date=DateTime() + 1)

        conversation = ws.unrestrictedTraverse('@@conversation')
        post_brains = conversation.brains

        result = []

        for post_brain in post_brains:
            post = post_brain.getObject()
            result.append(post.id)

            thread = post.unrestrictedTraverse('@@thread')
            for reply_brain in thread.replies:
                result.append(reply_brain.getId)

        expected = [t1, p3, p2, r1, r2, r3, t3, p1, t2]
        expected = [x.id for x in expected]

        self.assertEqual(result, expected)
    def test_notifications_for_new_post(self):
        ws = self.portal['workspaces']['workspace-1']
        people = self.portal['people']
        self.mailhost.messages = []
        login(self.portal, 'test_user_1')

        post = helpers.create_post(ws, 'new-post', title=u"New Post",
            text=richtextify(u"<p>test</p><p>test</p>123"))

        self.assertEqual(len(self.mailhost.messages), 0)

        helpers.publish_post(post)

        self.assertEqual(len(self.mailhost.messages), 2)

        recipients = [unicode(m['To']) for m in self.mailhost.messages]
        expected_recipients = []
        for uid in ws.getMemberIds():
            name = getattr(people.get(uid, None), 'title', uid)
            email = getattr(people.get(uid, None), 'emailAddress', None)
            if not email:
                continue
            expected_recipients.append('{0} <{1}>'.format(name, email))
        self.assertEqual(recipients, expected_recipients)

        for message in self.mailhost.messages:
            self.assertEqual(unicode(message['Subject']), u"[Plone site] " +
                u"New post: “New Post” by Test User in Workspace 1")

            msg_text = quopri.decodestring(message.get_payload())
            expected_msg_text = u"test\n\ntest\n123"
            self.assertEqual(msg_text, expected_msg_text)
示例#4
0
    def setUp(self):
        login(self.portal, testing.SITE_ADMIN)
        self.workspaces = self.portal.restrictedTraverse("workspaces")
        self.ws = helpers.create_workspace(self.workspaces, 'ws', title=u"Workspace")
        self.post = helpers.create_post(self.ws, 'p', title=u"Toast Post")

        self.project = create_project(
            self.workspaces, 'the-project', title=u"The Project")
        self.project_post = helpers.create_post(
            self.project, 'project-post', title=u"Project Post")
        self.pws = helpers.create_workspace(self.workspaces,
            "project_workspace", title=u"Project-Workspace")
        self.project.add_workspace(self.pws)
        self.pws_post = helpers.create_post(
            self.pws, 'pws-post', title=u"PWS Post")

        logout()
    def test_invalid_recipient(self):
        ws = self.portal['workspaces']['workspace-1']
        ws.addMember('non_existing_member')
        self.mailhost.messages = []
        login(self.portal, 'test_user_1')

        post = helpers.create_post(ws, 'new-post', title=u"New Post")
        helpers.publish_post(post)

        self.assertEqual(len(self.mailhost.messages), 2)
示例#6
0
    def test_reply_creation(self):
        setRoles(self.portal, TEST_USER_ID, ('Manager',))

        ws = helpers.create_workspace(self.portal, 'ws1', title=u"Workspace 1")
        p = helpers.create_post(ws, 'p1', title=u"Post 1")
        p = helpers.publish_post(p)
        r = helpers.create_reply(p, 'r1', title=u"Reply 1")

        self.assertTrue('r1' in p)
        self.assertEqual(r, p['r1'])
示例#7
0
    def test_post_creation_and_deletion(self):
        setRoles(self.portal, TEST_USER_ID, ('Manager',))

        ws = helpers.create_workspace(self.portal, 'ws1', title=u"Workspace 1")
        ws.addMember(testing.SITE_MEMBER)
        login(self.portal, testing.SITE_MEMBER)

        # create
        helpers.create_post(ws, 'post-1', title=u"Post 1")

        self.assertTrue('post-1' in ws)

        # delete
        newInteraction()
        delete_view = ws['post-1'].restrictedTraverse('@@delete_confirmation')
        delete_view.request["form.button.Delete"] = 1
        delete_view.update()
        endInteraction()

        self.assertFalse('post-1' in ws)
    def test_notifications_disabled(self):
        ws = self.portal['workspaces']['workspace-1']
        self.portal['people']['test_user_1'].recieveNotifications = False
        self.portal['people']['test_user_2'].recieveNotifications = False
        self.mailhost.messages = []
        login(self.portal, 'test_user_1')

        post = helpers.create_post(ws, 'new-post', title=u"New Post")
        helpers.publish_post(post)
        helpers.create_reply(post, 'new-reply', title=u"New Reply")

        self.assertEqual(len(self.mailhost.messages), 0)
示例#9
0
    def test_post_publishing(self):
        setRoles(self.portal, TEST_USER_ID, ('Manager',))

        ws = helpers.create_workspace(self.portal, 'ws1', title=u"Workspace 1")
        post = helpers.create_post(ws, 'post-1', title=u"Post 1")
        post = helpers.publish_post(post)

        self.assertEqual(post, ws['post-1'])

        # the post should be published:
        pw = getToolByName(self.portal, 'portal_workflow')
        self.assertEqual(pw.getInfoFor(post, 'review_state'), 'published')
    def test_batching(self):
        setRoles(self.portal, TEST_USER_ID, ('Manager',))

        ws = helpers.create_workspace(self.portal, 'ws1', title=u"Workspace 1")

        for i in range(23):
            helpers.create_post(
                ws, 'p%d' % i, title=u"Post %d" % i)

        conversation = ws.unrestrictedTraverse('@@conversation')

        expected = ['p%d' % i for i in range(23)]

        brains = conversation.brains
        self.assertEqual([x.getId for x in brains], expected)

        batch = conversation.getBatch(b_start=0, b_size=10, b_orphan=0)
        self.assertEqual([x.getId for x in batch], expected[:10])

        batch = conversation.getBatch(b_start=10, b_size=10, b_orphan=0)
        self.assertEqual([x.getId for x in batch], expected[10:20])

        batch = conversation.getBatch(b_start=10, b_size=10, b_orphan=3)
        self.assertEqual([x.getId for x in batch], expected[10:23])
 def test_post_explicit_view(self):
     post = helpers.create_post(self.ws, 'post-1', title=u"Post 1")
     result = self.publishTraverse(post.id + "/view")
     self.assertEqual(result, post)
     self.assert_redirection(None)
 def test_post_default_view(self):
     post = helpers.create_post(self.ws, 'post-1', title=u"Post 1")
     result = self.publishTraverse(post.id)
     self.assertEqual(result, post)
     self.assert_redirection(
         self.ws.absolute_url() + "/conversation#entryanchor-" + post.id)
示例#13
0
    def test_reply_permissions(self):
        setRoles(self.portal, TEST_USER_ID, ('Manager',))

        ws = helpers.create_workspace(self.portal, 'ws1', title=u"Workspace 1")
        p = helpers.create_post(ws, 'p1', title=u"Post 1")
        p = helpers.publish_post(p)
        r = helpers.create_reply(p, 'r1', title=u"Reply 1")
        pt = helpers.PermissionTester(r)

        # Anonymous cannot view (permission may be aquired):
        self.assertFalse(pt.has('Anonymous', 'View'))

        # Owners, contributors, editors and admins can add content:
        self.assertTrue(pt.has('Owner', 'Add portal content'))
        self.assertTrue(pt.has('Contributor', 'Add portal content'))
        self.assertTrue(pt.has('Editor', 'Add portal content'))
        self.assertTrue(pt.has('Manager', 'Add portal content'))
        self.assertTrue(pt.has('Site Administrator', 'Add portal content'))
        # others can't:
        self.assertFalse(pt.has('Authenticated', 'Add portal content'))
        self.assertFalse(pt.has('Anonymous', 'Add portal content'))

        # Owners and admins can modify and delete content:
        self.assertTrue(pt.has('Owner', 'Modify portal content'))
        self.assertTrue(pt.has('Manager', 'Modify portal content'))
        self.assertTrue(pt.has('Site Administrator', 'Modify portal content'))
        self.assertTrue(pt.has('Owner', 'Delete objects'))
        self.assertTrue(pt.has('Manager', 'Delete objects'))
        self.assertTrue(pt.has('Site Administrator', 'Delete objects'))
        # others can't:
        self.assertFalse(pt.has('Editor', 'Modify portal content'))
        self.assertFalse(pt.has('Contributor', 'Modify portal content'))
        self.assertFalse(pt.has('Authenticated', 'Modify portal content'))
        self.assertFalse(pt.has('Anonymous', 'Modify portal content'))
        self.assertFalse(pt.has('Editor', 'Delete objects'))
        self.assertFalse(pt.has('Contributor', 'Delete objects'))
        self.assertFalse(pt.has('Authenticated', 'Delete objects'))
        self.assertFalse(pt.has('Anonymous', 'Delete objects'))

        # reply to our reply to have it set to 'active':
        helpers.create_reply(r, 'r2', text=u"Reply 2")

        # Anonymous cannot view (permission may be aquired):
        self.assertFalse(pt.has('Anonymous', 'View'))

        # Owners, contributors, editors and admins can add content:
        self.assertTrue(pt.has('Owner', 'Add portal content'))
        self.assertTrue(pt.has('Contributor', 'Add portal content'))
        self.assertTrue(pt.has('Editor', 'Add portal content'))
        self.assertTrue(pt.has('Manager', 'Add portal content'))
        self.assertTrue(pt.has('Site Administrator', 'Add portal content'))
        # others can't:
        self.assertFalse(pt.has('Authenticated', 'Add portal content'))
        self.assertFalse(pt.has('Anonymous', 'Add portal content'))

        # Owners and admins can modify content:
        self.assertTrue(pt.has('Owner', 'Modify portal content'))
        self.assertTrue(pt.has('Manager', 'Modify portal content'))
        self.assertTrue(pt.has('Site Administrator', 'Modify portal content'))
        # others can't:
        self.assertFalse(pt.has('Editor', 'Modify portal content'))
        self.assertFalse(pt.has('Contributor', 'Modify portal content'))
        self.assertFalse(pt.has('Authenticated', 'Modify portal content'))
        self.assertFalse(pt.has('Anonymous', 'Modify portal content'))

        # administrators can delete:
        self.assertTrue(pt.has('Manager', 'Delete objects'))
        self.assertTrue(pt.has('Site Administrator', 'Delete objects'))
        # others can't:
        self.assertFalse(pt.has('Owner', 'Delete objects'))
        self.assertFalse(pt.has('Editor', 'Delete objects'))
        self.assertFalse(pt.has('Contributor', 'Delete objects'))
        self.assertFalse(pt.has('Authenticated', 'Delete objects'))
        self.assertFalse(pt.has('Anonymous', 'Delete objects'))