Skip to content

Commit

Permalink
[Fix bug 977683] Set API key on subscribe
Browse files Browse the repository at this point in the history
Set API key on subscribe call if sync=='Y'
  • Loading branch information
dpoirier committed Feb 27, 2014
1 parent 1ca127a commit 4bc1251
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 3 deletions.
5 changes: 5 additions & 0 deletions README.rst
Expand Up @@ -131,6 +131,11 @@ To run tests:
Change Log
==========

v0.3.10
-------

* Set api key on subscribe call when sync=Y

v0.3.9
------

Expand Down
10 changes: 9 additions & 1 deletion basket/base.py
Expand Up @@ -137,7 +137,15 @@ def subscribe(email, newsletters, **kwargs):
should be passed as keyword arguments."""

kwargs.update(email=email, newsletters=newsletters)
return request('post', 'subscribe', data=kwargs)
headers = {}
if kwargs.get('sync', 'N') == 'Y':
api_key = kwargs.pop('api_key', BASKET_API_KEY)
if not api_key:
raise BasketException('API key required for email lookup.',
code=errors.BASKET_AUTH_ERROR)
headers['x-api-key'] = api_key

return request('post', 'subscribe', data=kwargs, headers=headers)


def send_sms(mobile_number, msg_name, optin=False):
Expand Down
56 changes: 55 additions & 1 deletion basket/tests.py
@@ -1,3 +1,4 @@
from contextlib import nested
import json

from requests.exceptions import ConnectionError, Timeout
Expand Down Expand Up @@ -205,7 +206,60 @@ def test_subscribe(self):
result = subscribe(email, newsletters, **kwargs)

request_call.assert_called_with('post', 'subscribe',
data=expected_kwargs)
data=expected_kwargs,
headers={})
self.assertEqual(request_call.return_value, result)

def test_subscribe_sync_y_api_key_in_args(self):
"""
subscribe calls request with the expected parms and returns the result
when sync='Y', adds the API key from the args to the headers
"""
api_key = 'foo_bar'
email = "user1@example.com"
newsletters = ['news1', 'news2']
kwargs = {
'arg1': 100,
'arg2': 200,
'sync': 'Y',
'api_key': api_key,
}
expected_kwargs = kwargs.copy()
expected_kwargs['email'] = email
expected_kwargs['newsletters'] = newsletters
del expected_kwargs['api_key']
with patch('basket.base.request', autospec=True) as request_call:
result = subscribe(email, newsletters, **kwargs)

request_call.assert_called_with('post', 'subscribe',
data=expected_kwargs,
headers={'x-api-key': api_key})
self.assertEqual(request_call.return_value, result)

def test_subscribe_sync_y_api_key_not_in_args(self):
"""
subscribe calls request with the expected parms and returns the result
when sync='Y', adds the API key from the settings to the headers
"""
api_key = 'foo_bar'
email = "user1@example.com"
newsletters = ['news1', 'news2']
kwargs = {
'arg1': 100,
'arg2': 200,
'sync': 'Y',
}
expected_kwargs = kwargs.copy()
expected_kwargs['email'] = email
expected_kwargs['newsletters'] = newsletters
with nested(patch('basket.base.request', autospec=True),
patch('basket.base.BASKET_API_KEY', api_key)) \
as (request_call, API_KEY):
result = subscribe(email, newsletters, **kwargs)

request_call.assert_called_with('post', 'subscribe',
data=expected_kwargs,
headers={'x-api-key': api_key})
self.assertEqual(request_call.return_value, result)

def test_unsubscribe(self):
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Expand Up @@ -3,7 +3,7 @@

setup(
name='basket-client',
version='0.3.9',
version='0.3.10',
description="A Python client for Mozilla's basket service.",
long_description=open('README.rst').read(),
author='Michael Kelly and contributors',
Expand Down

0 comments on commit 4bc1251

Please sign in to comment.