Exemplo n.º 1
0
class PostExceptionTests(TestCase):
    def setUp(self):
        self.agent = mock.Mock(Agent)
        self.observer = AirbrakeLogObserver("API-KEY", environment="testing", agent=self.agent)

        self.agent.request.return_value = succeed(None)

    def test_postsToDefaultHost(self):
        """
        Sends a POST request to the default URL.
        """

        d = self.observer._postException("<not-real-xml />")
        self.successResultOf(d)

        self.agent.request.assert_called_once_with(
            "POST", "http://api.airbrake.io/notifier_api/v2/notices", headers=mock.ANY, bodyProducer=mock.ANY
        )

    def test_postsWithTextXMLContentType(self):
        """
        Sends a text/xml content-type header.
        """
        d = self.observer._postException("<not-real-xml />")
        self.successResultOf(d)

        self.assertEqual(self.agent.request.call_count, 1)

        (name, args, kwargs) = self.agent.request.mock_calls[0]
        self.assertEqual(kwargs["headers"].getRawHeaders("content-type"), ["text/xml"])

    @mock.patch("txairbrake.observers.FileBodyProducer")
    def test_postsFileBodyProducer(self, FileBodyProducer):
        """
        Calls request with a FileBodyProducer that has the xml as the value
        value of a StringIO.
        """
        d = self.observer._postException("<not-real-xml />")
        self.successResultOf(d)

        self.assertEqual(self.agent.request.call_count, 1)

        (name, args, kwargs) = self.agent.request.mock_calls[0]

        self.assertEqual(kwargs["bodyProducer"], FileBodyProducer.return_value)

        (name, args, kwargs) = FileBodyProducer.mock_calls[0]
        self.assertEqual(args[0].getvalue(), "<not-real-xml />")