api: add federations stats endpoint (#14787)

This commit is contained in:
Josue Kouka 2018-03-06 14:11:12 +01:00
parent b69ac82ec5
commit 7c2b416140
3 changed files with 46 additions and 1 deletions

View File

@ -18,6 +18,7 @@ from __future__ import absolute_import
from django.shortcuts import get_object_or_404
from django.contrib.auth.models import User
from django.db import models
from rest_framework import status
from rest_framework.views import APIView
@ -78,3 +79,18 @@ class MandayeAPI(APIView):
api = MandayeAPI.as_view()
class MandayeStatsAPI(APIView):
http_method_names = ['get']
def get(self, request, *args, **kwargs):
data = UserCredentials.objects.aggregate(
users_linked=models.Sum(models.Case(models.When(linked=True, then=1), output_field=models.IntegerField())),
users_unlinked=models.Sum(models.Case(models.When(linked=False, then=1), output_field=models.IntegerField()))
)
return Response(data)
api_stats = MandayeStatsAPI.as_view()

View File

@ -30,7 +30,8 @@ urlpatterns = patterns('',
url(r'^_mandaye/post-login-do/$', 'mandayejs.mandaye.views.post_login_do', name='post-login-do'),
url(r'^_mandaye/admin/', include(admin.site.urls)),
url(r'^_mandaye/ws/(?P<path>.*)$', app_web_services, name='app-web-services'),
url(r'^_mandaye/api/', 'mandayejs.mandaye.api.api', name='api')
url(r'^_mandaye/api/$', 'mandayejs.mandaye.api.api', name='api'),
url(r'^_mandaye/api/stats/$', 'mandayejs.mandaye.api.api_stats', name='api-stats')
)
if 'mellon' in settings.INSTALLED_APPS:

View File

@ -2,10 +2,13 @@ import mock
import pytest
from django.conf import settings
from django.core.urlresolvers import reverse
from mandayejs.mandaye.models import UserCredentials
from utils import create_user, create_credentials, get_uuid, get_user
pytestmark = pytest.mark.django_db
def test_api_get(client, url):
response = client.get(url)
@ -150,3 +153,28 @@ def test_signed_api_delete(client_service, url_signed):
assert response.status_code == status_code['success']
if url_signed.orig == 'testserver':
assert UserCredentials.objects.filter(user=josh).exists() is False
def test_api_stats(client):
url = reverse('api-stats')
if client.session.values():
status_code = 200
else:
status_code = 403
for username in ('john', 'jane', 'doe'):
user = create_user(username=username)
creds = create_credentials(user, {
'login': username,
'password': username
})
if username != 'doe':
creds.linked = True
creds.save()
response = client.get(url)
assert response.status_code == status_code
if status_code == 200:
assert {'users_linked': 2, 'users_unlinked': 1} == response.data