From 4dd8980562ad127b32d1840f11623446f7b697dc Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Fri, 30 Sep 2016 12:13:13 +0200 Subject: [PATCH] Use a CBV and increase coverage. --- modoboa/admin/tests/test_domain.py | 15 ++++++++++++++ modoboa/admin/urls.py | 3 ++- modoboa/admin/views/__init__.py | 3 ++- modoboa/admin/views/domain.py | 32 ++++++++++++++++++------------ 4 files changed, 38 insertions(+), 15 deletions(-) diff --git a/modoboa/admin/tests/test_domain.py b/modoboa/admin/tests/test_domain.py index cef7c0f54..39577811f 100644 --- a/modoboa/admin/tests/test_domain.py +++ b/modoboa/admin/tests/test_domain.py @@ -162,3 +162,18 @@ class DomainTestCase(ModoTestCase): "ENABLE_DOMAIN_LIMITS", "yes", app="limits") response = self.client.get(url) self.assertIn("Resources usage", response.content) + + def test_domain_statitics_view(self): + """Test statistics display.""" + url = reverse("admin:domain_statistics") + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + self.assertIn("Global counters", response.content) + self.assertIn("Per-domain counters", response.content) + + self.client.force_login( + User.objects.get(username="admin@test.com")) + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + self.assertNotIn("Global counters", response.content) + self.assertIn("Per-domain counters", response.content) diff --git a/modoboa/admin/urls.py b/modoboa/admin/urls.py index d430cd78e..347efea62 100644 --- a/modoboa/admin/urls.py +++ b/modoboa/admin/urls.py @@ -18,7 +18,8 @@ urlpatterns = patterns( name="mx_domain_detail"), url(r'^domains/list/$', '_domains', name="_domain_list"), url(r'^domains/flatlist/$', 'domains_list', name="domain_flat_list"), - url(r'^domains/stats/$', 'domain_statistics', name="domain_statistics"), + url(r'^domains/stats/$', views.DomainStatisticsView.as_view(), + name="domain_statistics"), url(r'^domains/new/', 'newdomain', name='domain_add'), url(r'^domains/(?P\d+)/edit/$', 'editdomain', name="domain_change"), diff --git a/modoboa/admin/views/__init__.py b/modoboa/admin/views/__init__.py index e63b5b5e1..492f84da6 100644 --- a/modoboa/admin/views/__init__.py +++ b/modoboa/admin/views/__init__.py @@ -3,7 +3,7 @@ from .alias import AliasDetailView from .identity import AccountDetailView from .dns import DNSBLDomainDetailView, MXDomainDetailView -from .domain import DomainDetailView +from .domain import DomainDetailView, DomainStatisticsView __all__ = [ @@ -11,5 +11,6 @@ __all__ = [ "AliasDetailView", "DNSBLDomainDetailView", "DomainDetailView", + "DomainStatisticsView", "MXDomainDetailView", ] diff --git a/modoboa/admin/views/domain.py b/modoboa/admin/views/domain.py index 927177e53..bd1a7a4df 100644 --- a/modoboa/admin/views/domain.py +++ b/modoboa/admin/views/domain.py @@ -147,21 +147,27 @@ def deldomain(request, dom_id): return render_to_json_response(msg) -@login_required -@permission_required("admin.view_domains") -def domain_statistics(request): +class DomainStatisticsView( + auth_mixins.PermissionRequiredMixin, generic.TemplateView): """A simple page to present domain statistics.""" - context = {} - if request.user.role == "SuperAdmins": + + template_name = "admin/domain_statistics.html" + permission_required = "admin.view_domains" + + def get_context_data(self, **kwargs): + """Add counters.""" + context = super(DomainStatisticsView, self).get_context_data(**kwargs) + if self.request.user.role == "SuperAdmins": + context.update({ + "domains_counter": Domain.objects.count(), + "domain_aliases_counter": DomainAlias.objects.count(), + "identities_counter": ( + User.objects.count() + + Alias.objects.filter(internal=False).count()), + }) context.update({ - "domains_counter": Domain.objects.count(), - "domain_aliases_counter": DomainAlias.objects.count(), - "identities_counter": ( - User.objects.count() + - Alias.objects.filter(internal=False).count()), - }) - context.update({"domains": Domain.objects.get_for_admin(request.user)}) - return render(request, "admin/domain_statistics.html", context) + "domains": Domain.objects.get_for_admin(self.request.user)}) + return context class DomainDetailView(