cubicweb/test/unittest_cwconfig.py
author Philippe Pepiot <philippe.pepiot@logilab.fr>
Fri, 14 Apr 2017 17:17:12 +0200
branch3.25
changeset 12165 127f7da447a4
parent 12119 c4ed3f6463f6
child 12272 36032de96867
permissions -rw-r--r--
[cwconfig] load appobjects subpackages recursively This is a regression appeared in 3.25.0. Appobjects (entities, views etc) subpackages should be loaded recursively, this is the historical behavior, relevant code is in logilab.common.registry._toload_info(). To keep historical behavior schema subpackages should not be loaded, relevant code is in yams.reader.get_schema_files(). We may want to have a consistent behavior later on... Closes #17073706.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8537
e30d0a7f0087 [config] turn internal configuration methods building appobjects search path into normal method rather than class method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
     1
# copyright 2003-2012 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
     2
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
     3
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
     4
# This file is part of CubicWeb.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
     5
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
     6
# CubicWeb is free software: you can redistribute it and/or modify it under the
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
     7
# terms of the GNU Lesser General Public License as published by the Free
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
     8
# Software Foundation, either version 2.1 of the License, or (at your option)
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
     9
# any later version.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
    10
#
5424
8ecbcbff9777 replace logilab-common by CubicWeb in disclaimer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5421
diff changeset
    11
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
    12
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
    13
# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
    14
# details.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
    15
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
    16
# You should have received a copy of the GNU Lesser General Public License along
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
    17
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
6314
b233cc448bdd [test] add some fake cubes necessary for test so we don't depend on the actual forge cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5426
diff changeset
    18
"""cubicweb.cwconfig unit tests"""
1977
606923dff11b big bunch of copyright / docstring update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1640
diff changeset
    19
11899
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    20
import contextlib
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    21
import compileall
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    22
import functools
1015
b5fdad9208f8 search for cubes in a list of directories
sylvain.thenault@logilab.fr
parents: 515
diff changeset
    23
import sys
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    24
import os
11899
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    25
import pkgutil
12119
c4ed3f6463f6 Fix flake8 errors in unittest_cwconfig
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12118
diff changeset
    26
from os.path import dirname, join
11472
bc04039acd2e [config] Make available_cubes aware of cubes installed as packages
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11459
diff changeset
    27
from pkg_resources import EntryPoint, Distribution
11448
f79c6894381f [test] Avoid usage of lgc.testlib TestCase in unittest_cwconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11269
diff changeset
    28
import unittest
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    29
11472
bc04039acd2e [config] Make available_cubes aware of cubes installed as packages
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11459
diff changeset
    30
from mock import patch
11459
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
    31
from six import PY3
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
    32
4691
ae468fae9965 [test] fix test inter-dependancies pb. Pytest ok in each individual test dir, though not yet for whole cubicweb, but for different reasons
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4681
diff changeset
    33
from logilab.common.modutils import cleanup_sys_modules
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    34
11744
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
    35
from cubicweb.devtools import ApptestConfiguration
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
    36
from cubicweb.devtools.testlib import BaseTestCase, TemporaryDirectory
11899
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    37
from cubicweb.cwconfig import (
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    38
    CubicWebConfiguration, _find_prefix, _expand_modname)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    39
11459
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
    40
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    41
def unabsolutize(path):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    42
    parts = path.split(os.sep)
515
92d95b86263e search in reverted order else in case of installed cubes (eg in cubicweb/cubes) we do not remove all expected parts
sylvain.thenault@logilab.fr
parents: 13
diff changeset
    43
    for i, part in reversed(tuple(enumerate(parts))):
11459
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
    44
        if part.startswith('cubicweb_'):
12119
c4ed3f6463f6 Fix flake8 errors in unittest_cwconfig
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12118
diff changeset
    45
            return os.sep.join([part[len('cubicweb_'):]] + parts[i + 1:])
11459
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
    46
        if part.startswith('cubicweb') or part == 'legacy_cubes':
12119
c4ed3f6463f6 Fix flake8 errors in unittest_cwconfig
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12118
diff changeset
    47
            return os.sep.join(parts[i + 1:])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    48
    raise Exception('duh? %s' % path)
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1341
diff changeset
    49
4681
5f72584ab1d7 [test] cleanup
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4490
diff changeset
    50
11899
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    51
def templibdir(func):
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    52
    """create a temporary directory and insert it in sys.path"""
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    53
    @functools.wraps(func)
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    54
    def wrapper(*args, **kwargs):
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    55
        with TemporaryDirectory() as libdir:
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    56
            sys.path.insert(0, libdir)
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    57
            try:
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    58
                args = args + (libdir,)
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    59
                return func(*args, **kwargs)
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    60
            finally:
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    61
                sys.path.remove(libdir)
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    62
    return wrapper
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    63
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    64
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    65
def create_filepath(filepath):
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    66
    filedir = dirname(filepath)
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    67
    if not os.path.exists(filedir):
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    68
        os.makedirs(filedir)
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    69
    with open(filepath, 'a'):
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    70
        pass
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    71
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    72
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    73
@contextlib.contextmanager
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    74
def temp_config(appid, instance_dir, cubes_dir, cubes):
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    75
    """context manager that create a config object with specified appid,
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    76
    instance_dir, cubes_dir and cubes"""
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    77
    cls = CubicWebConfiguration
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    78
    old = (cls._INSTANCES_DIR, cls.CUBES_DIR, cls.CUBES_PATH,
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    79
           sys.path[:], sys.meta_path[:])
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    80
    old_modules = set(sys.modules)
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    81
    try:
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    82
        cls._INSTANCES_DIR, cls.CUBES_DIR, cls.CUBES_PATH = (
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    83
            instance_dir, cubes_dir, [])
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    84
        config = cls(appid)
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    85
        config._cubes = cubes
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    86
        config.adjust_sys_path()
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    87
        yield config
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    88
    finally:
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    89
        (cls._INSTANCES_DIR, cls.CUBES_DIR, cls.CUBES_PATH,
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    90
         sys.path[:], sys.meta_path[:]) = old
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    91
        for module in set(sys.modules) - old_modules:
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    92
            del sys.modules[module]
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    93
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
    94
12117
49beb974888f [test] Extract out method-which-is-not-a-method mocking iter_entry_points
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12115
diff changeset
    95
def iter_entry_points(group, name):
49beb974888f [test] Extract out method-which-is-not-a-method mocking iter_entry_points
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12115
diff changeset
    96
    """Mock pkg_resources.iter_entry_points to yield EntryPoint from
49beb974888f [test] Extract out method-which-is-not-a-method mocking iter_entry_points
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12115
diff changeset
    97
    packages found in test/data/libpython even though these are not
49beb974888f [test] Extract out method-which-is-not-a-method mocking iter_entry_points
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12115
diff changeset
    98
    installed.
49beb974888f [test] Extract out method-which-is-not-a-method mocking iter_entry_points
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12115
diff changeset
    99
    """
49beb974888f [test] Extract out method-which-is-not-a-method mocking iter_entry_points
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12115
diff changeset
   100
    libpython = CubicWebConfigurationTC.datapath('libpython')
49beb974888f [test] Extract out method-which-is-not-a-method mocking iter_entry_points
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12115
diff changeset
   101
    prefix = 'cubicweb_'
49beb974888f [test] Extract out method-which-is-not-a-method mocking iter_entry_points
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12115
diff changeset
   102
    for pkgname in os.listdir(libpython):
49beb974888f [test] Extract out method-which-is-not-a-method mocking iter_entry_points
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12115
diff changeset
   103
        if not pkgname.startswith(prefix):
49beb974888f [test] Extract out method-which-is-not-a-method mocking iter_entry_points
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12115
diff changeset
   104
            continue
49beb974888f [test] Extract out method-which-is-not-a-method mocking iter_entry_points
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12115
diff changeset
   105
        location = join(libpython, pkgname)
49beb974888f [test] Extract out method-which-is-not-a-method mocking iter_entry_points
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12115
diff changeset
   106
        yield EntryPoint(pkgname[len(prefix):], pkgname,
49beb974888f [test] Extract out method-which-is-not-a-method mocking iter_entry_points
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12115
diff changeset
   107
                         dist=Distribution(location))
49beb974888f [test] Extract out method-which-is-not-a-method mocking iter_entry_points
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12115
diff changeset
   108
49beb974888f [test] Extract out method-which-is-not-a-method mocking iter_entry_points
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12115
diff changeset
   109
11744
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   110
class CubicWebConfigurationTC(BaseTestCase):
11448
f79c6894381f [test] Avoid usage of lgc.testlib TestCase in unittest_cwconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11269
diff changeset
   111
11459
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   112
    @classmethod
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   113
    def setUpClass(cls):
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   114
        sys.path.append(cls.datapath('libpython'))
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   115
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   116
    @classmethod
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   117
    def tearDownClass(cls):
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   118
        sys.path.remove(cls.datapath('libpython'))
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   119
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   120
    def setUp(self):
11269
73ac69970047 [devtools] Simplify test configuration's init
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11072
diff changeset
   121
        self.config = ApptestConfiguration('data', __file__)
13
bae30087db21 fix unittests in cubicweb/test
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 0
diff changeset
   122
        self.config._cubes = ('email', 'file')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   123
1341
9502d02630bf fix tests
sylvain.thenault@logilab.fr
parents: 1263
diff changeset
   124
    def tearDown(self):
5021
58e89f3dfbae handle nicely typical installation other than debian package / mercurial forest
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
   125
        ApptestConfiguration.CUBES_PATH = []
12118
d7947c3c0eeb [config] Test loading of ccplugin modules
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12117
diff changeset
   126
        cleanup_sys_modules([self.datapath('libpython')])
1341
9502d02630bf fix tests
sylvain.thenault@logilab.fr
parents: 1263
diff changeset
   127
11472
bc04039acd2e [config] Make available_cubes aware of cubes installed as packages
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11459
diff changeset
   128
    @patch('pkg_resources.iter_entry_points', side_effect=iter_entry_points)
bc04039acd2e [config] Make available_cubes aware of cubes installed as packages
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11459
diff changeset
   129
    def test_available_cubes(self, mock_iter_entry_points):
bc04039acd2e [config] Make available_cubes aware of cubes installed as packages
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11459
diff changeset
   130
        expected_cubes = [
12115
8d0127498a28 Backed out changeset fe995d56c949
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12078
diff changeset
   131
            'card', 'comment', 'cubicweb_comment', 'cubicweb_email', 'file',
8d0127498a28 Backed out changeset fe995d56c949
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12078
diff changeset
   132
            'cubicweb_file', 'cubicweb_forge', 'localperms',
8d0127498a28 Backed out changeset fe995d56c949
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12078
diff changeset
   133
            'cubicweb_mycube', 'tag',
11472
bc04039acd2e [config] Make available_cubes aware of cubes installed as packages
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11459
diff changeset
   134
        ]
bc04039acd2e [config] Make available_cubes aware of cubes installed as packages
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11459
diff changeset
   135
        self._test_available_cubes(expected_cubes)
bc04039acd2e [config] Make available_cubes aware of cubes installed as packages
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11459
diff changeset
   136
        mock_iter_entry_points.assert_called_once_with(
bc04039acd2e [config] Make available_cubes aware of cubes installed as packages
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11459
diff changeset
   137
            group='cubicweb.cubes', name=None)
bc04039acd2e [config] Make available_cubes aware of cubes installed as packages
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11459
diff changeset
   138
bc04039acd2e [config] Make available_cubes aware of cubes installed as packages
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11459
diff changeset
   139
    def _test_available_cubes(self, expected_cubes):
bc04039acd2e [config] Make available_cubes aware of cubes installed as packages
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11459
diff changeset
   140
        self.assertEqual(self.config.available_cubes(), expected_cubes)
bc04039acd2e [config] Make available_cubes aware of cubes installed as packages
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11459
diff changeset
   141
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   142
    def test_reorder_cubes(self):
6314
b233cc448bdd [test] add some fake cubes necessary for test so we don't depend on the actual forge cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5426
diff changeset
   143
        # forge depends on email and file and comment
13
bae30087db21 fix unittests in cubicweb/test
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 0
diff changeset
   144
        # email depends on file
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6314
diff changeset
   145
        self.assertEqual(self.config.reorder_cubes(['file', 'email', 'forge']),
12119
c4ed3f6463f6 Fix flake8 errors in unittest_cwconfig
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12118
diff changeset
   146
                         ('forge', 'email', 'file'))
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6314
diff changeset
   147
        self.assertEqual(self.config.reorder_cubes(['email', 'file', 'forge']),
12119
c4ed3f6463f6 Fix flake8 errors in unittest_cwconfig
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12118
diff changeset
   148
                         ('forge', 'email', 'file'))
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6314
diff changeset
   149
        self.assertEqual(self.config.reorder_cubes(['email', 'forge', 'file']),
12119
c4ed3f6463f6 Fix flake8 errors in unittest_cwconfig
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12118
diff changeset
   150
                         ('forge', 'email', 'file'))
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6314
diff changeset
   151
        self.assertEqual(self.config.reorder_cubes(['file', 'forge', 'email']),
12119
c4ed3f6463f6 Fix flake8 errors in unittest_cwconfig
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12118
diff changeset
   152
                         ('forge', 'email', 'file'))
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6314
diff changeset
   153
        self.assertEqual(self.config.reorder_cubes(['forge', 'file', 'email']),
12119
c4ed3f6463f6 Fix flake8 errors in unittest_cwconfig
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12118
diff changeset
   154
                         ('forge', 'email', 'file'))
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6314
diff changeset
   155
        self.assertEqual(self.config.reorder_cubes(('forge', 'email', 'file')),
12119
c4ed3f6463f6 Fix flake8 errors in unittest_cwconfig
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12118
diff changeset
   156
                         ('forge', 'email', 'file'))
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1341
diff changeset
   157
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   158
    def test_reorder_cubes_recommends(self):
11459
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   159
        from cubicweb_comment import __pkginfo__ as comment_pkginfo
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   160
        self._test_reorder_cubes_recommends(comment_pkginfo)
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   161
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   162
    def _test_reorder_cubes_recommends(self, comment_pkginfo):
5025
2826f5406201 deprecate __use__ and __recommend__
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5021
diff changeset
   163
        comment_pkginfo.__recommends_cubes__ = {'file': None}
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   164
        try:
13
bae30087db21 fix unittests in cubicweb/test
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 0
diff changeset
   165
            # email recommends comment
bae30087db21 fix unittests in cubicweb/test
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 0
diff changeset
   166
            # comment recommends file
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6314
diff changeset
   167
            self.assertEqual(self.config.reorder_cubes(('forge', 'email', 'file', 'comment')),
12119
c4ed3f6463f6 Fix flake8 errors in unittest_cwconfig
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12118
diff changeset
   168
                             ('forge', 'email', 'comment', 'file'))
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6314
diff changeset
   169
            self.assertEqual(self.config.reorder_cubes(('forge', 'email', 'comment', 'file')),
12119
c4ed3f6463f6 Fix flake8 errors in unittest_cwconfig
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12118
diff changeset
   170
                             ('forge', 'email', 'comment', 'file'))
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6314
diff changeset
   171
            self.assertEqual(self.config.reorder_cubes(('forge', 'comment', 'email', 'file')),
12119
c4ed3f6463f6 Fix flake8 errors in unittest_cwconfig
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12118
diff changeset
   172
                             ('forge', 'email', 'comment', 'file'))
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6314
diff changeset
   173
            self.assertEqual(self.config.reorder_cubes(('comment', 'forge', 'email', 'file')),
12119
c4ed3f6463f6 Fix flake8 errors in unittest_cwconfig
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12118
diff changeset
   174
                             ('forge', 'email', 'comment', 'file'))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   175
        finally:
5025
2826f5406201 deprecate __use__ and __recommend__
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5021
diff changeset
   176
            comment_pkginfo.__recommends_cubes__ = {}
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1341
diff changeset
   177
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   178
    def test_expand_cubes(self):
6411
308f6d0e11ae [test] don't add unnecessary dependency to blog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6349
diff changeset
   179
        self.assertEqual(self.config.expand_cubes(('email', 'comment')),
12119
c4ed3f6463f6 Fix flake8 errors in unittest_cwconfig
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12118
diff changeset
   180
                         ['email', 'comment', 'file'])
1015
b5fdad9208f8 search for cubes in a list of directories
sylvain.thenault@logilab.fr
parents: 515
diff changeset
   181
11710
dd5df5fe7137 [config] Exclude "pyramid" cube when initializing application cubes
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11681
diff changeset
   182
    def test_init_cubes_ignore_pyramid_cube(self):
dd5df5fe7137 [config] Exclude "pyramid" cube when initializing application cubes
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11681
diff changeset
   183
        warning_msg = 'cubicweb-pyramid got integrated into CubicWeb'
dd5df5fe7137 [config] Exclude "pyramid" cube when initializing application cubes
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11681
diff changeset
   184
        with self.assertLogs('cubicweb.configuration', level='WARNING') as cm:
dd5df5fe7137 [config] Exclude "pyramid" cube when initializing application cubes
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11681
diff changeset
   185
            self.config.init_cubes(['pyramid', 'card'])
dd5df5fe7137 [config] Exclude "pyramid" cube when initializing application cubes
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11681
diff changeset
   186
        self.assertIn(warning_msg, cm.output[0])
dd5df5fe7137 [config] Exclude "pyramid" cube when initializing application cubes
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11681
diff changeset
   187
        self.assertNotIn('pyramid', self.config._cubes)
11459
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   188
12118
d7947c3c0eeb [config] Test loading of ccplugin modules
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12117
diff changeset
   189
    @patch('pkg_resources.iter_entry_points', side_effect=iter_entry_points)
d7947c3c0eeb [config] Test loading of ccplugin modules
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12117
diff changeset
   190
    def test_ccplugin_modname(self, mock_iter_entry_points):
d7947c3c0eeb [config] Test loading of ccplugin modules
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12117
diff changeset
   191
        self.config.load_cwctl_plugins()
d7947c3c0eeb [config] Test loading of ccplugin modules
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12117
diff changeset
   192
        mock_iter_entry_points.assert_called_once_with(
d7947c3c0eeb [config] Test loading of ccplugin modules
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12117
diff changeset
   193
            group='cubicweb.cubes', name=None)
d7947c3c0eeb [config] Test loading of ccplugin modules
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12117
diff changeset
   194
        self.assertNotIn('cubes.mycube.ccplugin', sys.modules, sorted(sys.modules))
d7947c3c0eeb [config] Test loading of ccplugin modules
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12117
diff changeset
   195
        self.assertIn('cubicweb_mycube.ccplugin', sys.modules, sorted(sys.modules))
d7947c3c0eeb [config] Test loading of ccplugin modules
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12117
diff changeset
   196
d7947c3c0eeb [config] Test loading of ccplugin modules
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12117
diff changeset
   197
11459
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   198
class CubicWebConfigurationWithLegacyCubesTC(CubicWebConfigurationTC):
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   199
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   200
    @classmethod
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   201
    def setUpClass(cls):
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   202
        pass
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   203
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   204
    @classmethod
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   205
    def tearDownClass(cls):
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   206
        pass
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   207
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   208
    def setUp(self):
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   209
        self.custom_cubes_dir = self.datapath('legacy_cubes')
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   210
        cleanup_sys_modules([self.custom_cubes_dir, ApptestConfiguration.CUBES_DIR])
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   211
        super(CubicWebConfigurationWithLegacyCubesTC, self).setUp()
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   212
        self.config.__class__.CUBES_PATH = [self.custom_cubes_dir]
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   213
        self.config.adjust_sys_path()
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   214
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   215
    def tearDown(self):
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   216
        ApptestConfiguration.CUBES_PATH = []
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   217
11472
bc04039acd2e [config] Make available_cubes aware of cubes installed as packages
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11459
diff changeset
   218
    def test_available_cubes(self):
bc04039acd2e [config] Make available_cubes aware of cubes installed as packages
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11459
diff changeset
   219
        expected_cubes = sorted(set([
bc04039acd2e [config] Make available_cubes aware of cubes installed as packages
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11459
diff changeset
   220
            # local cubes
bc04039acd2e [config] Make available_cubes aware of cubes installed as packages
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11459
diff changeset
   221
            'comment', 'email', 'file', 'forge', 'mycube',
bc04039acd2e [config] Make available_cubes aware of cubes installed as packages
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11459
diff changeset
   222
            # test dependencies
11681
b23d58050076 Merge cubicweb-pyramid cube
Yann Voté <yann.vote@logilab.fr>
parents: 11631
diff changeset
   223
            'card', 'file', 'localperms', 'tag',
11472
bc04039acd2e [config] Make available_cubes aware of cubes installed as packages
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11459
diff changeset
   224
        ]))
bc04039acd2e [config] Make available_cubes aware of cubes installed as packages
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11459
diff changeset
   225
        self._test_available_cubes(expected_cubes)
bc04039acd2e [config] Make available_cubes aware of cubes installed as packages
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11459
diff changeset
   226
11459
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   227
    def test_reorder_cubes_recommends(self):
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   228
        from cubes.comment import __pkginfo__ as comment_pkginfo
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   229
        self._test_reorder_cubes_recommends(comment_pkginfo)
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   230
1015
b5fdad9208f8 search for cubes in a list of directories
sylvain.thenault@logilab.fr
parents: 515
diff changeset
   231
    def test_cubes_path(self):
1023
278f997aa257 fix sys.path adjustment
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1015
diff changeset
   232
        # make sure we don't import the email cube, but the stdlib email package
278f997aa257 fix sys.path adjustment
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1015
diff changeset
   233
        import email
6412
370357e68837 [test] cleanup / unittest2 api update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6411
diff changeset
   234
        self.assertNotEqual(dirname(email.__file__), self.config.CUBES_DIR)
11459
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   235
        self.config.__class__.CUBES_PATH = [self.custom_cubes_dir]
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6314
diff changeset
   236
        self.assertEqual(self.config.cubes_search_path(),
12119
c4ed3f6463f6 Fix flake8 errors in unittest_cwconfig
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12118
diff changeset
   237
                         [self.custom_cubes_dir, self.config.CUBES_DIR])
11459
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   238
        self.config.__class__.CUBES_PATH = [self.custom_cubes_dir,
5021
58e89f3dfbae handle nicely typical installation other than debian package / mercurial forest
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
   239
                                            self.config.CUBES_DIR, 'unexistant']
1015
b5fdad9208f8 search for cubes in a list of directories
sylvain.thenault@logilab.fr
parents: 515
diff changeset
   240
        # filter out unexistant and duplicates
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6314
diff changeset
   241
        self.assertEqual(self.config.cubes_search_path(),
12119
c4ed3f6463f6 Fix flake8 errors in unittest_cwconfig
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12118
diff changeset
   242
                         [self.custom_cubes_dir,
c4ed3f6463f6 Fix flake8 errors in unittest_cwconfig
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12118
diff changeset
   243
                          self.config.CUBES_DIR])
9674
96549de9dd70 [test] use assertIn where appropriate
Julien Cristau <julien.cristau@logilab.fr>
parents: 8537
diff changeset
   244
        self.assertIn('mycube', self.config.available_cubes())
1015
b5fdad9208f8 search for cubes in a list of directories
sylvain.thenault@logilab.fr
parents: 515
diff changeset
   245
        # test cubes python path
b5fdad9208f8 search for cubes in a list of directories
sylvain.thenault@logilab.fr
parents: 515
diff changeset
   246
        self.config.adjust_sys_path()
b5fdad9208f8 search for cubes in a list of directories
sylvain.thenault@logilab.fr
parents: 515
diff changeset
   247
        import cubes
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6314
diff changeset
   248
        self.assertEqual(cubes.__path__, self.config.cubes_search_path())
1015
b5fdad9208f8 search for cubes in a list of directories
sylvain.thenault@logilab.fr
parents: 515
diff changeset
   249
        # this import should succeed once path is adjusted
b5fdad9208f8 search for cubes in a list of directories
sylvain.thenault@logilab.fr
parents: 515
diff changeset
   250
        from cubes import mycube
11459
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   251
        self.assertEqual(mycube.__path__, [join(self.custom_cubes_dir, 'mycube')])
1015
b5fdad9208f8 search for cubes in a list of directories
sylvain.thenault@logilab.fr
parents: 515
diff changeset
   252
        # file cube should be overriden by the one found in data/cubes
11920
f13799fbcfea [cwconfig] create a virtual "cubes" package
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11900
diff changeset
   253
        sys.modules.pop('cubes.file')
f13799fbcfea [cwconfig] create a virtual "cubes" package
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11900
diff changeset
   254
        if hasattr(cubes, 'file'):
11459
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   255
            del cubes.file
1015
b5fdad9208f8 search for cubes in a list of directories
sylvain.thenault@logilab.fr
parents: 515
diff changeset
   256
        from cubes import file
11459
8987a05950dc Handle cubes as packages in cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11448
diff changeset
   257
        self.assertEqual(file.__path__, [join(self.custom_cubes_dir, 'file')])
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1341
diff changeset
   258
11859
2e1a1ebd4730 [cwconfig] ensure CubicWebNoAppConfiguration returns a typed value (closes #16364459)
David Douard <david.douard@logilab.fr>
parents: 11744
diff changeset
   259
    def test_config_value_from_environment_str(self):
11476
a9f26de5ea6c Let configuration option be overridden by environment variables
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11472
diff changeset
   260
        self.assertIsNone(self.config['base-url'])
a9f26de5ea6c Let configuration option be overridden by environment variables
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11472
diff changeset
   261
        os.environ['CW_BASE_URL'] = 'https://www.cubicweb.org'
a9f26de5ea6c Let configuration option be overridden by environment variables
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11472
diff changeset
   262
        try:
a9f26de5ea6c Let configuration option be overridden by environment variables
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11472
diff changeset
   263
            self.assertEqual(self.config['base-url'],
a9f26de5ea6c Let configuration option be overridden by environment variables
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11472
diff changeset
   264
                             'https://www.cubicweb.org')
a9f26de5ea6c Let configuration option be overridden by environment variables
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11472
diff changeset
   265
        finally:
a9f26de5ea6c Let configuration option be overridden by environment variables
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11472
diff changeset
   266
            del os.environ['CW_BASE_URL']
a9f26de5ea6c Let configuration option be overridden by environment variables
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11472
diff changeset
   267
11859
2e1a1ebd4730 [cwconfig] ensure CubicWebNoAppConfiguration returns a typed value (closes #16364459)
David Douard <david.douard@logilab.fr>
parents: 11744
diff changeset
   268
    def test_config_value_from_environment_int(self):
2e1a1ebd4730 [cwconfig] ensure CubicWebNoAppConfiguration returns a typed value (closes #16364459)
David Douard <david.douard@logilab.fr>
parents: 11744
diff changeset
   269
        self.assertEqual(self.config['connections-pool-size'], 4)
2e1a1ebd4730 [cwconfig] ensure CubicWebNoAppConfiguration returns a typed value (closes #16364459)
David Douard <david.douard@logilab.fr>
parents: 11744
diff changeset
   270
        os.environ['CW_CONNECTIONS_POOL_SIZE'] = '6'
2e1a1ebd4730 [cwconfig] ensure CubicWebNoAppConfiguration returns a typed value (closes #16364459)
David Douard <david.douard@logilab.fr>
parents: 11744
diff changeset
   271
        try:
2e1a1ebd4730 [cwconfig] ensure CubicWebNoAppConfiguration returns a typed value (closes #16364459)
David Douard <david.douard@logilab.fr>
parents: 11744
diff changeset
   272
            self.assertEqual(self.config['connections-pool-size'], 6)
2e1a1ebd4730 [cwconfig] ensure CubicWebNoAppConfiguration returns a typed value (closes #16364459)
David Douard <david.douard@logilab.fr>
parents: 11744
diff changeset
   273
        finally:
2e1a1ebd4730 [cwconfig] ensure CubicWebNoAppConfiguration returns a typed value (closes #16364459)
David Douard <david.douard@logilab.fr>
parents: 11744
diff changeset
   274
            del os.environ['CW_CONNECTIONS_POOL_SIZE']
2e1a1ebd4730 [cwconfig] ensure CubicWebNoAppConfiguration returns a typed value (closes #16364459)
David Douard <david.douard@logilab.fr>
parents: 11744
diff changeset
   275
2e1a1ebd4730 [cwconfig] ensure CubicWebNoAppConfiguration returns a typed value (closes #16364459)
David Douard <david.douard@logilab.fr>
parents: 11744
diff changeset
   276
    def test_config_value_from_environment_yn(self):
2e1a1ebd4730 [cwconfig] ensure CubicWebNoAppConfiguration returns a typed value (closes #16364459)
David Douard <david.douard@logilab.fr>
parents: 11744
diff changeset
   277
        self.assertEqual(self.config['allow-email-login'], False)
2e1a1ebd4730 [cwconfig] ensure CubicWebNoAppConfiguration returns a typed value (closes #16364459)
David Douard <david.douard@logilab.fr>
parents: 11744
diff changeset
   278
        try:
2e1a1ebd4730 [cwconfig] ensure CubicWebNoAppConfiguration returns a typed value (closes #16364459)
David Douard <david.douard@logilab.fr>
parents: 11744
diff changeset
   279
            for val, result in (('yes', True), ('no', False),
2e1a1ebd4730 [cwconfig] ensure CubicWebNoAppConfiguration returns a typed value (closes #16364459)
David Douard <david.douard@logilab.fr>
parents: 11744
diff changeset
   280
                                ('y', True), ('n', False),):
2e1a1ebd4730 [cwconfig] ensure CubicWebNoAppConfiguration returns a typed value (closes #16364459)
David Douard <david.douard@logilab.fr>
parents: 11744
diff changeset
   281
                os.environ['CW_ALLOW_EMAIL_LOGIN'] = val
2e1a1ebd4730 [cwconfig] ensure CubicWebNoAppConfiguration returns a typed value (closes #16364459)
David Douard <david.douard@logilab.fr>
parents: 11744
diff changeset
   282
            self.assertEqual(self.config['allow-email-login'], result)
2e1a1ebd4730 [cwconfig] ensure CubicWebNoAppConfiguration returns a typed value (closes #16364459)
David Douard <david.douard@logilab.fr>
parents: 11744
diff changeset
   283
        finally:
2e1a1ebd4730 [cwconfig] ensure CubicWebNoAppConfiguration returns a typed value (closes #16364459)
David Douard <david.douard@logilab.fr>
parents: 11744
diff changeset
   284
            del os.environ['CW_ALLOW_EMAIL_LOGIN']
12118
d7947c3c0eeb [config] Test loading of ccplugin modules
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12117
diff changeset
   285
d7947c3c0eeb [config] Test loading of ccplugin modules
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12117
diff changeset
   286
    def test_ccplugin_modname(self):
d7947c3c0eeb [config] Test loading of ccplugin modules
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12117
diff changeset
   287
        self.config.load_cwctl_plugins()
d7947c3c0eeb [config] Test loading of ccplugin modules
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12117
diff changeset
   288
        self.assertIn('cubes.mycube.ccplugin', sys.modules, sorted(sys.modules))
d7947c3c0eeb [config] Test loading of ccplugin modules
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12117
diff changeset
   289
        self.assertNotIn('cubicweb_mycube.ccplugin', sys.modules, sorted(sys.modules))
d7947c3c0eeb [config] Test loading of ccplugin modules
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12117
diff changeset
   290
6314
b233cc448bdd [test] add some fake cubes necessary for test so we don't depend on the actual forge cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5426
diff changeset
   291
11448
f79c6894381f [test] Avoid usage of lgc.testlib TestCase in unittest_cwconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11269
diff changeset
   292
class FindPrefixTC(unittest.TestCase):
11744
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   293
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   294
    def make_dirs(self, basedir, *args):
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   295
        path = join(basedir, *args)
5021
58e89f3dfbae handle nicely typical installation other than debian package / mercurial forest
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
   296
        if not os.path.exists(path):
58e89f3dfbae handle nicely typical installation other than debian package / mercurial forest
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
   297
            os.makedirs(path)
58e89f3dfbae handle nicely typical installation other than debian package / mercurial forest
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
   298
        return path
58e89f3dfbae handle nicely typical installation other than debian package / mercurial forest
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
   299
11744
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   300
    def make_file(self, basedir, *args):
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   301
        self.make_dirs(basedir, *args[:-1])
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   302
        file_path = join(basedir, *args)
11743
48d70d143dc1 [test] Use `with open` syntax in cwconfig "prefix" tests
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11710
diff changeset
   303
        with open(file_path, 'w') as f:
48d70d143dc1 [test] Use `with open` syntax in cwconfig "prefix" tests
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11710
diff changeset
   304
            f.write('""" None """')
5021
58e89f3dfbae handle nicely typical installation other than debian package / mercurial forest
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
   305
        return file_path
58e89f3dfbae handle nicely typical installation other than debian package / mercurial forest
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
   306
58e89f3dfbae handle nicely typical installation other than debian package / mercurial forest
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
   307
    def test_samedir(self):
11744
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   308
        with TemporaryDirectory() as prefix:
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   309
            self.make_dirs(prefix, 'share', 'cubicweb')
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   310
            self.assertEqual(_find_prefix(prefix), prefix)
5021
58e89f3dfbae handle nicely typical installation other than debian package / mercurial forest
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
   311
58e89f3dfbae handle nicely typical installation other than debian package / mercurial forest
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
   312
    def test_samedir_filepath(self):
11744
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   313
        with TemporaryDirectory() as prefix:
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   314
            self.make_dirs(prefix, 'share', 'cubicweb')
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   315
            file_path = self.make_file(prefix, 'bob.py')
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   316
            self.assertEqual(_find_prefix(file_path), prefix)
5021
58e89f3dfbae handle nicely typical installation other than debian package / mercurial forest
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
   317
58e89f3dfbae handle nicely typical installation other than debian package / mercurial forest
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
   318
    def test_dir_inside_prefix(self):
11744
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   319
        with TemporaryDirectory() as prefix:
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   320
            self.make_dirs(prefix, 'share', 'cubicweb')
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   321
            dir_path = self.make_dirs(prefix, 'bob')
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   322
            self.assertEqual(_find_prefix(dir_path), prefix)
5021
58e89f3dfbae handle nicely typical installation other than debian package / mercurial forest
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
   323
58e89f3dfbae handle nicely typical installation other than debian package / mercurial forest
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
   324
    def test_file_in_dir_inside_prefix(self):
11744
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   325
        with TemporaryDirectory() as prefix:
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   326
            self.make_dirs(prefix, 'share', 'cubicweb')
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   327
            file_path = self.make_file(prefix, 'bob', 'toto.py')
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   328
            self.assertEqual(_find_prefix(file_path), prefix)
5021
58e89f3dfbae handle nicely typical installation other than debian package / mercurial forest
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
   329
58e89f3dfbae handle nicely typical installation other than debian package / mercurial forest
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
   330
    def test_file_in_deeper_dir_inside_prefix(self):
11744
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   331
        with TemporaryDirectory() as prefix:
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   332
            self.make_dirs(prefix, 'share', 'cubicweb')
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   333
            file_path = self.make_file(prefix, 'bob', 'pyves', 'alain',
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   334
                                       'adim', 'syt', 'toto.py')
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   335
            self.assertEqual(_find_prefix(file_path), prefix)
5021
58e89f3dfbae handle nicely typical installation other than debian package / mercurial forest
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
   336
58e89f3dfbae handle nicely typical installation other than debian package / mercurial forest
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
   337
    def test_multiple_candidate_prefix(self):
11744
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   338
        with TemporaryDirectory() as tempdir:
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   339
            self.make_dirs(tempdir, 'share', 'cubicweb')
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   340
            prefix = self.make_dirs(tempdir, 'bob')
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   341
            self.make_dirs(prefix, 'share', 'cubicweb')
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   342
            file_path = self.make_file(prefix, 'pyves', 'alain',
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   343
                                       'adim', 'syt', 'toto.py')
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   344
            self.assertEqual(_find_prefix(file_path), prefix)
5021
58e89f3dfbae handle nicely typical installation other than debian package / mercurial forest
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
   345
58e89f3dfbae handle nicely typical installation other than debian package / mercurial forest
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
   346
    def test_sister_candidate_prefix(self):
11744
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   347
        with TemporaryDirectory() as prefix:
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   348
            self.make_dirs(prefix, 'share', 'cubicweb')
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   349
            self.make_dirs(prefix, 'bob', 'share', 'cubicweb')
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   350
            file_path = self.make_file(prefix, 'bell', 'toto.py')
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   351
            self.assertEqual(_find_prefix(file_path), prefix)
5021
58e89f3dfbae handle nicely typical installation other than debian package / mercurial forest
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
   352
58e89f3dfbae handle nicely typical installation other than debian package / mercurial forest
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
   353
    def test_multiple_parent_candidate_prefix(self):
11744
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   354
        with TemporaryDirectory() as tempdir:
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   355
            self.make_dirs(tempdir, 'share', 'cubicweb')
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   356
            prefix = self.make_dirs(tempdir, 'share', 'cubicweb', 'bob')
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   357
            self.make_dirs(tempdir, 'share', 'cubicweb', 'bob', 'share',
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   358
                           'cubicweb')
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   359
            file_path = self.make_file(tempdir, 'share', 'cubicweb', 'bob',
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   360
                                       'pyves', 'alain', 'adim', 'syt',
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   361
                                       'toto.py')
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   362
            self.assertEqual(_find_prefix(file_path), prefix)
5021
58e89f3dfbae handle nicely typical installation other than debian package / mercurial forest
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
   363
58e89f3dfbae handle nicely typical installation other than debian package / mercurial forest
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
   364
    def test_upper_candidate_prefix(self):
11744
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   365
        with TemporaryDirectory() as prefix:
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   366
            self.make_dirs(prefix, 'share', 'cubicweb')
12119
c4ed3f6463f6 Fix flake8 errors in unittest_cwconfig
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12118
diff changeset
   367
            self.make_dirs(prefix, 'bell', 'bob', 'share', 'cubicweb')
11744
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   368
            file_path = self.make_file(prefix, 'bell', 'toto.py')
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   369
            self.assertEqual(_find_prefix(file_path), prefix)
5021
58e89f3dfbae handle nicely typical installation other than debian package / mercurial forest
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
   370
58e89f3dfbae handle nicely typical installation other than debian package / mercurial forest
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4691
diff changeset
   371
    def test_no_prefix(self):
11744
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   372
        with TemporaryDirectory() as prefix:
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   373
            self.assertEqual(_find_prefix(prefix), sys.prefix)
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1341
diff changeset
   374
11072
8c3155a0ae5b Handle virtualenv development mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
   375
    def test_virtualenv(self):
8c3155a0ae5b Handle virtualenv development mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
   376
        venv = os.environ.get('VIRTUAL_ENV')
8c3155a0ae5b Handle virtualenv development mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
   377
        try:
11744
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   378
            with TemporaryDirectory() as prefix:
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   379
                os.environ['VIRTUAL_ENV'] = prefix
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   380
                self.make_dirs(prefix, 'share', 'cubicweb')
a6dc650bc230 [test] Replace logilab-common's with_tempdir by tempfile.TemporaryDirectory
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11743
diff changeset
   381
                self.assertEqual(_find_prefix(), prefix)
11072
8c3155a0ae5b Handle virtualenv development mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
   382
        finally:
8c3155a0ae5b Handle virtualenv development mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
   383
            if venv:
8c3155a0ae5b Handle virtualenv development mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
   384
                os.environ['VIRTUAL_ENV'] = venv
8c3155a0ae5b Handle virtualenv development mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
   385
8c3155a0ae5b Handle virtualenv development mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
   386
11899
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   387
class ModnamesTC(unittest.TestCase):
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   388
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   389
    @templibdir
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   390
    def test_expand_modnames(self, libdir):
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   391
        tempdir = join(libdir, 'lib')
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   392
        filepaths = [
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   393
            join(tempdir, '__init__.py'),
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   394
            join(tempdir, 'a.py'),
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   395
            join(tempdir, 'b.py'),
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   396
            join(tempdir, 'c.py'),
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   397
            join(tempdir, 'b', '__init__.py'),
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   398
            join(tempdir, 'b', 'a.py'),
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   399
            join(tempdir, 'b', 'c.py'),
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   400
            join(tempdir, 'b', 'd', '__init__.py'),
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   401
            join(tempdir, 'e', 'e.py'),
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   402
        ]
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   403
        for filepath in filepaths:
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   404
            create_filepath(filepath)
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   405
        # not importable
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   406
        self.assertEqual(list(_expand_modname('isnotimportable')), [])
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   407
        # not a python package
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   408
        self.assertEqual(list(_expand_modname('lib.e')), [])
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   409
        self.assertEqual(list(_expand_modname('lib.a')), [
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   410
            ('lib.a', join(tempdir, 'a.py')),
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   411
        ])
12165
127f7da447a4 [cwconfig] load appobjects subpackages recursively
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12119
diff changeset
   412
        # lib.b.d should be imported
11899
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   413
        self.assertEqual(list(_expand_modname('lib.b')), [
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   414
            ('lib.b', join(tempdir, 'b', '__init__.py')),
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   415
            ('lib.b.a', join(tempdir, 'b', 'a.py')),
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   416
            ('lib.b.c', join(tempdir, 'b', 'c.py')),
12165
127f7da447a4 [cwconfig] load appobjects subpackages recursively
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12119
diff changeset
   417
            ('lib.b.d', join(tempdir, 'b', 'd', '__init__.py')),
127f7da447a4 [cwconfig] load appobjects subpackages recursively
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12119
diff changeset
   418
        ])
127f7da447a4 [cwconfig] load appobjects subpackages recursively
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12119
diff changeset
   419
        # lib.b.d should not be imported without recursive mode
127f7da447a4 [cwconfig] load appobjects subpackages recursively
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12119
diff changeset
   420
        self.assertEqual(list(_expand_modname('lib.b', recursive=False)), [
127f7da447a4 [cwconfig] load appobjects subpackages recursively
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12119
diff changeset
   421
            ('lib.b', join(tempdir, 'b', '__init__.py')),
127f7da447a4 [cwconfig] load appobjects subpackages recursively
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12119
diff changeset
   422
            ('lib.b.a', join(tempdir, 'b', 'a.py')),
127f7da447a4 [cwconfig] load appobjects subpackages recursively
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12119
diff changeset
   423
            ('lib.b.c', join(tempdir, 'b', 'c.py')),
11899
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   424
        ])
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   425
        self.assertEqual(list(_expand_modname('lib')), [
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   426
            ('lib', join(tempdir, '__init__.py')),
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   427
            ('lib.a', join(tempdir, 'a.py')),
12165
127f7da447a4 [cwconfig] load appobjects subpackages recursively
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12119
diff changeset
   428
            ('lib.b', join(tempdir, 'b', '__init__.py')),
127f7da447a4 [cwconfig] load appobjects subpackages recursively
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12119
diff changeset
   429
            ('lib.b.a', join(tempdir, 'b', 'a.py')),
127f7da447a4 [cwconfig] load appobjects subpackages recursively
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12119
diff changeset
   430
            ('lib.b.c', join(tempdir, 'b', 'c.py')),
127f7da447a4 [cwconfig] load appobjects subpackages recursively
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12119
diff changeset
   431
            ('lib.b.d', join(tempdir, 'b', 'd', '__init__.py')),
11899
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   432
            ('lib.c', join(tempdir, 'c.py')),
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   433
        ])
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   434
        for source in (
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   435
            join(tempdir, 'c.py'),
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   436
            join(tempdir, 'b', 'c.py'),
12165
127f7da447a4 [cwconfig] load appobjects subpackages recursively
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12119
diff changeset
   437
            join(tempdir, 'b', 'd', '__init__.py'),
11899
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   438
        ):
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   439
            if not PY3:
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   440
                # ensure pyc file exists.
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   441
                # Doesn't required for PY3 since it create __pycache__
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   442
                # directory and will not import if source file doesn't
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   443
                # exists.
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   444
                compileall.compile_file(source, force=True)
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   445
                self.assertTrue(os.path.exists(source + 'c'))
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   446
            # remove source file
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   447
            os.remove(source)
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   448
        self.assertEqual(list(_expand_modname('lib.c')), [])
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   449
        self.assertEqual(list(_expand_modname('lib.b')), [
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   450
            ('lib.b', join(tempdir, 'b', '__init__.py')),
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   451
            ('lib.b.a', join(tempdir, 'b', 'a.py')),
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   452
        ])
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   453
        self.assertEqual(list(_expand_modname('lib')), [
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   454
            ('lib', join(tempdir, '__init__.py')),
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   455
            ('lib.a', join(tempdir, 'a.py')),
12165
127f7da447a4 [cwconfig] load appobjects subpackages recursively
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12119
diff changeset
   456
            ('lib.b', join(tempdir, 'b', '__init__.py')),
127f7da447a4 [cwconfig] load appobjects subpackages recursively
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12119
diff changeset
   457
            ('lib.b.a', join(tempdir, 'b', 'a.py')),
11899
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   458
        ])
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   459
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   460
    @templibdir
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   461
    def test_schema_modnames(self, libdir):
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   462
        for filepath in (
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   463
            join(libdir, 'schema.py'),
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   464
            join(libdir, 'cubicweb_foo', '__init__.py'),
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   465
            join(libdir, 'cubicweb_foo', 'schema', '__init__.py'),
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   466
            join(libdir, 'cubicweb_foo', 'schema', 'a.py'),
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   467
            join(libdir, 'cubicweb_foo', 'schema', 'b.py'),
12165
127f7da447a4 [cwconfig] load appobjects subpackages recursively
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12119
diff changeset
   468
            # subpackages should not be loaded
127f7da447a4 [cwconfig] load appobjects subpackages recursively
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12119
diff changeset
   469
            join(libdir, 'cubicweb_foo', 'schema', 'c', '__init__.py'),
11899
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   470
            join(libdir, 'cubes', '__init__.py'),
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   471
            join(libdir, 'cubes', 'bar', '__init__.py'),
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   472
            join(libdir, 'cubes', 'bar', 'schema.py'),
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   473
            join(libdir, '_instance_dir', 'data1', 'schema.py'),
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   474
            join(libdir, '_instance_dir', 'data2', 'noschema.py'),
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   475
        ):
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   476
            create_filepath(filepath)
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   477
        expected = [
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   478
            ('cubicweb', 'cubicweb.schemas.bootstrap'),
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   479
            ('cubicweb', 'cubicweb.schemas.base'),
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   480
            ('cubicweb', 'cubicweb.schemas.workflow'),
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   481
            ('cubicweb', 'cubicweb.schemas.Bookmark'),
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   482
            ('bar', 'cubes.bar.schema'),
12078
82d2c1cdf0c2 [cwconfig] don't rely on _CubeImporter while loading cubes
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11966
diff changeset
   483
            ('foo', 'cubicweb_foo.schema'),
82d2c1cdf0c2 [cwconfig] don't rely on _CubeImporter while loading cubes
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11966
diff changeset
   484
            ('foo', 'cubicweb_foo.schema.a'),
82d2c1cdf0c2 [cwconfig] don't rely on _CubeImporter while loading cubes
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11966
diff changeset
   485
            ('foo', 'cubicweb_foo.schema.b'),
11899
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   486
        ]
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   487
        # app has schema file
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   488
        instance_dir, cubes_dir = (
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   489
            join(libdir, '_instance_dir'), join(libdir, 'cubes'))
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   490
        with temp_config('data1', instance_dir, cubes_dir,
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   491
                         ('foo', 'bar')) as config:
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   492
            self.assertEqual(pkgutil.find_loader('schema').get_filename(),
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   493
                             join(libdir, '_instance_dir',
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   494
                                  'data1', 'schema.py'))
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   495
            self.assertEqual(config.schema_modnames(),
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   496
                             expected + [('data', 'schema')])
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   497
        # app doesn't have schema file
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   498
        with temp_config('data2', instance_dir, cubes_dir,
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   499
                         ('foo', 'bar')) as config:
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   500
            self.assertEqual(pkgutil.find_loader('schema').get_filename(),
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   501
                             join(libdir, 'schema.py'))
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   502
            self.assertEqual(config.schema_modnames(), expected)
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   503
11900
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   504
    @templibdir
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   505
    def test_appobjects_modnames(self, libdir):
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   506
        for filepath in (
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   507
            join(libdir, 'entities.py'),
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   508
            join(libdir, 'cubicweb_foo', '__init__.py'),
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   509
            join(libdir, 'cubicweb_foo', 'entities', '__init__.py'),
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   510
            join(libdir, 'cubicweb_foo', 'entities', 'a.py'),
12165
127f7da447a4 [cwconfig] load appobjects subpackages recursively
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12119
diff changeset
   511
            # subpackages should be loaded recursively
127f7da447a4 [cwconfig] load appobjects subpackages recursively
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12119
diff changeset
   512
            join(libdir, 'cubicweb_foo', 'entities', 'b', '__init__.py'),
127f7da447a4 [cwconfig] load appobjects subpackages recursively
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12119
diff changeset
   513
            join(libdir, 'cubicweb_foo', 'entities', 'b', 'a.py'),
127f7da447a4 [cwconfig] load appobjects subpackages recursively
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12119
diff changeset
   514
            join(libdir, 'cubicweb_foo', 'entities', 'b', 'c', '__init__.py'),
11900
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   515
            join(libdir, 'cubicweb_foo', 'hooks.py'),
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   516
            join(libdir, 'cubes', '__init__.py'),
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   517
            join(libdir, 'cubes', 'bar', '__init__.py'),
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   518
            join(libdir, 'cubes', 'bar', 'hooks.py'),
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   519
            join(libdir, '_instance_dir', 'data1', 'entities.py'),
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   520
            join(libdir, '_instance_dir', 'data2', 'hooks.py'),
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   521
        ):
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   522
            create_filepath(filepath)
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   523
        instance_dir, cubes_dir = (
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   524
            join(libdir, '_instance_dir'), join(libdir, 'cubes'))
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   525
        expected = [
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   526
            'cubicweb.entities',
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   527
            'cubicweb.entities.adapters',
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   528
            'cubicweb.entities.authobjs',
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   529
            'cubicweb.entities.lib',
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   530
            'cubicweb.entities.schemaobjs',
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   531
            'cubicweb.entities.sources',
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   532
            'cubicweb.entities.wfobjs',
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   533
            'cubes.bar.hooks',
12078
82d2c1cdf0c2 [cwconfig] don't rely on _CubeImporter while loading cubes
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11966
diff changeset
   534
            'cubicweb_foo.entities',
82d2c1cdf0c2 [cwconfig] don't rely on _CubeImporter while loading cubes
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11966
diff changeset
   535
            'cubicweb_foo.entities.a',
12165
127f7da447a4 [cwconfig] load appobjects subpackages recursively
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12119
diff changeset
   536
            'cubicweb_foo.entities.b',
127f7da447a4 [cwconfig] load appobjects subpackages recursively
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12119
diff changeset
   537
            'cubicweb_foo.entities.b.a',
127f7da447a4 [cwconfig] load appobjects subpackages recursively
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12119
diff changeset
   538
            'cubicweb_foo.entities.b.c',
12078
82d2c1cdf0c2 [cwconfig] don't rely on _CubeImporter while loading cubes
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11966
diff changeset
   539
            'cubicweb_foo.hooks',
11900
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   540
        ]
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   541
        # data1 has entities
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   542
        with temp_config('data1', instance_dir, cubes_dir,
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   543
                         ('foo', 'bar')) as config:
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   544
            config.cube_appobject_path = set(['entities', 'hooks'])
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   545
            self.assertEqual(config.appobjects_modnames(),
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   546
                             expected + ['entities'])
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   547
        # data2 has hooks
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   548
        with temp_config('data2', instance_dir, cubes_dir,
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   549
                         ('foo', 'bar')) as config:
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   550
            config.cube_appobject_path = set(['entities', 'hooks'])
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   551
            self.assertEqual(config.appobjects_modnames(),
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11899
diff changeset
   552
                             expected + ['hooks'])
11899
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   553
bf6106b91633 [schema] load schema from modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11744
diff changeset
   554
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   555
if __name__ == '__main__':
11448
f79c6894381f [test] Avoid usage of lgc.testlib TestCase in unittest_cwconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11269
diff changeset
   556
    unittest.main()