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 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 = []