def test_post_authenticated_with_captcha(self):
        """Activate unauthenicated posting and test that you have no
        captcha for authenticated users.
        """
        testing.enable_unauthenticated_posting(self.root.forum)

        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 new comment
        form = browser.get_form('post')
        form.get_control("title").value = "Hello Henri"
        form.get_control("text").value = "I am Dummy"
        self.assertEqual(form.get_control('anonymous').checked, False)

        # There is no captcha field.
        self.assertRaises(AssertionError, form.get_control, 'captcha')

        self.assertEqual(form.get_control("action.post").click(), 200)

        # And the comment is added
        self.assertEqual(browser.inspect.feedback, ["Comment added."])
        self.assertEqual(browser.inspect.preview_author, [])
        self.assertEqual(browser.inspect.preview_subject, [])
        self.assertEqual(browser.inspect.preview_comment, [])
        self.assertEqual(browser.inspect.subjects, ['Hello Henri'])
        self.assertEqual(browser.inspect.comments, ['I am Dummy'])
        self.assertEqual(browser.inspect.authors, ['dummy'])
    def test_post_authenticated_with_captcha(self):
        """Activate unauthenicated posting and test that you have no
        captcha for authenticated users.
        """
        testing.enable_unauthenticated_posting(self.root.forum)

        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 new comment
        form = browser.get_form('post')
        form.get_control("title").value = "Hello Henri"
        form.get_control("text").value = "I am Dummy"
        self.assertEqual(form.get_control('anonymous').checked, False)

        # There is no captcha field.
        self.assertRaises(AssertionError, form.get_control, 'captcha')

        self.assertEqual(form.get_control("action.post").click(), 200)

        # And the comment is added
        self.assertEqual(browser.inspect.feedback, ["Comment added."])
        self.assertEqual(browser.inspect.preview_author, [])
        self.assertEqual(browser.inspect.preview_subject, [])
        self.assertEqual(browser.inspect.preview_comment, [])
        self.assertEqual(browser.inspect.subjects, ['Hello Henri'])
        self.assertEqual(browser.inspect.comments, ['I am Dummy'])
        self.assertEqual(browser.inspect.authors, ['dummy'])
    def test_post_authenticated_with_captcha(self):
        """Activate unauthenicated posting and test that you have no
        captcha for authenticated users.
        """
        testing.enable_unauthenticated_posting(self.root.forum)

        browser = self.layer.get_browser(forum_settings)
        browser.login('dummy', 'dummy')
        self.assertEqual(browser.open('/root/forum'), 200)

        # We are not authenticated, but the form to post is here
        self.assertTrue("Post a new topic" in browser.contents)
        form = browser.get_form('post')

        # The captcha options is not here as we are already authenticated
        self.assertRaises(AssertionError, form.get_control, 'captcha')

        form.get_control("topic").value = "Hello forum"
        self.assertEqual(form.get_control("anonymous").checked, False)
        self.assertEqual(form.get_control("action.post").click(), 200)

        self.assertEqual(browser.inspect.feedback, ["Topic added."])
        self.assertEqual(browser.inspect.preview_topic, [])
        self.assertEqual(browser.inspect.preview_author, [])
        self.assertEqual(browser.inspect.topics, ['Hello forum'])
        self.assertEqual(browser.inspect.authors, ['dummy'])
    def test_post_preview_unauthenticated_with_captcha(self):
        """Activate unauthenicated posting and test that if you fill
        the captcha you can post unauthenticated.
        """
        testing.enable_unauthenticated_posting(self.root.forum)

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

        # Fill and preview a comment
        form = browser.get_form('post')

        # There is no anonymous option
        self.assertRaises(AssertionError, form.get_control, 'anonymous')

        form.get_control("title").value = "Hello John"
        form.get_control("text").value = "I am Henri"
        self.assertEqual(form.get_control("action.preview").click(), 200)

        self.assertEqual(browser.inspect.feedback, [])
        self.assertEqual(browser.inspect.preview_author, ['anonymous'])
        self.assertEqual(browser.inspect.preview_subject, ['Hello John'])
        self.assertEqual(browser.inspect.preview_comment, ['I am Henri'])

        # Try to post the previewed comment without filling the captcha
        form = browser.get_form('post')
        self.assertEqual(form.get_control("action.post").click(), 200)

        self.assertEqual(browser.inspect.feedback, ["Invalid captcha value"])
        self.assertEqual(browser.inspect.preview_author, [])
        self.assertEqual(browser.inspect.preview_subject, [])
        self.assertEqual(browser.inspect.preview_comment, [])
        self.assertEqual(browser.inspect.subjects, [])
        self.assertEqual(browser.inspect.comments, [])
        self.assertEqual(browser.inspect.authors, [])

        # Filling the captcha and post
        form = browser.get_form('post')
        form.get_control("captcha").value = testing.get_captcha_word(browser)
        self.assertEqual(form.get_control("title").value, "Hello John")
        self.assertEqual(form.get_control("text").value, "I am Henri")
        self.assertEqual(form.get_control("action.post").click(), 200)

        # And the comment is added
        self.assertEqual(browser.inspect.feedback, ["Comment added."])
        self.assertEqual(browser.inspect.preview_author, [])
        self.assertEqual(browser.inspect.preview_subject, [])
        self.assertEqual(browser.inspect.preview_comment, [])
        self.assertEqual(browser.inspect.subjects, ['Hello John'])
        self.assertEqual(browser.inspect.comments, ['I am Henri'])
        self.assertEqual(browser.inspect.authors, ['anonymous'])
    def test_post_preview_unauthenticated_with_captcha(self):
        """Activate unauthenicated posting and test that if you fill
        the captcha you can post unauthenticated.
        """
        testing.enable_unauthenticated_posting(self.root.forum)

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

        # Fill and preview a comment
        form = browser.get_form('post')

        # There is no anonymous option
        self.assertRaises(AssertionError, form.get_control, 'anonymous')

        form.get_control("title").value = "Hello John"
        form.get_control("text").value = "I am Henri"
        self.assertEqual(form.get_control("action.preview").click(), 200)

        self.assertEqual(browser.inspect.feedback, [])
        self.assertEqual(browser.inspect.preview_author, ['anonymous'])
        self.assertEqual(browser.inspect.preview_subject, ['Hello John'])
        self.assertEqual(browser.inspect.preview_comment, ['I am Henri'])

        # Try to post the previewed comment without filling the captcha
        form = browser.get_form('post')
        self.assertEqual(form.get_control("action.post").click(), 200)

        self.assertEqual(browser.inspect.feedback, ["Invalid captcha value"])
        self.assertEqual(browser.inspect.preview_author, [])
        self.assertEqual(browser.inspect.preview_subject, [])
        self.assertEqual(browser.inspect.preview_comment, [])
        self.assertEqual(browser.inspect.subjects, [])
        self.assertEqual(browser.inspect.comments, [])
        self.assertEqual(browser.inspect.authors, [])

        # Filling the captcha and post
        form = browser.get_form('post')
        form.get_control("captcha").value = testing.get_captcha_word(browser)
        self.assertEqual(form.get_control("title").value, "Hello John")
        self.assertEqual(form.get_control("text").value, "I am Henri")
        self.assertEqual(form.get_control("action.post").click(), 200)

        # And the comment is added
        self.assertEqual(browser.inspect.feedback, ["Comment added."])
        self.assertEqual(browser.inspect.preview_author, [])
        self.assertEqual(browser.inspect.preview_subject, [])
        self.assertEqual(browser.inspect.preview_comment, [])
        self.assertEqual(browser.inspect.subjects, ['Hello John'])
        self.assertEqual(browser.inspect.comments, ['I am Henri'])
        self.assertEqual(browser.inspect.authors, ['anonymous'])
    def test_post_preview_unauthenticated_with_captcha(self):
        """Activate unauthenicated posting and test the captcha
        integration.
        """
        testing.enable_unauthenticated_posting(self.root.forum)

        browser = self.layer.get_browser(forum_settings)
        self.assertEqual(browser.open('/root/forum'), 200)

        # We are not authenticated, but the form to post is here
        self.assertTrue("Post a new topic" in browser.contents)
        form = browser.get_form('post')

        # The anonymous options is not here, even if it selected, are
        # we already are anonymous
        self.assertRaises(AssertionError, form.get_control, 'anonymous')

        form.get_control("topic").value = "Hello world"
        self.assertEqual(form.get_control("action.preview").click(), 200)

        self.assertEqual(browser.inspect.feedback, [])
        self.assertEqual(browser.inspect.preview_topic, ["Hello world"])
        self.assertEqual(browser.inspect.preview_author, ['anonymous'])
        self.assertEqual(browser.inspect.topics, [])
        self.assertEqual(browser.inspect.authors, [])

        # Try to post
        form = browser.get_form('post')
        self.assertEqual(form.get_control("topic").value, "Hello world")
        self.assertEqual(form.get_control("action.post").click(), 200)

        # We didn't fill the captcha, the post was not commited
        self.assertEqual(browser.inspect.feedback, ["Invalid captcha value"])
        self.assertEqual(browser.inspect.preview_topic, [])
        self.assertEqual(browser.inspect.preview_author, [])
        self.assertEqual(browser.inspect.topics, [])
        self.assertEqual(browser.inspect.authors, [])

        # Try to post filling the captcha
        form = browser.get_form('post')
        form.get_control("captcha").value = testing.get_captcha_word(browser)
        self.assertEqual(form.get_control("topic").value, "Hello world")
        self.assertEqual(form.get_control("action.post").click(), 200)

        self.assertEqual(browser.inspect.feedback, ["Topic added."])
        self.assertEqual(browser.inspect.preview_topic, [])
        self.assertEqual(browser.inspect.preview_author, [])
        self.assertEqual(browser.inspect.topics, ['Hello world'])
        self.assertEqual(browser.inspect.authors, ['anonymous'])