2 from cubicweb.devtools.testlib import CubicWebTC |
2 from cubicweb.devtools.testlib import CubicWebTC |
3 from cubicweb.web import facet |
3 from cubicweb.web import facet |
4 |
4 |
5 class BaseFacetTC(CubicWebTC): |
5 class BaseFacetTC(CubicWebTC): |
6 |
6 |
7 def prepare_rqlst(self): |
7 def prepare_rqlst(self, rql='CWUser X', baserql='Any X WHERE X is CWUser', |
|
8 preparedrql='DISTINCT Any WHERE X is CWUser', |
|
9 mainvar='X'): |
8 req = self.request() |
10 req = self.request() |
9 rset = self.execute('CWUser X') |
11 rset = self.execute(rql) |
10 rqlst = rset.syntax_tree().copy() |
12 rqlst = rset.syntax_tree().copy() |
11 filtered_variable, baserql = facet.init_facets(rset, rqlst.children[0]) |
13 filtered_variable, baserql = facet.init_facets(rset, rqlst.children[0], |
12 self.assertEqual(filtered_variable.name, 'X') |
14 mainvar=mainvar) |
13 self.assertEqual(baserql, 'Any X WHERE X is CWUser') |
15 self.assertEqual(filtered_variable.name, mainvar) |
14 self.assertEqual(rqlst.as_string(), 'DISTINCT Any WHERE X is CWUser') |
16 self.assertEqual(baserql, baserql) |
|
17 self.assertEqual(rqlst.as_string(), preparedrql) |
15 return req, rset, rqlst, filtered_variable |
18 return req, rset, rqlst, filtered_variable |
16 |
19 |
17 def _in_group_facet(self, cls=facet.RelationFacet, no_relation=False): |
20 def _in_group_facet(self, cls=facet.RelationFacet, no_relation=False): |
18 req, rset, rqlst, filtered_variable = self.prepare_rqlst() |
21 req, rset, rqlst, filtered_variable = self.prepare_rqlst() |
19 cls.no_relation = no_relation |
22 cls.no_relation = no_relation |
220 # selection is cluttered because rqlst has been prepared for facet (it |
223 # selection is cluttered because rqlst has been prepared for facet (it |
221 # is not in real life) |
224 # is not in real life) |
222 self.assertEqual(f.select.as_string(), |
225 self.assertEqual(f.select.as_string(), |
223 "DISTINCT Any WHERE X is CWUser, X created_by G, G owned_by H, H login 'admin'") |
226 "DISTINCT Any WHERE X is CWUser, X created_by G, G owned_by H, H login 'admin'") |
224 |
227 |
|
228 def prepareg_aggregat_rqlst(self): |
|
229 return self.prepare_rqlst( |
|
230 'Any 1, COUNT(X) WHERE X is CWUser, X creation_date XD, ' |
|
231 'X modification_date XM, Y creation_date YD, Y is CWGroup ' |
|
232 'HAVING DAY(XD)>=DAY(YD) AND DAY(XM)<=DAY(YD)', mainvar='X', |
|
233 baserql='DISTINCT Any WHERE X is CWUser, X creation_date XD, ' |
|
234 'X modification_date XM, Y creation_date YD, Y is CWGroup ' |
|
235 'HAVING DAY(XD) >= DAY(YD), DAY(XM) <= DAY(YD)', |
|
236 preparedrql='DISTINCT Any WHERE X is CWUser, X creation_date XD, ' |
|
237 'X modification_date XM, Y creation_date YD, Y is CWGroup ' |
|
238 'HAVING DAY(XD) >= DAY(YD), DAY(XM) <= DAY(YD)') |
|
239 |
|
240 |
|
241 def test_aggregat_query_cleanup_select(self): |
|
242 req, rset, rqlst, filtered_variable = self.prepareg_aggregat_rqlst() |
|
243 select = rqlst.children[0] |
|
244 facet.cleanup_select(select, filtered_variable=filtered_variable) |
|
245 self.assertEqual(select.as_string(), |
|
246 'DISTINCT Any WHERE X is CWUser, X creation_date XD, ' |
|
247 'X modification_date XM, Y creation_date YD, Y is CWGroup ' |
|
248 'HAVING DAY(XD) >= DAY(YD), DAY(XM) <= DAY(YD)') |
|
249 |
|
250 def test_aggregat_query_rql_path(self): |
|
251 req, rset, rqlst, filtered_variable = self.prepareg_aggregat_rqlst() |
|
252 facet.RQLPathFacet.path = [('X created_by U'), ('U owned_by O'), ('O login OL')] |
|
253 f = facet.RQLPathFacet(req, rset=rset, |
|
254 select=rqlst.children[0], |
|
255 filtered_variable=filtered_variable) |
|
256 f.filter_variable = 'OL' |
|
257 self.assertEqual(f.vocabulary(), [(u'admin', u'admin')]) |
|
258 self.assertEqual(f.possible_values(), ['admin']) |
|
259 req.form[f.__regid__] = 'admin' |
|
260 f.add_rql_restrictions() |
|
261 self.assertEqual(f.select.as_string(), |
|
262 "DISTINCT Any WHERE X is CWUser, X creation_date XD, " |
|
263 "X modification_date XM, Y creation_date YD, Y is CWGroup, " |
|
264 "X created_by G, G owned_by H, H login 'admin' " |
|
265 "HAVING DAY(XD) >= DAY(YD), DAY(XM) <= DAY(YD)") |
|
266 |
|
267 def test_aggregat_query_attribute(self): |
|
268 req, rset, rqlst, filtered_variable = self.prepareg_aggregat_rqlst() |
|
269 f = facet.AttributeFacet(req, rset=rset, |
|
270 select=rqlst.children[0], |
|
271 filtered_variable=filtered_variable) |
|
272 f.rtype = 'login' |
|
273 self.assertEqual(f.vocabulary(), |
|
274 [(u'admin', u'admin'), (u'anon', u'anon')]) |
|
275 self.assertEqual(f.possible_values(), |
|
276 ['admin', 'anon']) |
|
277 req.form[f.__regid__] = 'admin' |
|
278 f.add_rql_restrictions() |
|
279 self.assertEqual(f.select.as_string(), |
|
280 "DISTINCT Any WHERE X is CWUser, X creation_date XD, " |
|
281 "X modification_date XM, Y creation_date YD, Y is CWGroup, X login 'admin' " |
|
282 "HAVING DAY(XD) >= DAY(YD), DAY(XM) <= DAY(YD)") |
225 |
283 |
226 if __name__ == '__main__': |
284 if __name__ == '__main__': |
227 from logilab.common.testlib import unittest_main |
285 from logilab.common.testlib import unittest_main |
228 unittest_main() |
286 unittest_main() |