From 3d7ea96692c112b3c4ddcd555a5870af568c5d15 Mon Sep 17 00:00:00 2001 From: Josue Kouka Date: Tue, 25 Oct 2016 15:36:13 +0200 Subject: [PATCH 2/2] add simple subscription API (#13284) --- corbo/api_urls.py | 6 ++++-- corbo/api_views.py | 21 +++++++++++++++++++-- tests/test_api.py | 17 +++++++++++++++++ 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/corbo/api_urls.py b/corbo/api_urls.py index 6f77fc4..ceddfd4 100644 --- a/corbo/api_urls.py +++ b/corbo/api_urls.py @@ -14,11 +14,13 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -from django.conf.urls import patterns, include, url +from django.conf.urls import patterns, url + +from .api_views import NewslettersView, SubscriptionsView, SubscribeView -from .api_views import NewslettersView, SubscriptionsView urlpatterns = patterns('', url(r'^newsletters/', NewslettersView.as_view(), name='newsletters'), url(r'^subscriptions/', SubscriptionsView.as_view(), name='subscriptions'), + url(r'^subscribe/', SubscribeView.as_view(), name='subscribe'), ) diff --git a/corbo/api_views.py b/corbo/api_views.py index b168e83..5eeb27f 100644 --- a/corbo/api_views.py +++ b/corbo/api_views.py @@ -43,8 +43,8 @@ class SubscriptionsView(APIView): def get_subscriptions(self, email, uuid=None): subscriptions = defaultdict(dict) - identifier = 'mailto:'+email - for s in Subscription.objects.filter(Q(identifier=identifier)|Q(uuid=uuid)): + identifier = 'mailto:' + email + for s in Subscription.objects.filter(Q(identifier=identifier) | Q(uuid=uuid)): cat_id = s.category.pk subscriptions[cat_id]['id'] = str(cat_id) subscriptions[cat_id]['text'] = s.category.name @@ -112,3 +112,20 @@ class SubscriptionsView(APIView): for subscription in self.get_subscriptions(email): self.update_subscriptions(subscription['id'], [], email, uuid) return Response({'data': True}) + + +class SubscribeView(SubscriptionsView): + + def post(self, request): + email = request.GET.get('email') + uuid = request.GET.get('uuid') + if not email: + raise PermissionDenied('Email parameter required') + data = json.loads(request.body) + + category_id = data['category_id'] + transport = ('mailto',) + + self.update_subscriptions(category_id, transport, email, uuid) + + return Response({'data': True}) diff --git a/tests/test_api.py b/tests/test_api.py index 261e904..0799436 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -95,3 +95,20 @@ def test_delete_subscriptions(app, categories, announces): if resp.json['data']: resp = app.get(subscriptions_url, status=200) assert resp.json['data'] == [] + + +def test_simple_subscription(app, categories): + payload = {'category_id': 1} + resp = app.post_json('/api/subscribe/?email=john@example.net', payload, status=200) + assert resp.json['data'] is True + + resp = app.get('/api/subscribe/?email=john@example.net') + + data = resp.json['data'] + assert len(data) == 1 + assert data[0]['id'] == '1' + assert data[0]['text'] == 'Alerts' + assert len(data[0]['transports']) == 1 + transport = data[0]['transports'][0] + assert transport['id'] == 'mailto' + assert transport['text'] == 'mailto' -- 2.9.3