|
1 from cubicweb.devtools.testlib import CubicWebTC |
|
2 |
|
3 from cubicweb.utils import json |
|
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 = json.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() |