meyzieu_newsletters: return 503 code on webservice connection error (#10853)
This commit is contained in:
parent
d4aca0571f
commit
8b12e5c64a
|
@ -27,8 +27,12 @@ from jsonfield import JSONField
|
|||
from passerelle.base.models import BaseResource
|
||||
|
||||
|
||||
class SubscriptionsSetError(Exception):
|
||||
http_status = 503
|
||||
|
||||
|
||||
class SubscriptionsGetError(Exception):
|
||||
pass
|
||||
http_status = 503
|
||||
|
||||
|
||||
class MeyzieuNewsletters(BaseResource):
|
||||
|
@ -90,10 +94,7 @@ class MeyzieuNewsletters(BaseResource):
|
|||
subs = {}
|
||||
remove = {}
|
||||
add = {}
|
||||
try:
|
||||
current_subscriptions = self.get_subscriptions(email)
|
||||
except SubscriptionsGetError:
|
||||
return False
|
||||
current_subscriptions = self.get_subscriptions(email)
|
||||
|
||||
for current in current_subscriptions:
|
||||
currents[current['id']] = current
|
||||
|
@ -136,7 +137,7 @@ class MeyzieuNewsletters(BaseResource):
|
|||
response = requests.get(self.url, params=params)
|
||||
except (requests.HTTPError, requests.ConnectionError), e:
|
||||
logger.error("<%r> '%r' addAbonnement failed: %r", self.slug, email, e)
|
||||
return False
|
||||
raise SubscriptionsGetError('error on getting subscriptions')
|
||||
|
||||
for i, (subscription_id, kinds) in enumerate(add.iteritems()):
|
||||
params = base.copy()
|
||||
|
@ -152,7 +153,7 @@ class MeyzieuNewsletters(BaseResource):
|
|||
response = requests.get(self.url, params=params)
|
||||
except (requests.HTTPError, requests.ConnectionError), e:
|
||||
logger.error("<%r> '%r' addAbonnement failed: %r", self.slug, email, e)
|
||||
return False
|
||||
raise SubscriptionsSetError('error on setting subscriptions')
|
||||
return True
|
||||
|
||||
def get_subscriptions(self, email):
|
||||
|
@ -166,7 +167,7 @@ class MeyzieuNewsletters(BaseResource):
|
|||
response = requests.get(self.url, params=params)
|
||||
except (requests.HTTPError, requests.ConnectionError), e:
|
||||
logger.error("<%r> '%r' getListAbonnement failed: %r", self.slug, email, e)
|
||||
raise SubscriptionsGetError
|
||||
raise SubscriptionsGetError('error on getting subscriptions')
|
||||
|
||||
n = dict((i.pop('id'), i) for i in self.get_newsletters())
|
||||
if 'abonnement' in response.json():
|
||||
|
|
|
@ -11,6 +11,8 @@ from django.utils.http import urlencode
|
|||
|
||||
from passerelle.base.models import ApiUser, AccessRight
|
||||
from passerelle.contrib.meyzieu_newsletters.models import MeyzieuNewsletters
|
||||
from passerelle.contrib.meyzieu_newsletters.models import SubscriptionsGetError
|
||||
from passerelle.contrib.meyzieu_newsletters.models import SubscriptionsSetError
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
|
||||
|
@ -50,6 +52,7 @@ WS_SUBSCRIPTIONS_RETURN = {'abonnement':
|
|||
}
|
||||
|
||||
POST_SUBSCRIPTIONS = [{"id": "69", "text": "Enfance Jeunesse", "transports": []},
|
||||
{"id": 76, "text": "Restauration scolaire", "transports": ["push_mail"]},
|
||||
{"id": "46", "text": "Environnement", "transports": ["push_mail"]}
|
||||
]
|
||||
|
||||
|
@ -68,9 +71,14 @@ def mocked_requests_get(*args, **kwargs):
|
|||
else:
|
||||
return MockResponse({})
|
||||
|
||||
def mocked_requests_connection_error(*args, **kwargs):
|
||||
raise requests.ConnectionError
|
||||
def set_subscriptions_connection_error(*args, **kwargs):
|
||||
if kwargs['params'].get('method') == 'meyzieu.connection.addAbonnement':
|
||||
raise requests.ConnectionError
|
||||
else:
|
||||
return mocked_requests_get(*args, **kwargs)
|
||||
|
||||
def get_subscriptions_connection_error(*args, **kwargs):
|
||||
raise requests.ConnectionError
|
||||
|
||||
@pytest.fixture
|
||||
def setup():
|
||||
|
@ -128,6 +136,16 @@ def test_get_subscriptions(mock_get, setup):
|
|||
assert 'id' in transport
|
||||
assert transport['id'] in subscriptions
|
||||
|
||||
@mock.patch('passerelle.contrib.meyzieu_newsletters.models.requests.get',
|
||||
side_effect=get_subscriptions_connection_error)
|
||||
def test_get_subscriptions_with_connection_error(mock_get, setup):
|
||||
app, conn = setup
|
||||
resp = app.get(reverse('meyzieu-newsletters-subscriptions', kwargs={'slug': conn.slug}),
|
||||
params={'apikey': API_KEY, 'email': TEST_USER}, status=503)
|
||||
assert resp.json['err']
|
||||
assert resp.json['err_class'] == '%s.%s' % (SubscriptionsGetError.__module__,
|
||||
SubscriptionsGetError.__name__)
|
||||
assert resp.json['err_desc'] == 'error on getting subscriptions'
|
||||
|
||||
@mock.patch('passerelle.contrib.meyzieu_newsletters.models.requests.get',
|
||||
side_effect=mocked_requests_get)
|
||||
|
@ -169,12 +187,14 @@ def test_delete_empty_subscriptions(mock_get, setup):
|
|||
resp = app.delete(url, status=200)
|
||||
assert resp.json['data']
|
||||
|
||||
# @mock.patch('passerelle.contrib.meyzieu_newsletters.models.requests.get')
|
||||
@mock.patch('passerelle.contrib.meyzieu_newsletters.models.requests.get',
|
||||
side_effect=mocked_requests_connection_error)
|
||||
side_effect=set_subscriptions_connection_error)
|
||||
def test_update_subscriptions_with_connection_error(mock_get, setup):
|
||||
app, conn = setup
|
||||
url = reverse('meyzieu-newsletters-subscriptions', kwargs={'slug': conn.slug})
|
||||
url += '?' + urlencode({'apikey': API_KEY, 'email': TEST_USER})
|
||||
resp = app.post_json(url, POST_SUBSCRIPTIONS, status=200)
|
||||
assert not resp.json['data']
|
||||
resp = app.post_json(url, POST_SUBSCRIPTIONS, status=503)
|
||||
assert resp.json['err']
|
||||
assert resp.json['err_class'] == '%s.%s' % (SubscriptionsSetError.__module__,
|
||||
SubscriptionsSetError.__name__)
|
||||
assert resp.json['err_desc'] == 'error on setting subscriptions'
|
||||
|
|
Loading…
Reference in New Issue