diff -r 058bb3dc685f -r 0b59724cb3f2 cubicweb/server/test/unittest_sqlutils.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cubicweb/server/test/unittest_sqlutils.py Sat Jan 16 13:48:51 2016 +0100 @@ -0,0 +1,68 @@ +# -*- coding: utf-8 -*- +# copyright 2003-2013 LOGILAB S.A. (Paris, FRANCE), all rights reserved. +# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr +# +# This file is part of CubicWeb. +# +# CubicWeb is free software: you can redistribute it and/or modify it under the +# terms of the GNU Lesser General Public License as published by the Free +# Software Foundation, either version 2.1 of the License, or (at your option) +# any later version. +# +# CubicWeb is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more +# details. +# +# You should have received a copy of the GNU Lesser General Public License along +# with CubicWeb. If not, see . +"""unit tests for module cubicweb.server.sqlutils +""" + +import sys + +from logilab.common.testlib import TestCase, unittest_main + +from cubicweb.server.sqlutils import * + +from cubicweb.devtools.testlib import CubicWebTC + +BASE_CONFIG = { + 'db-driver' : 'Postgres', + 'db-host' : 'crater', + 'db-name' : 'cubicweb2_test', + 'db-user' : 'toto', + 'db-upassword' : 'toto', + } + +class SQLAdapterMixInTC(TestCase): + + def test_init(self): + o = SQLAdapterMixIn(BASE_CONFIG) + self.assertEqual(o.dbhelper.dbencoding, 'UTF-8') + + def test_init_encoding(self): + config = BASE_CONFIG.copy() + config['db-encoding'] = 'ISO-8859-1' + o = SQLAdapterMixIn(config) + self.assertEqual(o.dbhelper.dbencoding, 'ISO-8859-1') + + +class SQLUtilsTC(CubicWebTC): + + def test_group_concat(self): + with self.admin_access.repo_cnx() as cnx: + g = cnx.create_entity('CWGroup', name=u'héhé') + u = cnx.create_entity('CWUser', login=u'toto', upassword=u'', + in_group=g.eid) + rset = cnx.execute(u'Any L,GROUP_CONCAT(G) GROUPBY L WHERE X login L,' + u'X in_group G, G name GN, NOT G name IN ("users", "héhé")') + self.assertEqual([[u'admin', u'3'], [u'anon', u'2']], + rset.rows) + rset = cnx.execute('Any L,GROUP_CONCAT(GN) GROUPBY L WHERE X login L,' + 'X in_group G, G name GN, NOT G name "users"') + self.assertEqual([[u'admin', u'managers'], [u'anon', u'guests'], [u'toto', u'héhé']], + rset.rows) + +if __name__ == '__main__': + unittest_main()