13 # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more |
13 # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more |
14 # details. |
14 # details. |
15 # |
15 # |
16 # You should have received a copy of the GNU Lesser General Public License along |
16 # You should have received a copy of the GNU Lesser General Public License along |
17 # with CubicWeb. If not, see <http://www.gnu.org/licenses/>. |
17 # with CubicWeb. If not, see <http://www.gnu.org/licenses/>. |
18 """ |
|
19 |
18 |
20 """ |
|
21 from logilab.common.testlib import unittest_main |
19 from logilab.common.testlib import unittest_main |
22 from logilab.mtconverter import html_unescape |
20 from logilab.mtconverter import html_unescape |
23 |
21 |
24 from cubicweb.devtools.testlib import CubicWebTC |
22 from cubicweb.devtools.testlib import CubicWebTC |
25 |
23 from cubicweb.utils import json |
26 from cubicweb.web.htmlwidgets import TableWidget |
24 from cubicweb.web.htmlwidgets import TableWidget |
27 from cubicweb.web.views import vid_from_rset |
25 from cubicweb.web.views import vid_from_rset |
28 from cubicweb.web import json |
|
29 loads = json.loads |
|
30 |
26 |
31 def loadjson(value): |
27 def loadjson(value): |
32 return loads(html_unescape(value)) |
28 return json.loads(html_unescape(value)) |
33 |
29 |
34 class VidFromRsetTC(CubicWebTC): |
30 class VidFromRsetTC(CubicWebTC): |
35 |
31 |
36 def test_no_rset(self): |
32 def test_no_rset(self): |
37 req = self.request() |
33 req = self.request() |
38 self.assertEquals(vid_from_rset(req, None, self.schema), 'index') |
34 self.assertEqual(vid_from_rset(req, None, self.schema), 'index') |
39 |
35 |
40 def test_no_entity(self): |
36 def test_no_entity(self): |
41 req = self.request() |
37 req = self.request() |
42 rset = self.execute('Any X WHERE X login "blabla"') |
38 rset = self.execute('Any X WHERE X login "blabla"') |
43 self.assertEquals(vid_from_rset(req, rset, self.schema), 'noresult') |
39 self.assertEqual(vid_from_rset(req, rset, self.schema), 'noresult') |
44 |
40 |
45 def test_one_entity(self): |
41 def test_one_entity(self): |
46 req = self.request() |
42 req = self.request() |
47 rset = self.execute('Any X WHERE X login "admin"') |
43 rset = self.execute('Any X WHERE X login "admin"') |
48 self.assertEquals(vid_from_rset(req, rset, self.schema), 'primary') |
44 self.assertEqual(vid_from_rset(req, rset, self.schema), 'primary') |
49 rset = self.execute('Any X, L WHERE X login "admin", X login L') |
45 rset = self.execute('Any X, L WHERE X login "admin", X login L') |
50 self.assertEquals(vid_from_rset(req, rset, self.schema), 'primary') |
46 self.assertEqual(vid_from_rset(req, rset, self.schema), 'primary') |
51 req.search_state = ('pasnormal',) |
47 req.search_state = ('pasnormal',) |
52 rset = self.execute('Any X WHERE X login "admin"') |
48 rset = self.execute('Any X WHERE X login "admin"') |
53 self.assertEquals(vid_from_rset(req, rset, self.schema), 'outofcontext-search') |
49 self.assertEqual(vid_from_rset(req, rset, self.schema), 'outofcontext-search') |
54 |
50 |
55 def test_one_entity_eid(self): |
51 def test_one_entity_eid(self): |
56 req = self.request() |
52 req = self.request() |
57 rset = self.execute('Any X WHERE X eid 1') |
53 rset = self.execute('Any X WHERE X eid 1') |
58 self.assertEquals(vid_from_rset(req, rset, self.schema), 'primary') |
54 self.assertEqual(vid_from_rset(req, rset, self.schema), 'primary') |
59 |
55 |
60 def test_more_than_one_entity_same_type(self): |
56 def test_more_than_one_entity_same_type(self): |
61 req = self.request() |
57 req = self.request() |
62 rset = self.execute('Any X WHERE X is CWUser') |
58 rset = self.execute('Any X WHERE X is CWUser') |
63 self.assertEquals(vid_from_rset(req, rset, self.schema), 'sameetypelist') |
59 self.assertEqual(vid_from_rset(req, rset, self.schema), 'sameetypelist') |
64 rset = self.execute('Any X, L WHERE X login L') |
60 rset = self.execute('Any X, L WHERE X login L') |
65 self.assertEquals(vid_from_rset(req, rset, self.schema), 'sameetypelist') |
61 self.assertEqual(vid_from_rset(req, rset, self.schema), 'sameetypelist') |
66 |
62 |
67 def test_more_than_one_entity_diff_type(self): |
63 def test_more_than_one_entity_diff_type(self): |
68 req = self.request() |
64 req = self.request() |
69 rset = self.execute('Any X WHERE X is IN (CWUser, CWGroup)') |
65 rset = self.execute('Any X WHERE X is IN (CWUser, CWGroup)') |
70 self.assertEquals(vid_from_rset(req, rset, self.schema), 'list') |
66 self.assertEqual(vid_from_rset(req, rset, self.schema), 'list') |
71 |
67 |
72 def test_more_than_one_entity_by_row(self): |
68 def test_more_than_one_entity_by_row(self): |
73 req = self.request() |
69 req = self.request() |
74 rset = self.execute('Any X, G WHERE X in_group G') |
70 rset = self.execute('Any X, G WHERE X in_group G') |
75 self.assertEquals(vid_from_rset(req, rset, self.schema), 'table') |
71 self.assertEqual(vid_from_rset(req, rset, self.schema), 'table') |
76 |
72 |
77 def test_more_than_one_entity_by_row_2(self): |
73 def test_more_than_one_entity_by_row_2(self): |
78 req = self.request() |
74 req = self.request() |
79 rset = self.execute('Any X, GN WHERE X in_group G, G name GN') |
75 rset = self.execute('Any X, GN WHERE X in_group G, G name GN') |
80 self.assertEquals(vid_from_rset(req, rset, self.schema), 'table') |
76 self.assertEqual(vid_from_rset(req, rset, self.schema), 'table') |
81 |
77 |
82 def test_aggregat(self): |
78 def test_aggregat(self): |
83 req = self.request() |
79 req = self.request() |
84 rset = self.execute('Any X, COUNT(T) GROUPBY X WHERE X is T') |
80 rset = self.execute('Any X, COUNT(T) GROUPBY X WHERE X is T') |
85 self.assertEquals(vid_from_rset(req, rset, self.schema), 'table') |
81 self.assertEqual(vid_from_rset(req, rset, self.schema), 'table') |
86 rset = self.execute('Any MAX(X) WHERE X is CWUser') |
82 rset = self.execute('Any MAX(X) WHERE X is CWUser') |
87 self.assertEquals(vid_from_rset(req, rset, self.schema), 'table') |
83 self.assertEqual(vid_from_rset(req, rset, self.schema), 'table') |
88 |
84 |
89 def test_subquery(self): |
85 def test_subquery(self): |
90 rset = self.execute( |
86 rset = self.execute( |
91 'DISTINCT Any X,N ORDERBY N ' |
87 'DISTINCT Any X,N ORDERBY N ' |
92 'WITH X,N BEING (' |
88 'WITH X,N BEING (' |
93 ' (DISTINCT Any P,N WHERE P is CWUser, P login N)' |
89 ' (DISTINCT Any P,N WHERE P is CWUser, P login N)' |
94 ' UNION' |
90 ' UNION' |
95 ' (DISTINCT Any W,N WHERE W is CWGroup, W name N))') |
91 ' (DISTINCT Any W,N WHERE W is CWGroup, W name N))') |
96 req = self.request() |
92 req = self.request() |
97 self.assertEquals(vid_from_rset(req, rset, self.schema), 'table') |
93 self.assertEqual(vid_from_rset(req, rset, self.schema), 'table') |
98 |
94 |
99 |
95 |
100 class TableViewTC(CubicWebTC): |
96 class TableViewTC(CubicWebTC): |
101 |
97 |
102 def _prepare_entity(self): |
98 def _prepare_entity(self): |