cubicweb/test/unittest_toolsutils.py
author Denis Laxalde <denis.laxalde@logilab.fr>
Tue, 07 Jun 2016 18:21:13 +0200
changeset 11459 8987a05950dc
parent 11452 628dd5832495
child 11476 a9f26de5ea6c
permissions -rw-r--r--
Handle cubes as packages in cwconfig Rely on importlib.import_module in several places in cwconfig.py, so this would not work with python 2.6. Method available_cubes will not list cubes installed as package for now. I'm not sure it's worth implementing this method (used in `cubicweb-ctl list cubes` command) for new cubes layout as the same result can basically be obtained with `pip freeze | grep cubicweb_`. In unittest_cwconfig.py, duplicate CubicWebConfigurationTC test case to test both the "cubes as packages" layout and the "legacy cubes" layout. The former having a custom sys.path set (pointing to datapath('libpython') where all cubes' packages live) and the latter having the previous config attribute setup. All test data cubes are moved to packages in libpython directory and symlinks are introduced in the cubes directory. Related to #13001466.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9740
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     1
# copyright 2014 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     2
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     3
#
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     4
# This file is part of CubicWeb.
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     5
#
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     6
# CubicWeb is free software: you can redistribute it and/or modify it under the
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     7
# terms of the GNU Lesser General Public License as published by the Free
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     8
# Software Foundation, either version 2.1 of the License, or (at your option)
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     9
# any later version.
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    10
#
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    11
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    12
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    13
# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    14
# details.
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    15
#
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    16
# You should have received a copy of the GNU Lesser General Public License along
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    17
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    18
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    19
11452
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    20
import tempfile
11451
ae58ba20418c [test] Use plain unittest in unittest_toolsutils
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    21
import unittest
9740
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    22
11452
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    23
from cubicweb.toolsutils import RQLExecuteMatcher, read_config
9740
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    24
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    25
11451
ae58ba20418c [test] Use plain unittest in unittest_toolsutils
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    26
class RQLExecuteMatcherTests(unittest.TestCase):
9740
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    27
    def matched_query(self, text):
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    28
        match = RQLExecuteMatcher.match(text)
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    29
        if match is None:
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    30
            return None
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    31
        return match['rql_query']
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    32
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    33
    def test_unknown_function_dont_match(self):
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    34
        self.assertIsNone(self.matched_query('foo'))
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    35
        self.assertIsNone(self.matched_query('rql('))
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    36
        self.assertIsNone(self.matched_query('hell("")'))
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    37
        self.assertIsNone(self.matched_query('eval("rql(\'bla\''))
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    38
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    39
    def test_rql_other_parameters_dont_match(self):
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    40
        self.assertIsNone(self.matched_query('rql("Any X WHERE X eid %(x)s")'))
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    41
        self.assertIsNone(self.matched_query('rql("Any X WHERE X eid %(x)s", {'))
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    42
        self.assertIsNone(self.matched_query('session.execute("Any X WHERE X eid %(x)s")'))
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    43
        self.assertIsNone(self.matched_query('session.execute("Any X WHERE X eid %(x)s", {'))
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    44
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    45
    def test_rql_function_match(self):
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    46
        for func_expr in ('rql', 'session.execute'):
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    47
            query = self.matched_query('%s("Any X WHERE X is ' % func_expr)
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    48
            self.assertEqual(query, 'Any X WHERE X is ')
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    49
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    50
    def test_offseted_rql_function_match(self):
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    51
        """check indentation is allowed"""
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    52
        for func_expr in ('  rql', '  session.execute'):
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    53
            query = self.matched_query('%s("Any X WHERE X is ' % func_expr)
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    54
            self.assertEqual(query, 'Any X WHERE X is ')
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    55
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    56
11452
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    57
SOURCES_CONTENT = b"""
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    58
[admin]
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    59
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    60
# cubicweb manager account's login (this user will be created)
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    61
login=admin
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    62
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    63
# cubicweb manager account's password
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    64
password=admin
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    65
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    66
[system]
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    67
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    68
# database driver (postgres, sqlite, sqlserver2005)
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    69
db-driver=postgres
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    70
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    71
# database host
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    72
db-host=
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    73
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    74
# database port
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    75
db-port=
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    76
"""
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    77
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    78
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    79
class ToolsUtilsTC(unittest.TestCase):
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    80
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    81
    def test_read_config(self):
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    82
        with tempfile.NamedTemporaryFile() as f:
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    83
            f.write(SOURCES_CONTENT)
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    84
            f.seek(0)
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    85
            config = read_config(f.name)
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    86
        expected = {
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    87
            'admin': {
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    88
                'password': 'admin',
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    89
                'login': 'admin',
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    90
            },
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    91
            'system': {
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    92
                'db-port': None,
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    93
                'db-driver': 'postgres',
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    94
                'db-host': None,
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    95
            },
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    96
        }
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    97
        self.assertEqual(config, expected)
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    98
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    99
9740
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   100
if __name__ == '__main__':
11451
ae58ba20418c [test] Use plain unittest in unittest_toolsutils
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
   101
    unittest.main()