server/test/unittest_querier.py
branchtls-sprint
changeset 1016 26387b836099
parent 439 7cb7cb318983
child 1263 01152fffd593
equal deleted inserted replaced
1014:4792a1bb72a9 1016:26387b836099
     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 "