def test_push_associated_assets(self, get_mock, send_mock, app_mock):
        app_mock.media.get.return_value = TestMedia(b'bin')

        dest = {'config': {'assets_url': 'http://example.com'}}
        item = get_fixture('package')

        service = HTTPPushService()
        service._copy_published_media_files({}, dest)

        get_mock.assert_not_called()
        send_mock.assert_not_called()

        service._copy_published_media_files(item, dest)

        images = [
            # embedded original
            '2017020111028/9a836848c3c3387a151dbed96e83b7d50e6b0e71ca397e0b1dc0f4b2f4127acd.jpg',
            # main-0 original
            '20170201110216/d3ad29bafe0710c42b7cfc201939f266c6ca5c11a713625388decff4da87ba5b.jpg',
            # embedded thumbnail
            '2017020111028/a0502320d6d07dd921253171e971943adf791eb2b34dfe82da73c053a343a7c2.jpg',
        ]

        for media in images:
            get_mock.assert_any_call('http://example.com/%s' % media)
    def test_push_attachments(self, get_mock, post_mock, app_mock):
        app_mock.media.get.return_value = 'bin'

        dest = {'config': {'assets_url': 'http://example.com'}}
        item = {
            'type':
            'text',
            'attachments': [
                {
                    'id': 'foo',
                    'media': 'media-id',
                    'mimetype': 'text/plain'
                },
            ]
        }

        service = HTTPPushService()
        service._copy_published_media_files(item, dest)

        app_mock.media.get.assert_called_with('media-id',
                                              resource='attachments')
        get_mock.assert_called_with('http://example.com/media-id')
        post_mock.assert_called_with('http://example.com',
                                     files={
                                         'media':
                                         ('media-id',
                                          app_mock.media.get.return_value,
                                          'text/plain', {})
                                     },
                                     data={'media_id': 'media-id'})
    def test_push_attachments(self, get_mock, send_mock, app_mock):
        app_mock.media.get.return_value = TestMedia(b'bin')

        dest = {'config': {'assets_url': 'http://example.com', 'secret_token': 'foo'}}
        item = {
            'type': 'text',
            'attachments': [
                {'id': 'foo', 'media': 'media-id', 'mimetype': 'text/plain'},
            ]
        }

        service = HTTPPushService()
        service._copy_published_media_files(item, dest)

        app_mock.media.get.assert_called_with('media-id', resource='attachments')
        get_mock.assert_called_with('http://example.com/media-id')
        send_mock.assert_called_once_with(mock.ANY)
        request = send_mock.call_args[0][0]
        self.assertEqual('http://example.com/', request.url)
        self.assertEqual('POST', request.method)
        self.assertIn(b'bin', request.body)
        self.assertIn(b'media-id', request.body)
        self.assertIn('x-superdesk-signature', request.headers)
        self.assertEqual(request.headers['x-superdesk-signature'],
                         'sha1=%s' % hmac.new(b'foo', request.body, 'sha1').hexdigest())
 def assert_compare_hash(self, payload, binary, key='secret'):
     service = HTTPPushService()
     algo, digest = service._get_data_hash(payload, key).split('=')
     self.assertTrue(
         hmac.compare_digest(
             digest,
             hmac.new(key.encode(), binary, algo).hexdigest()))
Example #5
0
    def test_push_attachments(self, get_mock, send_mock, app_mock):
        app_mock.media.get.return_value = 'bin'

        dest = {'config': {'assets_url': 'http://example.com', 'secret_token': 'foo'}}
        item = {
            'type': 'text',
            'attachments': [
                {'id': 'foo', 'media': 'media-id', 'mimetype': 'text/plain'},
            ]
        }

        service = HTTPPushService()
        service._copy_published_media_files(item, dest)

        app_mock.media.get.assert_called_with('media-id', resource='attachments')
        get_mock.assert_called_with('http://example.com/media-id')
        self.assertIsNotNone(send_mock.call_args)
        request = send_mock.call_args[0][0]
        self.assertEqual('http://example.com/', request.url)
        self.assertEqual('POST', request.method)
        self.assertIn(b'bin', request.body)
        self.assertIn(b'media-id', request.body)
        self.assertIn('x-superdesk-signature', request.headers)
        self.assertEqual(request.headers['x-superdesk-signature'],
                         'sha1=%s' % hmac.new(b'foo', request.body, 'sha1').hexdigest())
    def test_push_attachments(self, get_mock, send_mock, app_mock):
        app_mock.config = {}
        app_mock.media.get.return_value = TestMedia(b"bin")

        dest = {"config": {"assets_url": "http://example.com", "secret_token": "foo"}}
        item = {
            "type": "text",
            "attachments": [
                {"id": "foo", "media": "media-id", "mimetype": "text/plain"},
            ],
        }

        service = HTTPPushService()
        service._copy_published_media_files(item, dest)

        app_mock.media.get.assert_called_with("media-id", resource="attachments")
        get_mock.assert_called_with("http://example.com/media-id", timeout=(5, 30))
        send_mock.assert_called_once_with(mock.ANY, timeout=(5, 30))
        request = send_mock.call_args[0][0]
        self.assertEqual("http://example.com/", request.url)
        self.assertEqual("POST", request.method)
        self.assertIn(b"bin", request.body)
        self.assertIn(b"media-id", request.body)
        self.assertIn("x-superdesk-signature", request.headers)
        self.assertEqual(
            request.headers["x-superdesk-signature"], "sha1=%s" % hmac.new(b"foo", request.body, "sha1").hexdigest()
        )
 def test_push_binaries(self, get_mock, send_mock):
     media = TestMedia(b'content')
     dest = {'config': {'assets_url': 'http://example.com', 'secret_token': 'foo'}}
     service = HTTPPushService()
     service._transmit_media(media, dest)
     get_mock.assert_called_with('http://example.com/media-id')
     send_mock.assert_called_once_with(mock.ANY)
     request = send_mock.call_args[0][0]
     self.assertEqual('http://example.com/', request.url)
     self.assertIn(b'content', request.body)
 def test_push_binaries(self, get_mock, send_mock, app_mock):
     app_mock.config = {}
     media = TestMedia(b"content")
     dest = {"config": {"assets_url": "http://example.com", "secret_token": "foo"}}
     service = HTTPPushService()
     service._transmit_media(media, dest)
     get_mock.assert_called_with("http://example.com/media-id", timeout=(5, 30))
     send_mock.assert_called_once_with(mock.ANY, timeout=(5, 30))
     request = send_mock.call_args[0][0]
     self.assertEqual("http://example.com/", request.url)
     self.assertIn(b"content", request.body)
    def test_server_publish_error_thrown(self, fake_post, fake_notifiers):
        raise_http_exception = Mock(side_effect=PublishHTTPPushServerError.httpPushError(Exception('server 5xx')))

        fake_post.return_value = Mock(status_code=503, text='server 5xx', raise_for_status=raise_http_exception)

        # needed for bad exception handling classes
        fake_notifiers.return_value = []

        service = HTTPPushService()

        with self.assertRaises(PublishHTTPPushServerError):
            service._push_item(self.destination, json.dumps(self.item))
Example #10
0
    def test_server_publish_error_thrown(self, fake_post, fake_notifiers):
        raise_http_exception = Mock(side_effect=PublishHTTPPushServerError.httpPushError(Exception('server 5xx')))

        fake_post.return_value = Mock(status_code=503, text='server 5xx', raise_for_status=raise_http_exception)

        # needed for bad exception handling classes
        fake_notifiers.return_value = []

        service = HTTPPushService()

        with self.assertRaises(PublishHTTPPushServerError):
            service._push_item(self.destination, json.dumps(self.item))
    def test_client_publish_error_thrown(self, fake_post, fake_notifiers):
        with self.app.app_context():
            raise_http_exception = Mock(side_effect=PublishHTTPPushClientError.httpPushError(Exception("client 4xx")))

        fake_post.return_value = Mock(status_code=401, text="client 4xx", raise_for_status=raise_http_exception)

        # needed for bad exception handling classes
        fake_notifiers.return_value = []

        service = HTTPPushService()

        with self.assertRaises(PublishHTTPPushClientError):
            with self.app.app_context():
                service._push_item(self.destination, json.dumps(self.item))
    def test_publish_an_item(self):
        if not getattr(self, 'resource_url', None):
            return

        service = HTTPPushService()

        service._transmit(self.item, self.subscribers)
        self.assertTrue(self.is_item_published(self.item['item_id']))

        self.item['formatted_item'] = json.dumps(self.formatted_item2)
        service._transmit(self.item, self.subscribers)
        item = requests.get(self.getItemURL(self.item['item_id'])).json()
        self.assertEqual(item['headline'], 'headline2')
        self.assertEqual(item['version'], 2)
 def test_push_binaries(self, get_mock, send_mock):
     media = TestMedia(b'content')
     dest = {
         'config': {
             'assets_url': 'http://example.com',
             'secret_token': 'foo'
         }
     }
     service = HTTPPushService()
     service._transmit_media(media, dest)
     get_mock.assert_called_with('http://example.com/media-id')
     send_mock.assert_called_once_with(mock.ANY)
     request = send_mock.call_args[0][0]
     self.assertEqual('http://example.com/', request.url)
     self.assertIn(b'content', request.body)
    def test_push_attachments(self, get_mock, post_mock, app_mock):
        app_mock.media.get.return_value = 'bin'

        dest = {'config': {'assets_url': 'http://example.com'}}
        item = {
            'type': 'text',
            'attachments': [
                {'id': 'foo', 'media': 'media-id', 'mimetype': 'text/plain'},
            ]
        }

        service = HTTPPushService()
        service._copy_published_media_files(item, dest)

        app_mock.media.get.assert_called_with('media-id', resource='attachments')
        get_mock.assert_called_with('http://example.com/media-id')
        post_mock.assert_called_with(
            'http://example.com',
            files={'media': ('media-id', app_mock.media.get.return_value, 'text/plain')},
            data={'media_id': 'media-id'})
    def test_push_associated_assets(self, get_mock, post_mock, app_mock):
        app_mock.media.get.return_value = 'bin'

        dest = {'config': {'assets_url': 'http://example.com'}}
        item = get_fixture('package')

        service = HTTPPushService()
        service._copy_published_media_files({}, dest)

        get_mock.assert_not_called()
        post_mock.assert_not_called()

        service._copy_published_media_files(item, dest)

        images = [
            # embedded original
            '2017020111028/9a836848c3c3387a151dbed96e83b7d50e6b0e71ca397e0b1dc0f4b2f4127acd.jpg',
            # main-0 original
            '20170201110216/d3ad29bafe0710c42b7cfc201939f266c6ca5c11a713625388decff4da87ba5b.jpg',
            # embedded thumbnail
            '2017020111028/a0502320d6d07dd921253171e971943adf791eb2b34dfe82da73c053a343a7c2.jpg',
        ]

        for media in images:
            get_mock.assert_any_call('http://example.com/%s' % media)
            post_mock.assert_any_call('http://example.com',
                                      files={
                                          'media':
                                          (media,
                                           app_mock.media.get.return_value,
                                           'image/jpeg', {})
                                      },
                                      data={'media_id': media})
    def test_push_associated_assets(self, get_mock, send_mock, app_mock):
        app_mock.config = {}
        app_mock.media.get.return_value = TestMedia(b"bin")

        dest = {"config": {"assets_url": "http://example.com"}}
        item = get_fixture("package")

        service = HTTPPushService()
        service._copy_published_media_files({}, dest)

        get_mock.assert_not_called()
        send_mock.assert_not_called()

        service._copy_published_media_files(item, dest)

        images = [
            # embedded original
            "2017020111028/9a836848c3c3387a151dbed96e83b7d50e6b0e71ca397e0b1dc0f4b2f4127acd.jpg",
            # main-0 original
            "20170201110216/d3ad29bafe0710c42b7cfc201939f266c6ca5c11a713625388decff4da87ba5b.jpg",
            # embedded thumbnail
            "2017020111028/a0502320d6d07dd921253171e971943adf791eb2b34dfe82da73c053a343a7c2.jpg",
        ]

        for media in images:
            get_mock.assert_any_call("http://example.com/%s" % media, timeout=(5, 30))
    def test_publish_an_item(self):
        if not getattr(self, "resource_url", None):
            return

        service = HTTPPushService()

        service._transmit(self.item, self.subscribers)
        self.assertTrue(self.is_item_published(self.item["item_id"]))

        self.item["formatted_item"] = json.dumps(self.formatted_item2)
        service._transmit(self.item, self.subscribers)
        item = requests.get(self.getItemURL(self.item["item_id"])).json()
        self.assertEqual(item["headline"], "headline2")
        self.assertEqual(item["version"], 2)
Example #18
0
    def test_publish_an_item(self):
        if not getattr(self, 'resource_url', None):
            return

        service = HTTPPushService()

        service._transmit(self.item, self.subscribers)
        self.assertTrue(self.is_item_published(self.item['item_id']))

        self.item['formatted_item'] = json.dumps(self.formatted_item2)
        service._transmit(self.item, self.subscribers)
        item = requests.get(self.getItemURL(self.item['item_id'])).json()
        self.assertEqual(item['headline'], 'headline2')
        self.assertEqual(item['version'], 2)
 def test_get_secret_token(self):
     service = HTTPPushService()
     self.assertEqual(service._get_secret_token(self.destination), "123456789")
 def test_get_headers(self):
     service = HTTPPushService()
     headers = service._get_headers("test payload", self.destination, {})
     self.assertEqual("sha1=8be62a607898504f87559cb52dc23f9ebee65a21", headers[service.hash_header])
 def test_get_headers(self):
     service = HTTPPushService()
     headers = service._get_headers('test payload', self.destination, {})
     self.assertEqual('sha1=8be62a607898504f87559cb52dc23f9ebee65a21', headers[service.hash_header])
 def test_get_secret_token(self):
     service = HTTPPushService()
     self.assertEqual(service._get_secret_token(self.destination), "123456789")
 def test_get_resource_url(self):
     service = HTTPPushService()
     self.assertEqual(service._get_resource_url(self.destination), self.resource_url)
 def test_get_assets_url(self):
     service = HTTPPushService()
     self.assertEqual(service._get_assets_url(self.destination), None)
Example #25
0
 def test_get_resource_url(self):
     service = HTTPPushService()
     self.assertEqual(service._get_resource_url(self.destination),
                      self.resource_url)
Example #26
0
 def test_get_assets_url(self):
     service = HTTPPushService()
     self.assertEqual(service._get_assets_url(self.destination), None)