web/test/unittest_views_json.py
changeset 7876 df15d194a134
child 7989 db76e8aaec29
equal deleted inserted replaced
7875:65e460690139 7876:df15d194a134
       
     1 from cubicweb.devtools.testlib import CubicWebTC
       
     2 
       
     3 from json import loads
       
     4 
       
     5 class JsonViewsTC(CubicWebTC):
       
     6 
       
     7     def test_json_rsetexport(self):
       
     8         req = self.request()
       
     9         rset = req.execute('Any GN,COUNT(X) GROUPBY GN ORDERBY GN WHERE X in_group G, G name GN')
       
    10         data = self.view('jsonexport', rset)
       
    11         self.assertEqual(req.headers_out.getRawHeaders('content-type'), ['application/json'])
       
    12         self.assertEqual(data, '[["guests", 1], ["managers", 1]]')
       
    13 
       
    14     def test_json_rsetexport_with_jsonp(self):
       
    15         req = self.request()
       
    16         req.form.update({'callback': 'foo',
       
    17                          'rql': 'Any GN,COUNT(X) GROUPBY GN ORDERBY GN WHERE X in_group G, G name GN',
       
    18                          })
       
    19         data = self.ctrl_publish(req, ctrl='jsonp')
       
    20         self.assertEqual(req.headers_out.getRawHeaders('content-type'), ['application/javascript'])
       
    21         # because jsonp anonymizes data, only 'guests' group should be found
       
    22         self.assertEqual(data, 'foo([["guests", 1]])')
       
    23 
       
    24     def test_json_rsetexport_with_jsonp_and_bad_vid(self):
       
    25         req = self.request()
       
    26         req.form.update({'callback': 'foo',
       
    27                          'vid': 'table', # <-- this parameter should be ignored by jsonp controller
       
    28                          'rql': 'Any GN,COUNT(X) GROUPBY GN ORDERBY GN WHERE X in_group G, G name GN',
       
    29                          })
       
    30         data = self.ctrl_publish(req, ctrl='jsonp')
       
    31         self.assertEqual(req.headers_out.getRawHeaders('content-type'), ['application/javascript'])
       
    32         # result should be plain json, not the table view
       
    33         self.assertEqual(data, 'foo([["guests", 1]])')
       
    34 
       
    35     def test_json_ersetexport(self):
       
    36         req = self.request()
       
    37         rset = req.execute('Any G ORDERBY GN WHERE G is CWGroup, G name GN')
       
    38         data = loads(self.view('ejsonexport', rset))
       
    39         self.assertEqual(req.headers_out.getRawHeaders('content-type'), ['application/json'])
       
    40         self.assertEqual(data[0]['name'], 'guests')
       
    41         self.assertEqual(data[1]['name'], 'managers')
       
    42 
       
    43 
       
    44 if __name__ == '__main__':
       
    45     from logilab.common.testlib import unittest_main
       
    46     unittest_main()