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_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)
    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)