#379 Protect the badges widget against invalid and malformed data
Merged 6 years ago by abompard. Opened 6 years ago by abompard.
abompard/fedora-hubs fix/badges-invalid-data  into  develop

@@ -2,6 +2,8 @@ 

  

  import json

  

+ from mock import Mock, patch

+ 

  import hubs.widgets

  from hubs.tests import FakeAuthorization, widget_instance

  from . import WidgetTest
@@ -63,3 +65,23 @@ 

  

      def test_view_authz(self):

          self._test_view_authz()

+ 

+     @patch("hubs.widgets.badges.requests")

+     def test_invalid_data(self, requests):

+         response = Mock()

+         response.json.side_effect = ValueError("invalid value")

+         requests.get.return_value = response

+         widget = widget_instance('ralph', self.plugin)

+         func = widget.module.get_cached_functions()['GetBadges']

+         result = func(widget).execute()

+         self.assertEqual(result, dict(assertions=[]))

+ 

+     @patch("hubs.widgets.badges.requests")

+     def test_malformed_data(self, requests):

+         response = Mock()

+         response.json.return_value = {}

+         requests.get.return_value = response

+         widget = widget_instance('ralph', self.plugin)

+         func = widget.module.get_cached_functions()['GetBadges']

+         result = func(widget).execute()

+         self.assertEqual(result, dict(assertions=[]))

@@ -38,7 +38,10 @@ 

          url = "https://badges.fedoraproject.org/user/{username}/json"

          url = url.format(username=username)

          response = requests.get(url)

-         assertions = response.json()['assertions']

+         try:

+             assertions = response.json()['assertions']

+         except (KeyError, ValueError):

+             assertions = []

          key = operator.itemgetter('issued')

          return dict(assertions=sorted(assertions, key=key, reverse=True))

  

no initial comment

rebased

6 years ago

Pull-Request has been merged by abompard

6 years ago