コード例 #1
0
 def test_submit__server_error(self, mock_debug,
                                mock_request, mock_response, mock_notifier):
     mock_response.status = 500
     mock_request.return_value = (mock_response, 'blah')
     http = FixcityHttp(mock_notifier)
     data = {}
     http.submit(data)
     self.assertEqual(mock_notifier.on_server_error.call_count, 1)
     args = mock_notifier.on_server_error.call_args[0]
     self.assertEqual(args, ('blah',))
コード例 #2
0
    def test_submit__user_errors(self, mock_do_post, mock_info,
                                 mock_shorten, mock_notifier):
        http = FixcityHttp(mock_notifier)
        mock_do_post.return_value = (200, '{"errors": {"any": "thing at all"}}')
        mock_shorten.return_value = 'http://short_url/'

        data = {'title': 'TITLE', 'address': 'ADDRESS', 'twitter_user': '******',
                'date':  'DATE', 'twitter_id': 123}
        http.submit(data)
        self.assertEqual(mock_do_post.call_count, 1)
        # We notified the user of failure.
        self.assertEqual(mock_notifier.on_user_error.call_count, 1)
        notify_args, notify_kwargs = mock_notifier.on_user_error.call_args
        self.assertEqual(notify_args[0], data)
        self.assertEqual(notify_args[1], {"any": "thing at all"})
コード例 #3
0
    def test_submit__with_photos_and_user(self, mock_notifier, mock_debug,
                                          mock_do_post,
                                          mock_response):
        # Mock typically uses side_effect() to specify multiple return
        # value; clunky API but works fine.
        do_post_return_values = [
            (200, '''{
            "user": "******",
            "photo_post_url": "/photos/",
            "rack_url": "/racks/1"
            }'''),
            (200, 'OK')]
        def side_effect(*args, **kw):
            return do_post_return_values.pop(0)
        mock_do_post.side_effect = side_effect
        notifier = mock_notifier()
        http = FixcityHttp(notifier)

        # Mock photo needs to be just file-like enough.
        mock_photo_file = mock.Mock()
        mock_photo_file.name = 'foo.jpg'
        mock_photo_file.fileno.side_effect = AttributeError()
        mock_photo_file.tell.return_value = 12345
        mock_photo_file.read.return_value = ''

        self.assertEqual(http.submit({'photos': {'photo': mock_photo_file}}),
                         None)
        self.assertEqual(notifier.on_submit_success.call_count, 1)
        vars = notifier.on_submit_success.call_args[0][0]
        self.assert_(vars.has_key('rack_url'))
        self.assert_(vars.has_key('rack_user'))
コード例 #4
0
 def test_submit__successful_empty_result(self, mock_notifier, mock_debug,
                                          mock_request, mock_response):
     response = mock_response()
     notifier = mock_notifier()
     response.status = 200
     mock_request.return_value = (response, '{}')
     http = FixcityHttp(notifier)
     self.assertEqual(http.submit({}), None)
     self.assertEqual(notifier.on_submit_success.call_count, 0)