From f68d4d314b6e50da796139f5902ad125fcdd1370 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?=
Date: Sat, 13 Jan 2018 22:24:23 +0100
Subject: [PATCH] api: only return formdef count if popularity is requested
(#21166)
---
help/fr/api-schema.page | 5 +++++
tests/test_api.py | 9 ++++++---
wcs/api.py | 9 ++++++---
3 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/help/fr/api-schema.page b/help/fr/api-schema.page
index 4bd4a6bc..415cba98 100644
--- a/help/fr/api-schema.page
+++ b/help/fr/api-schema.page
@@ -75,6 +75,11 @@ saisie backoffice est disponible, sous le même format, via l'URL
/api/formdefs/?backoffice-submission=on
.
+
+Il est également possible d'obtenir un nombre permettant de trier les résultats
+par popularité en ajoutant un paramètre include-popularity=on
. Les
+différentes entrées disposeront alors d'une clé count
.
+
diff --git a/tests/test_api.py b/tests/test_api.py
index 679297ab..99bc1adb 100644
--- a/tests/test_api.py
+++ b/tests/test_api.py
@@ -318,7 +318,6 @@ def test_formdef_list(pub):
assert resp1.json == resp2.json == resp3.json
assert resp1.json[0]['title'] == 'test'
assert resp1.json[0]['url'] == 'http://example.net/test/'
- assert resp1.json[0]['count'] == 0
assert resp1.json[0]['redirection'] == False
assert resp1.json[0]['description'] == 'plop'
assert resp1.json[0]['keywords'] == ['mobile', 'test']
@@ -401,7 +400,6 @@ def test_formdef_list_redirection(pub):
resp1 = get_app(pub).get('/json')
assert resp1.json[0]['title'] == 'test'
assert resp1.json[0]['url'] == 'http://example.net/test/'
- assert resp1.json[0]['count'] == 0
assert resp1.json[0]['redirection'] == True
def test_backoffice_submission_formdef_list(pub, local_user):
@@ -917,10 +915,15 @@ def test_categories_formdefs(pub, local_user):
assert len(resp.json) == 2
assert resp.json[0]['title'] == 'test'
assert resp.json[0]['url'] == 'http://example.net/test/'
- assert resp.json[0]['count'] == 0
assert resp.json[0]['redirection'] == False
assert resp.json[0]['category'] == 'Category'
assert resp.json[0]['category_slug'] == 'category'
+ assert not 'count' in resp.json[0]
+
+ resp = get_app(pub).get('/api/categories/category/formdefs/?include-popularity=on')
+ assert resp.json[0]['title'] == 'test'
+ assert resp.json[0]['url'] == 'http://example.net/test/'
+ assert resp.json[0]['count'] == 0
get_app(pub).get('/api/categories/XXX/formdefs/', status=404)
diff --git a/wcs/api.py b/wcs/api.py
index 5356d945..c29c7955 100644
--- a/wcs/api.py
+++ b/wcs/api.py
@@ -362,6 +362,8 @@ class ApiFormdefsDirectory(Directory):
charset = get_publisher().site_charset
+ include_popularity = get_request().form.get('include-popularity') == 'on'
+
for formdef in formdefs:
authentication_required = False
if formdef.roles and not list_all_forms and not backoffice_submission:
@@ -398,9 +400,10 @@ class ApiFormdefsDirectory(Directory):
formdict['redirection'] = bool(formdef.is_disabled() and
formdef.disabled_redirection)
- # we include the count of submitted forms so it's possible to sort
- # them by popularity
- formdict['count'] = formdef.data_class().count()
+ if include_popularity:
+ # we include the count of submitted forms so it's possible to sort
+ # them by popularity
+ formdict['count'] = formdef.data_class().count()
formdict['functions'] = {}
formdef_workflow_roles = formdef.workflow_roles or {}
--
2.15.1