From 0850323c44f52a4f365a786775dfd8ebe9ed8c17 Mon Sep 17 00:00:00 2001 From: Josue Kouka Date: Wed, 25 Apr 2018 18:34:09 +0200 Subject: [PATCH] add back office subscription management (#14093) --- corbo/manage_urls.py | 6 +++++- corbo/models.py | 3 +++ corbo/templates/corbo/manage.html | 1 + corbo/views.py | 34 +++++++++++++++++++++++++++++++++- tests/test_manager.py | 26 +++++++++++++++++++++++++- 5 files changed, 67 insertions(+), 3 deletions(-) diff --git a/corbo/manage_urls.py b/corbo/manage_urls.py index 7b126d0..cb7abe3 100644 --- a/corbo/manage_urls.py +++ b/corbo/manage_urls.py @@ -3,7 +3,7 @@ from django.conf.urls import patterns, include, url from .views import add_announce, edit_announce, delete_announce, \ add_category, edit_category, view_category, delete_category, manage, \ subscriptions_import, view_announce, email_announce, sms_announce, \ - menu_json + menu_json, subscription_delete, subscription_search urlpatterns = patterns('', url(r'^$', manage, name='manage'), @@ -29,5 +29,9 @@ urlpatterns = patterns('', name='delete_category'), url(r'^category/(?P[\w-]+)/import-subscriptions/$', subscriptions_import, name='subscriptions-import'), + url(r'^subscription/delete/(?P[\w-]+)/$', subscription_delete, + name='subscription-delete'), + url(r'^subscriptions/search$', subscription_search, + name='subscription-search'), url(r'^menu.json$', menu_json), ) diff --git a/corbo/models.py b/corbo/models.py index 0a28f50..60d2714 100644 --- a/corbo/models.py +++ b/corbo/models.py @@ -189,6 +189,9 @@ class Subscription(models.Model): identifier = models.CharField(_('identifier'), max_length=128, blank=True, help_text=_('ex.: mailto, ...')) + def __unicode__(self): + return '%s - %s - %s' % (self.uuid, self.identifier, self.category.name) + def get_identifier_display(self): try: scheme, identifier = self.identifier.split(':') diff --git a/corbo/templates/corbo/manage.html b/corbo/templates/corbo/manage.html index 992908d..f8701cf 100644 --- a/corbo/templates/corbo/manage.html +++ b/corbo/templates/corbo/manage.html @@ -12,6 +12,7 @@ {% endif %} {% trans 'New category' %} +{% trans 'Search' %} {% endblock %} {% block content %} diff --git a/corbo/views.py b/corbo/views.py index 3f15171..6723f05 100644 --- a/corbo/views.py +++ b/corbo/views.py @@ -3,10 +3,12 @@ import json from django.conf import settings from django.core import signing +from django.db.models import Q from django.utils import timezone from django.core.urlresolvers import reverse from django.views.generic import CreateView, UpdateView, DeleteView, \ - ListView, TemplateView, RedirectView, DetailView, FormView, RedirectView + ListView, TemplateView, RedirectView, DetailView, FormView, RedirectView, \ + View from django.contrib.syndication.views import Feed from django.shortcuts import resolve_url from django.utils.encoding import force_text @@ -256,6 +258,36 @@ class SubscriptionsImportView(FormView): subscriptions_import = SubscriptionsImportView.as_view() +class SubscriptionSearchView(TemplateView): + + template_name = 'corbo/subscription_search.html' + + def get_context_data(self, **kwargs): + context = super(SubscriptionSearchView, self).get_context_data(**kwargs) + query = self.request.GET.get('q', '').strip() + context['query'] = query + if not query: + return context + context['subscriptions'] = models.Subscription.objects.filter( + Q(identifier='mailto:' + query) | Q(identifier='sms:' + query)) + return context + + +subscription_search = SubscriptionSearchView.as_view() + + +class SubscriptionDeleteView(DeleteView): + + model = models.Subscription + template_name = 'corbo/manager_delete.html' + + def get_success_url(self): + return reverse('subscription-search') + + +subscription_delete = SubscriptionDeleteView.as_view() + + class AnnounceView(DetailView): model = models.Announce template_name = 'corbo/announce_view.html' diff --git a/tests/test_manager.py b/tests/test_manager.py index 85a2996..967d83e 100644 --- a/tests/test_manager.py +++ b/tests/test_manager.py @@ -7,7 +7,7 @@ from django.core.urlresolvers import reverse from django.contrib.auth.models import User from django.test import override_settings -from corbo.models import Broadcast +from corbo.models import Broadcast, Subscription pytestmark = pytest.mark.django_db @@ -352,3 +352,27 @@ def test_sms_announce_with_invalid_gateway_url(app, admin_user, settings, caplog assert record.name == 'corbo.utils' assert record.levelno == logging.WARNING assert 'Invalid URL' in record.getMessage() + + +@pytest.fixture(scope='function', params=['foo@example.net', '0304050607']) +def search_identifier(request, subscriptions): + return request.param + + +def test_subscriptions_search(app, admin_user, search_identifier): + app = login(app) + resp = app.get('/manage/') + resp = resp.click('Search') + # empty search + resp = resp.form.submit() + assert resp.html.find('div', {'class': 'subscriptions'}) is None + Subscription.objects.filter(identifier__contains=search_identifier).count() == 2 + # search by email + resp.form['q'] = search_identifier + resp = resp.form.submit() + assert len(resp.html.find('div', {'class': 'subscriptions'}).find_all('li')) == 2 + # delete sub + first_sub = Subscription.objects.filter(identifier__contains=search_identifier).first() + resp = resp.click(href='/manage/subscription/delete/%d/' % first_sub.pk) + resp = resp.form.submit().follow() + Subscription.objects.filter(identifier=search_identifier).count() == 1 -- 2.11.0