# HG changeset patch
# User Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
# Date 1356002157 -3600
# Node ID 3ae893f9ec8415013dea1c5b81aa780535297851
# Parent  b236b91836c0ed2037e4717d1e94f768f424f425
[json] enable jsonexport selection on empty rsets (closes #2544358)

diff -r b236b91836c0 -r 3ae893f9ec84 web/test/unittest_views_json.py
--- a/web/test/unittest_views_json.py	Thu Dec 20 12:14:14 2012 +0100
+++ b/web/test/unittest_views_json.py	Thu Dec 20 12:15:57 2012 +0100
@@ -37,6 +37,13 @@
         self.assertEqual(req.headers_out.getRawHeaders('content-type'), ['application/json'])
         self.assertEqual(data, '[["guests", 1], ["managers", 1]]')
 
+    def test_json_rsetexport_empty_rset(self):
+        req = self.request()
+        rset = req.execute('Any X WHERE X is CWUser, X login "foobarbaz"')
+        data = self.view('jsonexport', rset)
+        self.assertEqual(req.headers_out.getRawHeaders('content-type'), ['application/json'])
+        self.assertEqual(data, '[]')
+
     def test_json_rsetexport_with_jsonp(self):
         req = self.request()
         req.form.update({'callback': 'foo',
diff -r b236b91836c0 -r 3ae893f9ec84 web/views/json.py
--- a/web/views/json.py	Thu Dec 20 12:14:14 2012 +0100
+++ b/web/views/json.py	Thu Dec 20 12:15:57 2012 +0100
@@ -23,6 +23,7 @@
 _ = unicode
 
 from cubicweb.utils import json_dumps
+from cubicweb.predicates import any_rset
 from cubicweb.view import EntityView, AnyRsetView
 from cubicweb.web.application import anonymized_request
 from cubicweb.web.views import basecontrollers
@@ -90,6 +91,7 @@
 class JsonRsetView(JsonMixIn, AnyRsetView):
     """dumps raw result set in JSON format"""
     __regid__ = 'jsonexport'
+    __select__ = any_rset() # means rset might be empty or have any shape
     title = _('json-export-view')
 
     def call(self):