api: add federations stats endpoint (#14787)
This commit is contained in:
parent
b69ac82ec5
commit
7c2b416140
|
@ -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()
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
Reference in New Issue