web/test/unittest_views_json.py
author Pierre-Yves David <pierre-yves.david@logilab.fr>
Wed, 11 Apr 2012 14:36:19 +0200
changeset 8367 fc59d2380c48
parent 7989 db76e8aaec29
child 8601 1a6000ff2080
permissions -rw-r--r--
[service-api] Add unified service API on `_cw` attribute This will allow writting generic entity code that could run on both client and repo side. This addition have been discussed with Sylvain Sylvain Thenault.

from cubicweb.devtools.testlib import CubicWebTC

from cubicweb.utils import json

class JsonViewsTC(CubicWebTC):

    def test_json_rsetexport(self):
        req = self.request()
        rset = req.execute('Any GN,COUNT(X) GROUPBY GN ORDERBY GN WHERE X in_group G, G name GN')
        data = self.view('jsonexport', rset)
        self.assertEqual(req.headers_out.getRawHeaders('content-type'), ['application/json'])
        self.assertEqual(data, '[["guests", 1], ["managers", 1]]')

    def test_json_rsetexport_with_jsonp(self):
        req = self.request()
        req.form.update({'callback': 'foo',
                         'rql': 'Any GN,COUNT(X) GROUPBY GN ORDERBY GN WHERE X in_group G, G name GN',
                         })
        data = self.ctrl_publish(req, ctrl='jsonp')
        self.assertEqual(req.headers_out.getRawHeaders('content-type'), ['application/javascript'])
        # because jsonp anonymizes data, only 'guests' group should be found
        self.assertEqual(data, 'foo([["guests", 1]])')

    def test_json_rsetexport_with_jsonp_and_bad_vid(self):
        req = self.request()
        req.form.update({'callback': 'foo',
                         'vid': 'table', # <-- this parameter should be ignored by jsonp controller
                         'rql': 'Any GN,COUNT(X) GROUPBY GN ORDERBY GN WHERE X in_group G, G name GN',
                         })
        data = self.ctrl_publish(req, ctrl='jsonp')
        self.assertEqual(req.headers_out.getRawHeaders('content-type'), ['application/javascript'])
        # result should be plain json, not the table view
        self.assertEqual(data, 'foo([["guests", 1]])')

    def test_json_ersetexport(self):
        req = self.request()
        rset = req.execute('Any G ORDERBY GN WHERE G is CWGroup, G name GN')
        data = json.loads(self.view('ejsonexport', rset))
        self.assertEqual(req.headers_out.getRawHeaders('content-type'), ['application/json'])
        self.assertEqual(data[0]['name'], 'guests')
        self.assertEqual(data[1]['name'], 'managers')


if __name__ == '__main__':
    from logilab.common.testlib import unittest_main
    unittest_main()