cubicweb/test/unittest_schema.py
author Philippe Pepiot <ph@itsalwaysdns.eu>
Tue, 31 Mar 2020 19:15:03 +0200
changeset 12957 0c973204033a
parent 12597 7882ad333954
permissions -rw-r--r--
[server] prevent returning closed cursor to the database pool In since c8c6ad8 init_repository use repo.internal_cnx() instead of repo.system_source.get_connection() so it use the pool and we should not close cursors from the pool before returning it back. Otherwise we may have "connection already closed" error. This bug only trigger when connection-pool-size = 1. Since we are moving to use a dynamic pooler we need to get this fixed. This does not occur with sqlite since the connection wrapper instantiate new cursor everytime, but this occur with other databases.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
     1
# copyright 2003-2016 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: 5179
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: 5179
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: 5179
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: 5179
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: 5179
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: 5179
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: 5179
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: 5179
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: 5179
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: 5179
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: 5179
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: 5179
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: 5179
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: 5179
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: 5179
diff changeset
    17
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
6117
f3fdfcbda54b cleanup
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5563
diff changeset
    18
"""unit tests for module cubicweb.schema"""
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    19
11916
f0bc9ca93e21 [test] avoid using a deprecated feature of yams
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11911
diff changeset
    20
from os.path import join, dirname, splitext
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    21
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    22
from logilab.common.testlib import TestCase, unittest_main
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    23
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    24
from rql import RQLSyntaxError
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    25
7640
85ebdbbcb321 [schema] closes #1816439: RQLConstraint does not take variable U into account
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7603
diff changeset
    26
from yams import ValidationError, BadSchemaDefinition
9952
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
    27
from yams.buildobjs import (RelationDefinition, EntityType, RelationType,
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
    28
                            Int, String, ComputedRelation)
7469
f8c983afbf8e [test] update cubicweb/test/unittest_schema.py (to follow yams#.....)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 7460
diff changeset
    29
from yams.reader import fill_schema
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    30
11768
b8b71dd09a2c [test] Avoid pytest discovery warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11681
diff changeset
    31
from cubicweb import devtools
3978
2c95e3033f64 finish yesterday work on rql constraints:
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3899
diff changeset
    32
from cubicweb.schema import (
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
    33
    CubicWebSchema, CubicWebSchemaLoader,
3978
2c95e3033f64 finish yesterday work on rql constraints:
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3899
diff changeset
    34
    RQLConstraint, RQLUniqueConstraint, RQLVocabularyConstraint,
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
    35
    ERQLExpression, RRQLExpression,
9952
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
    36
    normalize_expression, order_eschemas, guess_rrqlexpr_mainvars,
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
    37
    build_schema_from_namespace)
7640
85ebdbbcb321 [schema] closes #1816439: RQLConstraint does not take variable U into account
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7603
diff changeset
    38
from cubicweb.devtools.testlib import CubicWebTC
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    39
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    40
DATADIR = join(dirname(__file__), 'data')
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    41
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    42
# build a dummy schema ########################################################
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    43
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    44
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
    45
PERSONNE_PERMISSIONS = {
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
    46
    'read': ('managers', 'users', 'guests'),
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    47
    'update': ('managers', 'owners'),
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
    48
    'add': ('managers', ERQLExpression('X travaille S, S owned_by U')),
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    49
    'delete': ('managers', 'owners',),
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
    50
}
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    51
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    52
CONCERNE_PERMISSIONS = {
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
    53
    'read': ('managers', 'users', 'guests'),
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
    54
    'add': ('managers', RRQLExpression('U has_update_permission S')),
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    55
    'delete': ('managers', RRQLExpression('O owned_by U')),
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
    56
}
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    57
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    58
schema = CubicWebSchema('Test Schema')
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    59
enote = schema.add_entity_type(EntityType('Note'))
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    60
eaffaire = schema.add_entity_type(EntityType('Affaire'))
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
    61
eperson = schema.add_entity_type(EntityType('Personne', __permissions__=PERSONNE_PERMISSIONS))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    62
esociete = schema.add_entity_type(EntityType('Societe'))
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    63
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    64
RELS = (
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    65
    # attribute relations
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    66
    ('Note date String'),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    67
    ('Note type String'),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    68
    ('Affaire sujet String'),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    69
    ('Affaire ref String'),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    70
    ('Personne nom String'),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    71
    ('Personne prenom String'),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    72
    ('Personne sexe String'),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    73
    ('Personne tel Int'),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    74
    ('Personne fax Int'),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    75
    ('Personne datenaiss Date'),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    76
    ('Personne promo String'),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    77
    # real relations
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    78
    ('Personne  travaille Societe'),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    79
    ('Personne  evaluee   Note'),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    80
    ('Societe evaluee   Note'),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    81
    ('Personne  concerne  Affaire'),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    82
    ('Personne  concerne  Societe'),
6861
9d4e11d6e783 [schema] ease understanding of schema naming error
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6796
diff changeset
    83
    ('Affaire concerne  Societe'),
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
    84
)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    85
done = {}
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    86
for rel in RELS:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    87
    _from, _type, _to = rel.split()
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    88
    if not _type.lower() in done:
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
    89
        schema.add_relation_type(RelationType(_type))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    90
        done[_type.lower()] = True
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
    91
    if _type == 'concerne':
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
    92
        schema.add_relation_def(RelationDefinition(_from, _type, _to,
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
    93
                                                   __permissions__=CONCERNE_PERMISSIONS))
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
    94
    else:
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
    95
        schema.add_relation_def(RelationDefinition(_from, _type, _to))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    96
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
    97
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    98
class CubicWebSchemaTC(TestCase):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    99
3978
2c95e3033f64 finish yesterday work on rql constraints:
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3899
diff changeset
   100
    def test_rql_constraints_inheritance(self):
2c95e3033f64 finish yesterday work on rql constraints:
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3899
diff changeset
   101
        # isinstance(cstr, RQLVocabularyConstraint)
2c95e3033f64 finish yesterday work on rql constraints:
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3899
diff changeset
   102
        # -> expected to return RQLVocabularyConstraint and RQLConstraint
2c95e3033f64 finish yesterday work on rql constraints:
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3899
diff changeset
   103
        #   instances but not RQLUniqueConstraint
2c95e3033f64 finish yesterday work on rql constraints:
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3899
diff changeset
   104
        #
2c95e3033f64 finish yesterday work on rql constraints:
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3899
diff changeset
   105
        # isinstance(cstr, RQLConstraint)
2c95e3033f64 finish yesterday work on rql constraints:
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3899
diff changeset
   106
        # -> expected to return RQLConstraint instances but not
10833
f585add0fed9 [schema] Let RQLConstraint inherit from BaseRQLConstraint instead of RQLVocabularyConstraint
Denis Laxalde <denis.laxalde@logilab.fr>, Rémi Cardona <remi.cardona@logilab.fr>
parents: 10710
diff changeset
   107
        #    RQLVocabularyConstraint and RQLUniqueConstraint
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7642
diff changeset
   108
        self.assertFalse(issubclass(RQLUniqueConstraint, RQLVocabularyConstraint))
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7642
diff changeset
   109
        self.assertFalse(issubclass(RQLUniqueConstraint, RQLConstraint))
3978
2c95e3033f64 finish yesterday work on rql constraints:
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3899
diff changeset
   110
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   111
    def test_entity_perms(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   112
        self.assertEqual(eperson.get_groups('read'), set(('managers', 'users', 'guests')))
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   113
        self.assertEqual(eperson.get_groups('update'), set(('managers', 'owners',)))
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   114
        self.assertEqual(eperson.get_groups('delete'), set(('managers', 'owners')))
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   115
        self.assertEqual(eperson.get_groups('add'), set(('managers',)))
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   116
        self.assertEqual([str(e) for e in eperson.get_rqlexprs('add')],
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   117
                         ['Any X WHERE X travaille S, S owned_by U, X eid %(x)s, U eid %(u)s'])
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
   118
        eperson.set_action_permissions('read', ('managers',))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   119
        self.assertEqual(eperson.get_groups('read'), set(('managers',)))
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
   120
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   121
    def test_relation_perms(self):
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
   122
        rconcerne = schema.rschema('concerne').rdef('Personne', 'Societe')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   123
        self.assertEqual(rconcerne.get_groups('read'), set(('managers', 'users', 'guests')))
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   124
        self.assertEqual(rconcerne.get_groups('delete'), set(('managers',)))
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   125
        self.assertEqual(rconcerne.get_groups('add'), set(('managers', )))
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
   126
        rconcerne.set_action_permissions('read', ('managers',))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   127
        self.assertEqual(rconcerne.get_groups('read'), set(('managers',)))
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   128
        self.assertEqual([str(e) for e in rconcerne.get_rqlexprs('add')],
3899
78a2c8e7eef5 test update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
   129
                         ['Any S,U WHERE U has_update_permission S, S eid %(s)s, U eid %(u)s'])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   130
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   131
    def test_erqlexpression(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   132
        self.assertRaises(RQLSyntaxError, ERQLExpression, '1')
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   133
        expr = ERQLExpression('X travaille S, S owned_by U')
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   134
        self.assertEqual(
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   135
            str(expr),
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   136
            'Any X WHERE X travaille S, S owned_by U, X eid %(x)s, U eid %(u)s')
9280
bae0caa8477a [schema] edit syntax tree instead of playing with strings for RQLExpressions
Julien Cristau <julien.cristau@logilab.fr>
parents: 9214
diff changeset
   137
        expr = ERQLExpression('X foo S, S bar U, X baz XE, S quux SE HAVING XE > SE')
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   138
        self.assertEqual(
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   139
            str(expr),
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   140
            'Any X WHERE X foo S, S bar U, X baz XE, S quux SE, X eid %(x)s, '
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   141
            'U eid %(u)s HAVING XE > SE')
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
   142
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   143
    def test_rrqlexpression(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   144
        self.assertRaises(Exception, RRQLExpression, '1')
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   145
        self.assertRaises(RQLSyntaxError, RRQLExpression, 'O X Y')
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   146
        expr = RRQLExpression('U has_update_permission O')
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   147
        self.assertEqual(
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   148
            str(expr),
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   149
            'Any O,U WHERE U has_update_permission O, O eid %(o)s, U eid %(u)s')
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   150
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
   151
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   152
loader = CubicWebSchemaLoader()
11768
b8b71dd09a2c [test] Avoid pytest discovery warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11681
diff changeset
   153
config = devtools.TestServerConfiguration('data', __file__)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   154
config.bootstrap_cubes()
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
   155
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   156
2926
4484387ed012 when adding/removing cubes, we should add/remove entity types in correct order if one inherits from another
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2730
diff changeset
   157
class SchemaReaderClassTest(TestCase):
4484387ed012 when adding/removing cubes, we should add/remove entity types in correct order if one inherits from another
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2730
diff changeset
   158
4484387ed012 when adding/removing cubes, we should add/remove entity types in correct order if one inherits from another
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2730
diff changeset
   159
    def test_order_eschemas(self):
4484387ed012 when adding/removing cubes, we should add/remove entity types in correct order if one inherits from another
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2730
diff changeset
   160
        schema = loader.load(config)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6306
diff changeset
   161
        self.assertEqual(order_eschemas([schema['Note'], schema['SubNote']]),
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   162
                         [schema['Note'], schema['SubNote']])
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6306
diff changeset
   163
        self.assertEqual(order_eschemas([schema['SubNote'], schema['Note']]),
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   164
                         [schema['Note'], schema['SubNote']])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   165
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   166
    def test_knownValues_load_schema(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   167
        schema = loader.load(config)
10600
180aa08cad48 [tests] Replace use of deprecated TestCase.assert_
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10554
diff changeset
   168
        self.assertIsInstance(schema, CubicWebSchema)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6306
diff changeset
   169
        self.assertEqual(schema.name, 'data')
6415
b0b0f097a72d cleanups
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
   170
        entities = sorted([str(e) for e in schema.entities()])
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   171
        expected_entities = [
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   172
            'Ami', 'BaseTransition', 'BigInt', 'Bookmark', 'Boolean', 'Bytes', 'Card',
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   173
            'Date', 'Datetime', 'Decimal',
12539
10159a3d1d72 Drop deprecated CWCache entity type
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11916
diff changeset
   174
            'CWComputedRType', 'CWConstraint',
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   175
            'CWConstraintType', 'CWDataImport', 'CWEType',
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   176
            'CWAttribute', 'CWGroup', 'EmailAddress',
11681
b23d58050076 Merge cubicweb-pyramid cube
Yann Voté <yann.vote@logilab.fr>
parents: 11348
diff changeset
   177
            'CWRelation', 'CWPermission', 'CWProperty', 'CWRType', 'CWSession',
11775
39cf9e55ada8 [source] Drop source mapping handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11768
diff changeset
   178
            'CWSource', 'CWSourceHostConfig',
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   179
            'CWUniqueTogetherConstraint', 'CWUser',
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   180
            'ExternalUri', 'FakeFile', 'Float', 'Int', 'Interval', 'Note',
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   181
            'Password', 'Personne', 'Produit',
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   182
            'RQLExpression', 'Reference',
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   183
            'Service', 'Societe', 'State', 'StateFull', 'String', 'SubNote', 'SubWorkflowExitPoint',
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   184
            'Tag', 'TZDatetime', 'TZTime', 'Time', 'Transition', 'TrInfo',
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   185
            'Usine',
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   186
            'Workflow', 'WorkflowTransition',
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   187
        ]
6944
0cf10429ad39 [sources] rewrite the way pyrorql mapping are stored in the database so it can be reused for other sources (eg datafeed+cwxml)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6910
diff changeset
   188
        self.assertListEqual(sorted(expected_entities), entities)
6415
b0b0f097a72d cleanups
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
   189
        relations = sorted([str(r) for r in schema.relations()])
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   190
        expected_relations = [
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   191
            'actionnaire', 'add_permission', 'address', 'alias', 'allowed_transition', 'associe',
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   192
            'bookmarked_by', 'by_transition', 'buddies',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   193
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   194
            'cardinality', 'comment', 'comment_format',
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   195
            'composite', 'condition', 'config', 'connait',
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   196
            'constrained_by', 'constraint_of',
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   197
            'content', 'content_format', 'contrat_exclusif',
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   198
            'created_by', 'creation_date', 'cstrtype', 'custom_workflow',
11775
39cf9e55ada8 [source] Drop source mapping handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11768
diff changeset
   199
            'cwuri', 'cwsessiondata', 'cw_import_of', 'cw_host_config_of', 'cw_source',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   200
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   201
            'data', 'data_encoding', 'data_format', 'data_name', 'default_workflow', 'defaultval',
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   202
            'delete_permission', 'description', 'description_format', 'destination_state',
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   203
            'dirige',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   204
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   205
            'ean', 'ecrit_par', 'eid', 'end_timestamp', 'evaluee', 'expression', 'exprtype',
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   206
            'extra_props',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   207
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   208
            'fabrique_par', 'final', 'firstname', 'for_user', 'formula', 'fournit',
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   209
            'from_entity', 'from_state', 'fulltext_container', 'fulltextindexed',
8005
a3e06bed6b18 fix broken tests (at least by #1800002)
Florent Cayré <florent.cayre@gmail.com>
parents: 7995
diff changeset
   210
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   211
            'has_group_permission', 'has_text',
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   212
            'identity', 'in_group', 'in_state', 'in_synchronization', 'indexed',
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   213
            'initial_state', 'inlined', 'internationalizable', 'is', 'is_instance_of',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   214
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   215
            'label', 'last_login_time', 'latest_retrieval', 'lieu', 'log', 'login',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   216
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   217
            'mainvars', 'match_host', 'modification_date',
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   218
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   219
            'name', 'nom',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   220
11775
39cf9e55ada8 [source] Drop source mapping handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11768
diff changeset
   221
            'ordernum', 'owned_by',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   222
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   223
            'parser', 'path', 'pkey', 'prefered_form', 'prenom', 'primary_email',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   224
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   225
            'read_permission', 'relation_type', 'relations', 'require_group', 'rule',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   226
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   227
            'specializes', 'start_timestamp', 'state_of', 'status', 'subworkflow',
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   228
            'subworkflow_exit', 'subworkflow_state', 'surname', 'symmetric', 'synopsis',
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
   229
12539
10159a3d1d72 Drop deprecated CWCache entity type
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11916
diff changeset
   230
            'tags', 'title', 'to_entity', 'to_state', 'transition_of', 'travaille',
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   231
            'type',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   232
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   233
            'upassword', 'update_permission', 'url', 'uri', 'use_email',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   234
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   235
            'value',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   236
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   237
            'wf_info_for', 'wikiid', 'workflow_of', 'tr_count',
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   238
        ]
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
   239
6944
0cf10429ad39 [sources] rewrite the way pyrorql mapping are stored in the database so it can be reused for other sources (eg datafeed+cwxml)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6910
diff changeset
   240
        self.assertListEqual(sorted(expected_relations), relations)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   241
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 985
diff changeset
   242
        eschema = schema.eschema('CWUser')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   243
        rels = sorted(str(r) for r in eschema.subject_relations())
11261
9e926f2dc84d [entity] Exclude computed relations from Entity.copy_relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 10833
diff changeset
   244
        self.assertListEqual(rels, ['buddies', 'created_by', 'creation_date', 'custom_workflow',
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6415
diff changeset
   245
                                    'cw_source', 'cwuri', 'eid',
7795
b8027b317d1c [test] fix some tests broken since localperms cube extraction
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   246
                                    'evaluee', 'firstname', 'has_group_permission',
b8027b317d1c [test] fix some tests broken since localperms cube extraction
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   247
                                    'has_text', 'identity',
b8027b317d1c [test] fix some tests broken since localperms cube extraction
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   248
                                    'in_group', 'in_state', 'is',
b8027b317d1c [test] fix some tests broken since localperms cube extraction
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   249
                                    'is_instance_of', 'last_login_time',
b8027b317d1c [test] fix some tests broken since localperms cube extraction
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   250
                                    'login', 'modification_date', 'owned_by',
b8027b317d1c [test] fix some tests broken since localperms cube extraction
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   251
                                    'primary_email', 'surname', 'upassword',
b8027b317d1c [test] fix some tests broken since localperms cube extraction
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   252
                                    'use_email'])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   253
        rels = sorted(r.type for r in eschema.object_relations())
11261
9e926f2dc84d [entity] Exclude computed relations from Entity.copy_relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 10833
diff changeset
   254
        self.assertListEqual(rels, ['bookmarked_by', 'buddies', 'created_by', 'for_user',
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   255
                                    'identity', 'owned_by', 'wf_info_for'])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   256
        rschema = schema.rschema('relation_type')
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
   257
        properties = rschema.rdef('CWAttribute', 'CWRType')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6306
diff changeset
   258
        self.assertEqual(properties.cardinality, '1*')
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
   259
        constraints = properties.constraints
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7642
diff changeset
   260
        self.assertEqual(len(constraints), 1, constraints)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   261
        constraint = constraints[0]
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7642
diff changeset
   262
        self.assertTrue(isinstance(constraint, RQLConstraint))
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7642
diff changeset
   263
        self.assertEqual(constraint.expression, 'O final TRUE')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   264
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   265
    def test_fulltext_container(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   266
        schema = loader.load(config)
9674
96549de9dd70 [test] use assertIn where appropriate
Julien Cristau <julien.cristau@logilab.fr>
parents: 9640
diff changeset
   267
        self.assertIn('has_text', schema['CWUser'].subject_relations())
9675
8aabfefc8a81 [test] use assertNotIn where appropriate
Julien Cristau <julien.cristau@logilab.fr>
parents: 9674
diff changeset
   268
        self.assertNotIn('has_text', schema['EmailAddress'].subject_relations())
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   269
5179
f08943f22334 [schema] #847739: test and fix bad permission on TrInfo.comment
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4611
diff changeset
   270
    def test_permission_settings(self):
f08943f22334 [schema] #847739: test and fix bad permission on TrInfo.comment
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4611
diff changeset
   271
        schema = loader.load(config)
f08943f22334 [schema] #847739: test and fix bad permission on TrInfo.comment
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4611
diff changeset
   272
        aschema = schema['TrInfo'].rdef('comment')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6306
diff changeset
   273
        self.assertEqual(aschema.get_groups('read'),
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   274
                         set(('managers', 'users', 'guests')))
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6306
diff changeset
   275
        self.assertEqual(aschema.get_rqlexprs('read'),
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   276
                         ())
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6306
diff changeset
   277
        self.assertEqual(aschema.get_groups('update'),
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   278
                         set(('managers',)))
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6306
diff changeset
   279
        self.assertEqual([x.expression for x in aschema.get_rqlexprs('update')],
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   280
                         ['U has_update_permission X'])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   281
7440
539de926ec9d [test] fix failure introduced by 1719eab69551: the regexp should be fixed, not the error message
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7426
diff changeset
   282
    def test_nonregr_allowed_type_names(self):
539de926ec9d [test] fix failure introduced by 1719eab69551: the regexp should be fixed, not the error message
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7426
diff changeset
   283
        schema = CubicWebSchema('Test Schema')
539de926ec9d [test] fix failure introduced by 1719eab69551: the regexp should be fixed, not the error message
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7426
diff changeset
   284
        schema.add_entity_type(EntityType('NaN'))
539de926ec9d [test] fix failure introduced by 1719eab69551: the regexp should be fixed, not the error message
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7426
diff changeset
   285
8167
41ec579e27c4 [test] test/demonstrate relation permissions overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8005
diff changeset
   286
    def test_relation_perm_overriding(self):
41ec579e27c4 [test] test/demonstrate relation permissions overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8005
diff changeset
   287
        loader = CubicWebSchemaLoader()
11768
b8b71dd09a2c [test] Avoid pytest discovery warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11681
diff changeset
   288
        config = devtools.TestServerConfiguration('data_schemareader', __file__)
8167
41ec579e27c4 [test] test/demonstrate relation permissions overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8005
diff changeset
   289
        config.bootstrap_cubes()
41ec579e27c4 [test] test/demonstrate relation permissions overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8005
diff changeset
   290
        schema = loader.load(config)
10709
3ada28a113f8 [py3k] dict methods no longer return indexable objects
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10653
diff changeset
   291
        rdef = next(iter(schema['in_group'].rdefs.values()))
3ada28a113f8 [py3k] dict methods no longer return indexable objects
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10653
diff changeset
   292
        self.assertEqual(rdef.permissions,
8167
41ec579e27c4 [test] test/demonstrate relation permissions overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8005
diff changeset
   293
                         {'read': ('managers',),
41ec579e27c4 [test] test/demonstrate relation permissions overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8005
diff changeset
   294
                          'add': ('managers',),
41ec579e27c4 [test] test/demonstrate relation permissions overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8005
diff changeset
   295
                          'delete': ('managers',)})
10709
3ada28a113f8 [py3k] dict methods no longer return indexable objects
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10653
diff changeset
   296
        rdef = next(iter(schema['cw_for_source'].rdefs.values()))
3ada28a113f8 [py3k] dict methods no longer return indexable objects
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10653
diff changeset
   297
        self.assertEqual(rdef.permissions,
8167
41ec579e27c4 [test] test/demonstrate relation permissions overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8005
diff changeset
   298
                         {'read': ('managers', 'users'),
41ec579e27c4 [test] test/demonstrate relation permissions overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8005
diff changeset
   299
                          'add': ('managers',),
41ec579e27c4 [test] test/demonstrate relation permissions overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8005
diff changeset
   300
                          'delete': ('managers',)})
41ec579e27c4 [test] test/demonstrate relation permissions overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8005
diff changeset
   301
9966
6c2d57d1b6de [CWEP002] Add schema finalization checks for computed attributes
Laura Médioni <laura.medioni@logilab.fr>
parents: 9965
diff changeset
   302
    def test_computed_attribute(self):
6c2d57d1b6de [CWEP002] Add schema finalization checks for computed attributes
Laura Médioni <laura.medioni@logilab.fr>
parents: 9965
diff changeset
   303
        """Check schema finalization for computed attributes."""
6c2d57d1b6de [CWEP002] Add schema finalization checks for computed attributes
Laura Médioni <laura.medioni@logilab.fr>
parents: 9965
diff changeset
   304
        class Person(EntityType):
6c2d57d1b6de [CWEP002] Add schema finalization checks for computed attributes
Laura Médioni <laura.medioni@logilab.fr>
parents: 9965
diff changeset
   305
            salary = Int()
6c2d57d1b6de [CWEP002] Add schema finalization checks for computed attributes
Laura Médioni <laura.medioni@logilab.fr>
parents: 9965
diff changeset
   306
6c2d57d1b6de [CWEP002] Add schema finalization checks for computed attributes
Laura Médioni <laura.medioni@logilab.fr>
parents: 9965
diff changeset
   307
        class works_for(RelationDefinition):
6c2d57d1b6de [CWEP002] Add schema finalization checks for computed attributes
Laura Médioni <laura.medioni@logilab.fr>
parents: 9965
diff changeset
   308
            subject = 'Person'
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   309
            object = 'Company'
9966
6c2d57d1b6de [CWEP002] Add schema finalization checks for computed attributes
Laura Médioni <laura.medioni@logilab.fr>
parents: 9965
diff changeset
   310
            cardinality = '?*'
6c2d57d1b6de [CWEP002] Add schema finalization checks for computed attributes
Laura Médioni <laura.medioni@logilab.fr>
parents: 9965
diff changeset
   311
6c2d57d1b6de [CWEP002] Add schema finalization checks for computed attributes
Laura Médioni <laura.medioni@logilab.fr>
parents: 9965
diff changeset
   312
        class Company(EntityType):
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   313
            total_salary = Int(formula='Any SUM(SA) GROUPBY X WHERE P works_for X, P salary SA')
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   314
9966
6c2d57d1b6de [CWEP002] Add schema finalization checks for computed attributes
Laura Médioni <laura.medioni@logilab.fr>
parents: 9965
diff changeset
   315
        good_schema = build_schema_from_namespace(vars().items())
10193
a0a11be5a9cb [schema] set permissions that do not allow edition on computed relation. Closes #4903918
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10192
diff changeset
   316
        rdef = good_schema['Company'].rdef('total_salary')
10192
365e5a0287d6 [computed attribute] ensure attribute's formula apply only to the correct type. Closes #4901163
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9990
diff changeset
   317
        # ensure 'X is Company' is added to the rqlst to avoid ambiguities, see #4901163
10193
a0a11be5a9cb [schema] set permissions that do not allow edition on computed relation. Closes #4903918
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10192
diff changeset
   318
        self.assertEqual(str(rdef.formula_select),
10192
365e5a0287d6 [computed attribute] ensure attribute's formula apply only to the correct type. Closes #4901163
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9990
diff changeset
   319
                         'Any SUM(SA) GROUPBY X WHERE P works_for X, P salary SA, X is Company')
10193
a0a11be5a9cb [schema] set permissions that do not allow edition on computed relation. Closes #4903918
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10192
diff changeset
   320
        # check relation definition permissions
a0a11be5a9cb [schema] set permissions that do not allow edition on computed relation. Closes #4903918
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10192
diff changeset
   321
        self.assertEqual(rdef.permissions,
a0a11be5a9cb [schema] set permissions that do not allow edition on computed relation. Closes #4903918
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10192
diff changeset
   322
                         {'add': (), 'update': (),
a0a11be5a9cb [schema] set permissions that do not allow edition on computed relation. Closes #4903918
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10192
diff changeset
   323
                          'read': ('managers', 'users', 'guests')})
10192
365e5a0287d6 [computed attribute] ensure attribute's formula apply only to the correct type. Closes #4901163
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9990
diff changeset
   324
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   325
        class Company(EntityType):  # noqa
9966
6c2d57d1b6de [CWEP002] Add schema finalization checks for computed attributes
Laura Médioni <laura.medioni@logilab.fr>
parents: 9965
diff changeset
   326
            total_salary = String(formula='Any SUM(SA) GROUPBY X WHERE '
6c2d57d1b6de [CWEP002] Add schema finalization checks for computed attributes
Laura Médioni <laura.medioni@logilab.fr>
parents: 9965
diff changeset
   327
                                          'P works_for X, P salary SA')
6c2d57d1b6de [CWEP002] Add schema finalization checks for computed attributes
Laura Médioni <laura.medioni@logilab.fr>
parents: 9965
diff changeset
   328
6c2d57d1b6de [CWEP002] Add schema finalization checks for computed attributes
Laura Médioni <laura.medioni@logilab.fr>
parents: 9965
diff changeset
   329
        with self.assertRaises(BadSchemaDefinition) as exc:
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   330
            build_schema_from_namespace(vars().items())
9966
6c2d57d1b6de [CWEP002] Add schema finalization checks for computed attributes
Laura Médioni <laura.medioni@logilab.fr>
parents: 9965
diff changeset
   331
6c2d57d1b6de [CWEP002] Add schema finalization checks for computed attributes
Laura Médioni <laura.medioni@logilab.fr>
parents: 9965
diff changeset
   332
        self.assertEqual(str(exc.exception),
6c2d57d1b6de [CWEP002] Add schema finalization checks for computed attributes
Laura Médioni <laura.medioni@logilab.fr>
parents: 9965
diff changeset
   333
                         'computed attribute total_salary on Company: '
6c2d57d1b6de [CWEP002] Add schema finalization checks for computed attributes
Laura Médioni <laura.medioni@logilab.fr>
parents: 9965
diff changeset
   334
                         'computed attribute type (Int) mismatch with '
6c2d57d1b6de [CWEP002] Add schema finalization checks for computed attributes
Laura Médioni <laura.medioni@logilab.fr>
parents: 9965
diff changeset
   335
                         'specified type (String)')
6c2d57d1b6de [CWEP002] Add schema finalization checks for computed attributes
Laura Médioni <laura.medioni@logilab.fr>
parents: 9965
diff changeset
   336
7440
539de926ec9d [test] fix failure introduced by 1719eab69551: the regexp should be fixed, not the error message
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7426
diff changeset
   337
9952
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   338
class SchemaReaderComputedRelationAndAttributesTest(TestCase):
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   339
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   340
    def test_infer_computed_relation(self):
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   341
        class Person(EntityType):
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   342
            name = String()
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   343
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   344
        class Company(EntityType):
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   345
            name = String()
9952
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   346
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   347
        class Service(EntityType):
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   348
            name = String()
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   349
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   350
        class works_for(RelationDefinition):
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   351
            subject = 'Person'
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   352
            object = 'Company'
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   353
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   354
        class produce(RelationDefinition):
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   355
            subject = ('Person', 'Company')
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   356
            object = 'Service'
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   357
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   358
        class achete(RelationDefinition):
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   359
            subject = 'Person'
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   360
            object = 'Service'
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   361
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   362
        class produces_and_buys(ComputedRelation):
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   363
            rule = 'S produce O, S achete O'
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   364
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   365
        class produces_and_buys2(ComputedRelation):
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   366
            rule = 'S works_for SO, SO produce O'
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   367
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   368
        class reproduce(ComputedRelation):
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   369
            rule = 'S produce O'
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   370
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   371
        schema = build_schema_from_namespace(vars().items())
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   372
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   373
        # check object/subject type
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   374
        self.assertEqual([('Person', 'Service')],
10709
3ada28a113f8 [py3k] dict methods no longer return indexable objects
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10653
diff changeset
   375
                         list(schema['produces_and_buys'].rdefs.keys()))
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   376
        self.assertEqual([('Person', 'Service')],
10709
3ada28a113f8 [py3k] dict methods no longer return indexable objects
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10653
diff changeset
   377
                         list(schema['produces_and_buys2'].rdefs.keys()))
10252
3b89cfd010a6 [test] Don't depend on dict iteration ordering
Julien Cristau <julien.cristau@logilab.fr>
parents: 10193
diff changeset
   378
        self.assertCountEqual([('Company', 'Service'), ('Person', 'Service')],
10709
3ada28a113f8 [py3k] dict methods no longer return indexable objects
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10653
diff changeset
   379
                              list(schema['reproduce'].rdefs.keys()))
10193
a0a11be5a9cb [schema] set permissions that do not allow edition on computed relation. Closes #4903918
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10192
diff changeset
   380
        # check relation definitions are marked infered
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   381
        rdef = schema['produces_and_buys'].rdefs[('Person', 'Service')]
10193
a0a11be5a9cb [schema] set permissions that do not allow edition on computed relation. Closes #4903918
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10192
diff changeset
   382
        self.assertTrue(rdef.infered)
a0a11be5a9cb [schema] set permissions that do not allow edition on computed relation. Closes #4903918
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10192
diff changeset
   383
        # and have no add/delete permissions
a0a11be5a9cb [schema] set permissions that do not allow edition on computed relation. Closes #4903918
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10192
diff changeset
   384
        self.assertEqual(rdef.permissions,
a0a11be5a9cb [schema] set permissions that do not allow edition on computed relation. Closes #4903918
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10192
diff changeset
   385
                         {'add': (),
a0a11be5a9cb [schema] set permissions that do not allow edition on computed relation. Closes #4903918
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10192
diff changeset
   386
                          'delete': (),
a0a11be5a9cb [schema] set permissions that do not allow edition on computed relation. Closes #4903918
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10192
diff changeset
   387
                          'read': ('managers', 'users', 'guests')})
9952
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   388
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   389
        class autoname(ComputedRelation):
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   390
            rule = 'S produce X, X name O'
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   391
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   392
        with self.assertRaises(BadSchemaDefinition) as cm:
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   393
            build_schema_from_namespace(vars().items())
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   394
        self.assertEqual(str(cm.exception), 'computed relations cannot be final')
0f3f965b6365 [CWEP002] Add schema finalization checks for computed relations (rules)
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9711
diff changeset
   395
7440
539de926ec9d [test] fix failure introduced by 1719eab69551: the regexp should be fixed, not the error message
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7426
diff changeset
   396
6861
9d4e11d6e783 [schema] ease understanding of schema naming error
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6796
diff changeset
   397
class BadSchemaTC(TestCase):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   398
    def setUp(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   399
        self.loader = CubicWebSchemaLoader()
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   400
        self.loader.defined = {}
951
d4bb69eac55a properly init yams loader
sylvain.thenault@logilab.fr
parents: 13
diff changeset
   401
        self.loader.loaded_files = []
4469
310b5f01c982 need post_build_callbacks attribute with earlier yams version
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4467
diff changeset
   402
        self.loader.post_build_callbacks = []
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   403
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   404
    def _test(self, schemafile, msg):
11916
f0bc9ca93e21 [test] avoid using a deprecated feature of yams
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11911
diff changeset
   405
        self.loader.handle_file(join(DATADIR, schemafile),
f0bc9ca93e21 [test] avoid using a deprecated feature of yams
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11911
diff changeset
   406
                                splitext(schemafile)[0])
7469
f8c983afbf8e [test] update cubicweb/test/unittest_schema.py (to follow yams#.....)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 7460
diff changeset
   407
        sch = self.loader.schemacls('toto')
6796
e70ca9abfc51 [unittest2] update to unittest2 assertRaises api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6768
diff changeset
   408
        with self.assertRaises(BadSchemaDefinition) as cm:
7469
f8c983afbf8e [test] update cubicweb/test/unittest_schema.py (to follow yams#.....)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 7460
diff changeset
   409
            fill_schema(sch, self.loader.defined, False)
6796
e70ca9abfc51 [unittest2] update to unittest2 assertRaises api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6768
diff changeset
   410
        self.assertEqual(str(cm.exception), msg)
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
   411
6861
9d4e11d6e783 [schema] ease understanding of schema naming error
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6796
diff changeset
   412
    def test_lowered_etype(self):
9d4e11d6e783 [schema] ease understanding of schema naming error
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6796
diff changeset
   413
        self._test('lowered_etype.py',
9d4e11d6e783 [schema] ease understanding of schema naming error
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6796
diff changeset
   414
                   "'my_etype' is not a valid name for an entity type. It should "
9d4e11d6e783 [schema] ease understanding of schema naming error
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6796
diff changeset
   415
                   "start with an upper cased letter and be followed by at least "
9d4e11d6e783 [schema] ease understanding of schema naming error
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6796
diff changeset
   416
                   "a lower cased letter")
9d4e11d6e783 [schema] ease understanding of schema naming error
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6796
diff changeset
   417
9d4e11d6e783 [schema] ease understanding of schema naming error
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6796
diff changeset
   418
    def test_uppered_rtype(self):
9d4e11d6e783 [schema] ease understanding of schema naming error
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6796
diff changeset
   419
        self._test('uppered_rtype.py',
9d4e11d6e783 [schema] ease understanding of schema naming error
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6796
diff changeset
   420
                   "'ARelation' is not a valid name for a relation type. It should be lower cased")
9d4e11d6e783 [schema] ease understanding of schema naming error
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6796
diff changeset
   421
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   422
    def test_rrqlexpr_on_etype(self):
5179
f08943f22334 [schema] #847739: test and fix bad permission on TrInfo.comment
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4611
diff changeset
   423
        self._test('rrqlexpr_on_eetype.py',
f08943f22334 [schema] #847739: test and fix bad permission on TrInfo.comment
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4611
diff changeset
   424
                   "can't use RRQLExpression on ToTo, use an ERQLExpression")
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
   425
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   426
    def test_erqlexpr_on_rtype(self):
5179
f08943f22334 [schema] #847739: test and fix bad permission on TrInfo.comment
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4611
diff changeset
   427
        self._test('erqlexpr_on_ertype.py',
f08943f22334 [schema] #847739: test and fix bad permission on TrInfo.comment
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4611
diff changeset
   428
                   "can't use ERQLExpression on relation ToTo toto TuTu, use a RRQLExpression")
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
   429
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   430
    def test_rqlexpr_on_rtype_read(self):
5179
f08943f22334 [schema] #847739: test and fix bad permission on TrInfo.comment
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4611
diff changeset
   431
        self._test('rqlexpr_on_ertype_read.py',
f08943f22334 [schema] #847739: test and fix bad permission on TrInfo.comment
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4611
diff changeset
   432
                   "can't use rql expression for read permission of relation ToTo toto TuTu")
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
   433
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   434
    def test_rrqlexpr_on_attr(self):
5179
f08943f22334 [schema] #847739: test and fix bad permission on TrInfo.comment
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4611
diff changeset
   435
        self._test('rrqlexpr_on_attr.py',
f08943f22334 [schema] #847739: test and fix bad permission on TrInfo.comment
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4611
diff changeset
   436
                   "can't use RRQLExpression on attribute ToTo.attr[String], use an ERQLExpression")
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   437
10554
c39749d14c53 [test] check that we reject an rqlexpression in computed relation perms
Julien Cristau <julien.cristau@logilab.fr>
parents: 10553
diff changeset
   438
    def test_rqlexpr_on_computedrel(self):
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   439
        self._test(
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   440
            'rqlexpr_on_computedrel.py',
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   441
            "can't use rql expression for read permission of relation Subject computed Object")
10554
c39749d14c53 [test] check that we reject an rqlexpression in computed relation perms
Julien Cristau <julien.cristau@logilab.fr>
parents: 10553
diff changeset
   442
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   443
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   444
class NormalizeExpressionTC(TestCase):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   445
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   446
    def test(self):
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6306
diff changeset
   447
        self.assertEqual(normalize_expression('X  bla Y,Y blur Z  ,  Z zigoulou   X '),
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   448
                         'X bla Y, Y blur Z, Z zigoulou X')
10653
42c5bd7286b7 [schema] improve normalization of RQLExpressions
Julien Cristau <julien.cristau@logilab.fr>
parents: 10600
diff changeset
   449
        self.assertEqual(normalize_expression('X bla Y, Y name "x,y"'),
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   450
                         'X bla Y, Y name "x,y"')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   451
9640
26ea1c4387bf [test] silence warnings for unittest_schema by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9547
diff changeset
   452
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
   453
class RQLExpressionTC(TestCase):
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
   454
    def test_comparison(self):
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6306
diff changeset
   455
        self.assertEqual(ERQLExpression('X is CWUser', 'X', 0),
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   456
                         ERQLExpression('X is CWUser', 'X', 0))
6415
b0b0f097a72d cleanups
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
   457
        self.assertNotEqual(ERQLExpression('X is CWUser', 'X', 0),
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   458
                            ERQLExpression('X is CWGroup', 'X', 0))
4181
c79135c217df backport stable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998 4132
diff changeset
   459
12597
7882ad333954 Move CWSchemaTC to RQLExpressionTC
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12539
diff changeset
   460
    def test_has_update_permission(self):
7882ad333954 Move CWSchemaTC to RQLExpressionTC
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12539
diff changeset
   461
        expr = ERQLExpression('P use_email X, U has_update_permission P')
7882ad333954 Move CWSchemaTC to RQLExpressionTC
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12539
diff changeset
   462
        rql, found, keyarg = expr.transform_has_permission()
7882ad333954 Move CWSchemaTC to RQLExpressionTC
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12539
diff changeset
   463
        self.assertEqual(rql, 'Any X,P WHERE P use_email X, X eid %(x)s')
7882ad333954 Move CWSchemaTC to RQLExpressionTC
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12539
diff changeset
   464
        self.assertEqual(found, [(u'update', 1)])
7882ad333954 Move CWSchemaTC to RQLExpressionTC
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12539
diff changeset
   465
        self.assertEqual(keyarg, None)
7882ad333954 Move CWSchemaTC to RQLExpressionTC
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12539
diff changeset
   466
7882ad333954 Move CWSchemaTC to RQLExpressionTC
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12539
diff changeset
   467
    def test_expression(self):
7882ad333954 Move CWSchemaTC to RQLExpressionTC
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12539
diff changeset
   468
        expr = ERQLExpression('U use_email X')
7882ad333954 Move CWSchemaTC to RQLExpressionTC
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12539
diff changeset
   469
        rql, found, keyarg = expr.transform_has_permission()
7882ad333954 Move CWSchemaTC to RQLExpressionTC
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12539
diff changeset
   470
        self.assertEqual(rql, 'Any X WHERE EXISTS(U use_email X, X eid %(x)s, U eid %(u)s)')
7882ad333954 Move CWSchemaTC to RQLExpressionTC
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12539
diff changeset
   471
        self.assertEqual(found, None)
7882ad333954 Move CWSchemaTC to RQLExpressionTC
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12539
diff changeset
   472
        self.assertEqual(keyarg, None)
7882ad333954 Move CWSchemaTC to RQLExpressionTC
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12539
diff changeset
   473
9640
26ea1c4387bf [test] silence warnings for unittest_schema by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9547
diff changeset
   474
4132
440d383367eb fix mainvars detection bug with EXISTS (paren, actually)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3978
diff changeset
   475
class GuessRrqlExprMainVarsTC(TestCase):
440d383367eb fix mainvars detection bug with EXISTS (paren, actually)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3978
diff changeset
   476
    def test_exists(self):
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   477
        mainvars = guess_rrqlexpr_mainvars(normalize_expression(
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   478
            'NOT EXISTS(O team_competition C, C level < 3, C concerns S)'))
7603
1302aa6ba4da [schema / rql] fix mainvars of RRQLExpression with parens
Florent Cayré <florent.cayre@gmail.com>
parents: 7426
diff changeset
   479
        self.assertEqual(mainvars, set(['S', 'O']))
4132
440d383367eb fix mainvars detection bug with EXISTS (paren, actually)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3978
diff changeset
   480
4181
c79135c217df backport stable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998 4132
diff changeset
   481
7640
85ebdbbcb321 [schema] closes #1816439: RQLConstraint does not take variable U into account
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7603
diff changeset
   482
class RQLConstraintTC(CubicWebTC):
85ebdbbcb321 [schema] closes #1816439: RQLConstraint does not take variable U into account
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7603
diff changeset
   483
    def test_user_constraint(self):
85ebdbbcb321 [schema] closes #1816439: RQLConstraint does not take variable U into account
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7603
diff changeset
   484
        cstr = RQLConstraint('U identity O')
9640
26ea1c4387bf [test] silence warnings for unittest_schema by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9547
diff changeset
   485
        with self.admin_access.repo_cnx() as cnx:
26ea1c4387bf [test] silence warnings for unittest_schema by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9547
diff changeset
   486
            anoneid = cnx.execute('Any X WHERE X login "anon"')[0][0]
26ea1c4387bf [test] silence warnings for unittest_schema by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9547
diff changeset
   487
            self.assertRaises(ValidationError,
26ea1c4387bf [test] silence warnings for unittest_schema by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9547
diff changeset
   488
                              cstr.repo_check, cnx, 1, 'rel', anoneid)
26ea1c4387bf [test] silence warnings for unittest_schema by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9547
diff changeset
   489
            self.assertEqual(cstr.repo_check(cnx, 1, cnx.user.eid),
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   490
                             None)  # no validation error, constraint checked
9640
26ea1c4387bf [test] silence warnings for unittest_schema by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9547
diff changeset
   491
7640
85ebdbbcb321 [schema] closes #1816439: RQLConstraint does not take variable U into account
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7603
diff changeset
   492
8336
7ccd4367ee1c [workflow] set default test/plain option for workflow default comment (closes #993083)
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 8167
diff changeset
   493
class WorkflowShemaTC(CubicWebTC):
7ccd4367ee1c [workflow] set default test/plain option for workflow default comment (closes #993083)
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 8167
diff changeset
   494
    def test_trinfo_default_format(self):
9640
26ea1c4387bf [test] silence warnings for unittest_schema by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9547
diff changeset
   495
        with self.admin_access.web_request() as req:
26ea1c4387bf [test] silence warnings for unittest_schema by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9547
diff changeset
   496
            tr = req.user.cw_adapt_to('IWorkflowable').fire_transition('deactivate')
26ea1c4387bf [test] silence warnings for unittest_schema by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9547
diff changeset
   497
            self.assertEqual(tr.comment_format, 'text/plain')
7640
85ebdbbcb321 [schema] closes #1816439: RQLConstraint does not take variable U into account
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7603
diff changeset
   498
9547
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   499
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   500
class CompositeSchemaTC(CubicWebTC):
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   501
    composites = {
9711
59616edc20d7 [schema] fix buggy composite_rdef_roles and associated test
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9675
diff changeset
   502
        'BaseTransition': [('condition', 'BaseTransition', 'RQLExpression', 'subject')],
9547
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   503
        'CWAttribute': [('add_permission', 'CWAttribute', 'RQLExpression', 'subject'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   504
                        ('constrained_by', 'CWAttribute', 'CWConstraint', 'subject'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   505
                        ('read_permission', 'CWAttribute', 'RQLExpression', 'subject'),
9711
59616edc20d7 [schema] fix buggy composite_rdef_roles and associated test
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9675
diff changeset
   506
                        ('update_permission', 'CWAttribute', 'RQLExpression', 'subject')],
59616edc20d7 [schema] fix buggy composite_rdef_roles and associated test
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9675
diff changeset
   507
        'CWEType': [('add_permission', 'CWEType', 'RQLExpression', 'subject'),
9547
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   508
                    ('constraint_of', 'CWUniqueTogetherConstraint', 'CWEType', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   509
                    ('delete_permission', 'CWEType', 'RQLExpression', 'subject'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   510
                    ('from_entity', 'CWAttribute', 'CWEType', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   511
                    ('from_entity', 'CWRelation', 'CWEType', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   512
                    ('read_permission', 'CWEType', 'RQLExpression', 'subject'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   513
                    ('to_entity', 'CWAttribute', 'CWEType', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   514
                    ('to_entity', 'CWRelation', 'CWEType', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   515
                    ('update_permission', 'CWEType', 'RQLExpression', 'subject')],
11775
39cf9e55ada8 [source] Drop source mapping handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11768
diff changeset
   516
        'CWRType': [('relation_type', 'CWAttribute', 'CWRType', 'object'),
9547
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   517
                    ('relation_type', 'CWRelation', 'CWRType', 'object')],
9711
59616edc20d7 [schema] fix buggy composite_rdef_roles and associated test
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9675
diff changeset
   518
        'CWRelation': [('add_permission', 'CWRelation', 'RQLExpression', 'subject'),
9547
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   519
                       ('constrained_by', 'CWRelation', 'CWConstraint', 'subject'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   520
                       ('delete_permission', 'CWRelation', 'RQLExpression', 'subject'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   521
                       ('read_permission', 'CWRelation', 'RQLExpression', 'subject')],
10553
1d824df4f2bd Fix (de)serialization of ComputedRelation read permissions
Julien Cristau <julien.cristau@logilab.fr>
parents: 10529
diff changeset
   522
        'CWComputedRType': [('read_permission', 'CWComputedRType', 'RQLExpression', 'subject')],
11775
39cf9e55ada8 [source] Drop source mapping handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11768
diff changeset
   523
        'CWSource': [('cw_host_config_of', 'CWSourceHostConfig', 'CWSource', 'object'),
9547
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   524
                     ('cw_import_of', 'CWDataImport', 'CWSource', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   525
                     ('cw_source', 'Ami', 'CWSource', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   526
                     ('cw_source', 'BaseTransition', 'CWSource', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   527
                     ('cw_source', 'Bookmark', 'CWSource', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   528
                     ('cw_source', 'CWAttribute', 'CWSource', 'object'),
9956
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents: 9952
diff changeset
   529
                     ('cw_source', 'CWComputedRType', 'CWSource', 'object'),
9547
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   530
                     ('cw_source', 'CWConstraint', 'CWSource', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   531
                     ('cw_source', 'CWConstraintType', 'CWSource', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   532
                     ('cw_source', 'CWDataImport', 'CWSource', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   533
                     ('cw_source', 'CWEType', 'CWSource', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   534
                     ('cw_source', 'CWGroup', 'CWSource', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   535
                     ('cw_source', 'CWPermission', 'CWSource', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   536
                     ('cw_source', 'CWProperty', 'CWSource', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   537
                     ('cw_source', 'CWRType', 'CWSource', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   538
                     ('cw_source', 'CWRelation', 'CWSource', 'object'),
11681
b23d58050076 Merge cubicweb-pyramid cube
Yann Voté <yann.vote@logilab.fr>
parents: 11348
diff changeset
   539
                     ('cw_source', 'CWSession', 'CWSource', 'object'),
9547
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   540
                     ('cw_source', 'CWSource', 'CWSource', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   541
                     ('cw_source', 'CWSourceHostConfig', 'CWSource', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   542
                     ('cw_source', 'CWUniqueTogetherConstraint', 'CWSource', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   543
                     ('cw_source', 'CWUser', 'CWSource', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   544
                     ('cw_source', 'Card', 'CWSource', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   545
                     ('cw_source', 'EmailAddress', 'CWSource', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   546
                     ('cw_source', 'ExternalUri', 'CWSource', 'object'),
10529
747eded13c68 [test] use FakeFile instead of File in test_fulltextindex
Julien Cristau <julien.cristau@logilab.fr>
parents: 10252
diff changeset
   547
                     ('cw_source', 'FakeFile', 'CWSource', 'object'),
9547
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   548
                     ('cw_source', 'Note', 'CWSource', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   549
                     ('cw_source', 'Personne', 'CWSource', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   550
                     ('cw_source', 'Produit', 'CWSource', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   551
                     ('cw_source', 'RQLExpression', 'CWSource', 'object'),
9978
8f4b15e5b300 [entities] cw_rest_attr_info() should only consider required attributes (closes #3766717)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9711
diff changeset
   552
                     ('cw_source', 'Reference', 'CWSource', 'object'),
9547
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   553
                     ('cw_source', 'Service', 'CWSource', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   554
                     ('cw_source', 'Societe', 'CWSource', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   555
                     ('cw_source', 'State', 'CWSource', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   556
                     ('cw_source', 'StateFull', 'CWSource', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   557
                     ('cw_source', 'SubNote', 'CWSource', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   558
                     ('cw_source', 'SubWorkflowExitPoint', 'CWSource', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   559
                     ('cw_source', 'Tag', 'CWSource', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   560
                     ('cw_source', 'TrInfo', 'CWSource', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   561
                     ('cw_source', 'Transition', 'CWSource', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   562
                     ('cw_source', 'Usine', 'CWSource', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   563
                     ('cw_source', 'Workflow', 'CWSource', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   564
                     ('cw_source', 'WorkflowTransition', 'CWSource', 'object')],
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   565
        'CWUser': [('for_user', 'CWProperty', 'CWUser', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   566
                   ('use_email', 'CWUser', 'EmailAddress', 'subject'),
9711
59616edc20d7 [schema] fix buggy composite_rdef_roles and associated test
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9675
diff changeset
   567
                   ('wf_info_for', 'TrInfo', 'CWUser', 'object')],
59616edc20d7 [schema] fix buggy composite_rdef_roles and associated test
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9675
diff changeset
   568
        'StateFull': [('wf_info_for', 'TrInfo', 'StateFull', 'object')],
59616edc20d7 [schema] fix buggy composite_rdef_roles and associated test
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9675
diff changeset
   569
        'Transition': [('condition', 'Transition', 'RQLExpression', 'subject')],
9547
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   570
        'Workflow': [('state_of', 'State', 'Workflow', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   571
                     ('transition_of', 'BaseTransition', 'Workflow', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   572
                     ('transition_of', 'Transition', 'Workflow', 'object'),
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   573
                     ('transition_of', 'WorkflowTransition', 'Workflow', 'object')],
11348
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   574
        'WorkflowTransition': [
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   575
            ('condition', 'WorkflowTransition', 'RQLExpression', 'subject'),
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   576
            ('subworkflow_exit', 'WorkflowTransition', 'SubWorkflowExitPoint', 'subject')
70337ad23145 pep8 + docstrings and comments improvments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11279
diff changeset
   577
        ]
9547
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   578
    }
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   579
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   580
    def test_composite_entities(self):
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   581
        schema = self.vreg.schema
9711
59616edc20d7 [schema] fix buggy composite_rdef_roles and associated test
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9675
diff changeset
   582
        self.assertEqual(sorted(self.composites),
59616edc20d7 [schema] fix buggy composite_rdef_roles and associated test
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9675
diff changeset
   583
                         [eschema.type for eschema in sorted(schema.entities())
9547
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   584
                          if eschema.is_composite])
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   585
        for etype in self.composites:
11164
e3fa26bd9ce0 [test] convert a lgc-style generative test into unittest2-style
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
   586
            with self.subTest(etype=etype):
e3fa26bd9ce0 [test] convert a lgc-style generative test into unittest2-style
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
   587
                self.assertEqual(self.composites[etype],
e3fa26bd9ce0 [test] convert a lgc-style generative test into unittest2-style
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
   588
                                 sorted([(r.rtype.type, r.subject.type, r.object.type, role)
e3fa26bd9ce0 [test] convert a lgc-style generative test into unittest2-style
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
   589
                                         for r, role in schema[etype].composite_rdef_roles]))
9547
43aace16a953 [schema] add composite handling helpers on EntitySchema (related to #3463112)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9280
diff changeset
   590
9967
e65873ad0371 [CWEP002] Add support for computed attribute synchronization
Sylvain Thénault
parents: 9966
diff changeset
   591
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   592
if __name__ == '__main__':
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   593
    unittest_main()