1 # -*- coding: iso-8859-1 -*- |
1 # -*- coding: iso-8859-1 -*- |
2 """unit tests for modules cubicweb.server.querier and cubicweb.server.querier_steps |
2 """unit tests for modules cubicweb.server.querier and cubicweb.server.querier_steps |
3 """ |
3 """ |
|
4 from datetime import date, datetime |
4 |
5 |
5 from logilab.common.testlib import TestCase, unittest_main |
6 from logilab.common.testlib import TestCase, unittest_main |
6 from cubicweb.devtools import init_test_database |
|
7 from cubicweb.devtools.repotest import tuplify, BaseQuerierTC |
|
8 from unittest_session import Variable |
|
9 |
|
10 from mx.DateTime import today, now, DateTimeType |
|
11 from rql import BadRQLQuery, RQLSyntaxError |
7 from rql import BadRQLQuery, RQLSyntaxError |
|
8 |
12 from cubicweb import QueryError, Unauthorized |
9 from cubicweb import QueryError, Unauthorized |
13 from cubicweb.server.utils import crypt_password |
10 from cubicweb.server.utils import crypt_password |
14 from cubicweb.server.sources.native import make_schema |
11 from cubicweb.server.sources.native import make_schema |
|
12 from cubicweb.devtools import init_test_database |
|
13 from cubicweb.devtools.repotest import tuplify, BaseQuerierTC |
|
14 |
|
15 from unittest_session import Variable |
15 |
16 |
16 |
17 |
17 # register priority/severity sorting registered procedure |
18 # register priority/severity sorting registered procedure |
18 from rql.utils import register_function, FunctionDescr |
19 from rql.utils import register_function, FunctionDescr |
19 |
20 |
185 self.assertEquals(rset.description[0][0], 'Int') |
186 self.assertEquals(rset.description[0][0], 'Int') |
186 rset = self.execute('Any %(x)s', {'x': True}) |
187 rset = self.execute('Any %(x)s', {'x': True}) |
187 self.assertEquals(rset.description[0][0], 'Boolean') |
188 self.assertEquals(rset.description[0][0], 'Boolean') |
188 rset = self.execute('Any %(x)s', {'x': 1.0}) |
189 rset = self.execute('Any %(x)s', {'x': 1.0}) |
189 self.assertEquals(rset.description[0][0], 'Float') |
190 self.assertEquals(rset.description[0][0], 'Float') |
190 rset = self.execute('Any %(x)s', {'x': now()}) |
191 rset = self.execute('Any %(x)s', {'x': datetime.now()}) |
191 self.assertEquals(rset.description[0][0], 'Datetime') |
192 self.assertEquals(rset.description[0][0], 'Datetime') |
192 rset = self.execute('Any %(x)s', {'x': 'str'}) |
193 rset = self.execute('Any %(x)s', {'x': 'str'}) |
193 self.assertEquals(rset.description[0][0], 'String') |
194 self.assertEquals(rset.description[0][0], 'String') |
194 rset = self.execute('Any %(x)s', {'x': u'str'}) |
195 rset = self.execute('Any %(x)s', {'x': u'str'}) |
195 self.assertEquals(rset.description[0][0], 'String') |
196 self.assertEquals(rset.description[0][0], 'String') |
653 # rset = self.execute('Any X WHERE X eid %(x)s, EXISTS(X owned_by U) OR EXISTS(X concerne S?, S owned_by U)', |
654 # rset = self.execute('Any X WHERE X eid %(x)s, EXISTS(X owned_by U) OR EXISTS(X concerne S?, S owned_by U)', |
654 # {'x': eid}, 'x') |
655 # {'x': eid}, 'x') |
655 # self.assertEquals(rset.rows, [[eid]]) |
656 # self.assertEquals(rset.rows, [[eid]]) |
656 |
657 |
657 def test_today_bug(self): |
658 def test_today_bug(self): |
658 self.execute("INSERT Tag X: X name 'bidule', X creation_date TODAY") |
659 self.execute("INSERT Tag X: X name 'bidule', X creation_date NOW") |
659 self.execute("INSERT Tag Y: Y name 'toto'") |
660 self.execute("INSERT Tag Y: Y name 'toto'") |
660 rset = self.execute("Any D WHERE X name in ('bidule', 'toto') , X creation_date D") |
661 rset = self.execute("Any D WHERE X name in ('bidule', 'toto') , X creation_date D") |
661 self.assert_(isinstance(rset.rows[0][0], DateTimeType), rset.rows) |
662 self.assert_(isinstance(rset.rows[0][0], datetime), rset.rows) |
662 rset = self.execute('Tag X WHERE X creation_date TODAY') |
663 rset = self.execute('Tag X WHERE X creation_date TODAY') |
663 self.assertEqual(len(rset.rows), 2) |
664 self.assertEqual(len(rset.rows), 2) |
664 rset = self.execute('Any MAX(D) WHERE X is Tag, X creation_date D') |
665 rset = self.execute('Any MAX(D) WHERE X is Tag, X creation_date D') |
665 self.failUnless(isinstance(rset[0][0], DateTimeType), type(rset[0][0])) |
666 self.failUnless(isinstance(rset[0][0], datetime), type(rset[0][0])) |
666 |
667 |
667 def test_today(self): |
668 def test_today(self): |
668 self.execute("INSERT Tag X: X name 'bidule', X creation_date TODAY") |
669 self.execute("INSERT Tag X: X name 'bidule', X creation_date TODAY") |
669 self.execute("INSERT Tag Y: Y name 'toto'") |
670 self.execute("INSERT Tag Y: Y name 'toto'") |
670 rset = self.execute('Tag X WHERE X creation_date TODAY') |
671 rset = self.execute('Tag X WHERE X creation_date TODAY') |
765 self.failUnless(rset) |
766 self.failUnless(rset) |
766 self.failUnlessEqual(rset.description[0][1], 'Interval') |
767 self.failUnlessEqual(rset.description[0][1], 'Interval') |
767 eid, = self.execute("INSERT Personne X: X nom 'bidule'")[0] |
768 eid, = self.execute("INSERT Personne X: X nom 'bidule'")[0] |
768 rset = self.execute('Any X, NOW - CD WHERE X is Personne, X creation_date CD') |
769 rset = self.execute('Any X, NOW - CD WHERE X is Personne, X creation_date CD') |
769 self.failUnlessEqual(rset.description[0][1], 'Interval') |
770 self.failUnlessEqual(rset.description[0][1], 'Interval') |
770 # sqlite bug |
|
771 #from mx.DateTime import DateTimeDeltaType |
|
772 #self.assertIsInstance(rset[0][1], DateTimeDeltaType) |
|
773 #self.failUnless(rset[0][1].seconds > 0) |
|
774 |
771 |
775 def test_select_subquery_aggregat(self): |
772 def test_select_subquery_aggregat(self): |
776 # percent users by groups |
773 # percent users by groups |
777 self.execute('SET X in_group G WHERE G name "users"') |
774 self.execute('SET X in_group G WHERE G name "users"') |
778 rset = self.execute('Any GN, COUNT(X)*100/T GROUPBY GN ORDERBY 2,1' |
775 rset = self.execute('Any GN, COUNT(X)*100/T GROUPBY GN ORDERBY 2,1' |
1239 self.assertEquals(len(rset), 1) |
1236 self.assertEquals(len(rset), 1) |
1240 |
1237 |
1241 |
1238 |
1242 def test_nonregr_set_datetime(self): |
1239 def test_nonregr_set_datetime(self): |
1243 # huum, psycopg specific |
1240 # huum, psycopg specific |
1244 self.execute('SET X creation_date %(date)s WHERE X eid 1', {'date': today()}) |
1241 self.execute('SET X creation_date %(date)s WHERE X eid 1', {'date': date.today()}) |
1245 |
1242 |
1246 def test_nonregr_set_query(self): |
1243 def test_nonregr_set_query(self): |
1247 ueid = self.execute("INSERT EUser X: X login 'bob', X upassword 'toto'")[0][0] |
1244 ueid = self.execute("INSERT EUser X: X login 'bob', X upassword 'toto'")[0][0] |
1248 self.execute("SET E in_group G, E in_state S, " |
1245 self.execute("SET E in_group G, E in_state S, " |
1249 "E firstname %(firstname)s, E surname %(surname)s " |
1246 "E firstname %(firstname)s, E surname %(surname)s " |