def test_post_notification(self):
        """Post a comment that sends a notification.
        """
        testing.enable_subscription(self.root.forum)
        testing.set_member_email('dummy', '*****@*****.**')

        subscriptions = ISubscriptionManager(self.root.forum.topic)
        subscriptions.subscribe('*****@*****.**')

        browser = self.layer.get_browser(topic_settings)
        browser.login('dummy', 'dummy')
        self.assertEqual(browser.open('/root/forum'), 200)
        self.assertEqual(browser.get_link('Test Topic').click(), 200)

        # Post a comment. We don't use a title, so the topic one is used
        form = browser.get_form('post')
        form.get_control("title").value = "I am good"
        form.get_control("text").value = "very, very good"

        # We are already subscribed, so no option to subscribe
        self.assertRaises(AssertionError, form.get_control, 'subscribe')
        self.assertEqual(form.get_control("action.post").click(), 200)

        self.assertEqual(browser.inspect.feedback, ["Comment added."])

        # A mail should have been sent to dummy
        message = self.root.service_mailhost.read_last_message()
        self.assertNotEqual(message, None)
        self.assertEqual(message.content_type, 'text/plain')
        self.assertEqual(message.charset, 'utf-8')
        self.assertEqual(message.mto, ['*****@*****.**'])
        self.assertEqual(message.mfrom, '*****@*****.**')
        self.assertEqual(message.subject, 'New comment in "Test Topic"')
    def test_post_and_subscribe(self):
        """Post and subscribe to a topic.
        """
        testing.enable_subscription(self.root.forum)
        testing.set_member_email('dummy', '*****@*****.**')

        subscriptions = ISubscriptionManager(self.root.forum.topic)
        self.assertEqual(subscriptions.is_subscribed('*****@*****.**'),
                         False)
        self.assertEqual(len(self.root.service_mailhost.messages), 0)

        browser = self.layer.get_browser(topic_settings)
        browser.login('dummy', 'dummy')
        self.assertEqual(browser.open('/root/forum'), 200)
        self.assertEqual(browser.get_link('Test Topic').click(), 200)

        # Post a comment. We don't use a title, so the topic one is used
        form = browser.get_form('post')
        form.get_control("text").value = "How are you ?"
        self.assertEqual(form.get_control('subscribe').checked, True)
        self.assertEqual(form.get_control("action.post").click(), 200)

        # The comment is added, and the request for subscription is triggred.
        self.assertEqual(browser.inspect.feedback, [
            "Comment added.",
            "A confirmation mail have been sent for your subscription."
        ])

        subscription_request = self.root.service_mailhost.read_last_message()
        self.assertNotEqual(subscription_request, None)
        self.assertEqual(subscription_request.mto, ['*****@*****.**'])
        self.assertEqual(subscription_request.mfrom,
                         '*****@*****.**')
        self.assertEqual(subscription_request.subject,
                         'Subscription confirmation to "Test Topic"')
        self.assertEqual(len(subscription_request.urls), 2)

        # the confirmation link is the last url in the mail
        confirmation_url = subscription_request.urls[-1]
        self.assertEqual(browser.open(confirmation_url), 200)
        self.assertEqual(
            browser.location,
            '/root/forum/topic/subscriptions.html/@@confirm_subscription')
        self.assertEqual(
            browser.html.xpath('//p[@class="subscription-result"]/text()'), [
                'You have been successfully subscribed. '
                'You will now receive email notifications.'
            ])

        self.assertEqual(subscriptions.is_subscribed('*****@*****.**'),
                         True)
예제 #3
0
    def update(self):
        super(ContainerViewBase, self).update()
        user = getSecurityManager().getUser()

        self.captcha_posting = self.context.unauthenticated_posting_allowed()
        self.anonymous_posting = self.context.anonymous_posting_allowed()
        self.is_logged_in = user.has_role(MINIMAL_ADD_ROLE)
        self.need_captcha = self.captcha_posting and not self.is_logged_in
        self.need_anonymous_option = (self.anonymous_posting
                                      and not self.need_captcha)
        self.can_post = self.captcha_posting or self.is_logged_in
        self.have_subscriptions = False
        service = queryUtility(ISubscriptionService)
        if service is not None:
            self.have_subscriptions = service.are_subscriptions_enabled(
                self.context)
        self.inline_subscription = False
        if self.have_subscriptions:
            email = self.get_user_email()
            if email:
                if not ISubscriptionManager(self.context).is_subscribed(email):
                    self.inline_subscription = True

        self.messages = []