[F repo tests] tests have to be updated:
* fix schema (stuff missed while rewriting old .sql / .rel files to python)
* '* in_basket Basket' now consider all entity types
* new ExternalUri / cwuri ertypes
* group eids have changed
--- a/server/test/data/schema.py Fri Jul 31 23:48:18 2009 +0200
+++ b/server/test/data/schema.py Fri Jul 31 23:54:20 2009 +0200
@@ -76,7 +76,7 @@
migrated_from = SubjectRelation('Note')
attachment = SubjectRelation(('File', 'Image'))
- inline1 = SubjectRelation('Affaire', inlined=True)
+ inline1 = SubjectRelation('Affaire', inlined=True, cardinality='?*')
todo_by = SubjectRelation('CWUser')
class Personne(EntityType):
@@ -98,7 +98,7 @@
travaille = SubjectRelation('Societe')
concerne = SubjectRelation('Affaire')
connait = SubjectRelation('Personne')
- inline2 = SubjectRelation('Affaire', inlined=True)
+ inline2 = SubjectRelation('Affaire', inlined=True, cardinality='?*')
comments = ObjectRelation('Comment')
@@ -167,7 +167,12 @@
object = 'Note'
-class see_also(RelationDefinition):
+class see_also_1(RelationDefinition):
+ name = 'see_also'
+ subject = object = 'Folder'
+
+class see_also_2(RelationDefinition):
+ name = 'see_also'
subject = ('Bookmark', 'Note')
object = ('Bookmark', 'Note')
@@ -180,14 +185,13 @@
subject = 'Note'
object ='Personne'
constraints = [RQLConstraint('E concerns P, X version_of P')]
+ cardinality = '?*'
class ecrit_par_2(RelationDefinition):
name = 'ecrit_par'
subject = 'Note'
object ='CWUser'
-
-class see_also(RelationDefinition):
- subject = object = 'Folder'
+ cardinality='?*'
class copain(RelationDefinition):
@@ -202,7 +206,7 @@
object = 'Folder'
class require_permission(RelationDefinition):
- subject = ('Card', 'Note')
+ subject = ('Card', 'Note', 'Personne')
object = 'CWPermission'
class require_state(RelationDefinition):
--- a/server/test/unittest_hooks.py Fri Jul 31 23:48:18 2009 +0200
+++ b/server/test/unittest_hooks.py Fri Jul 31 23:54:20 2009 +0200
@@ -62,12 +62,12 @@
def test_delete_if_singlecard1(self):
self.assertEquals(self.repo.schema['in_state'].inlined, False)
- ueid, = self.execute('INSERT CWUser X: X login "toto", X upassword "hop", X in_group Y, X in_state S '
- 'WHERE Y name "users", S name "activated"')[0]
+ ueid = self.create_user('toto')
self.commit()
self.execute('SET X in_state S WHERE S name "deactivated", X eid %(x)s', {'x': ueid})
rset = self.execute('Any S WHERE X in_state S, X eid %(x)s', {'x': ueid})
self.assertEquals(len(rset), 1)
+ self.commit()
self.assertRaises(Exception, self.execute, 'SET X in_state S WHERE S name "deactivated", X eid %s' % ueid)
rset2 = self.execute('Any S WHERE X in_state S, X eid %(x)s', {'x': ueid})
self.assertEquals(rset.rows, rset2.rows)
@@ -251,7 +251,7 @@
if not hasattr(self, '_repo'):
# first initialization
repo = self.repo # set by the RepositoryBasedTC metaclass
- # force to read schema from the database
+ # force to read schema from the database to get proper eid set on schema instances
repo.config._cubes = None
repo.fill_schema()
RepositoryBasedTC.setUp(self)
--- a/server/test/unittest_migractions.py Fri Jul 31 23:48:18 2009 +0200
+++ b/server/test/unittest_migractions.py Fri Jul 31 23:54:20 2009 +0200
@@ -3,11 +3,12 @@
"""
from datetime import date
+from os.path import join
from logilab.common.testlib import TestCase, unittest_main
-from cubicweb.devtools.apptest import RepositoryBasedTC, get_versions
from cubicweb import ConfigurationError
+from cubicweb.devtools.apptest import RepositoryBasedTC, get_versions
from cubicweb.schema import CubicWebSchemaLoader
from cubicweb.server.sqlutils import SQL_PREFIX
from cubicweb.server.repository import Repository
@@ -32,10 +33,10 @@
repo.config._cubes = None
repo.fill_schema()
# hack to read the schema from data/migrschema
- CubicWebSchemaLoader.main_schema_directory = 'migrschema'
+ self.repo.config.appid = join('data', 'migratedapp')
global migrschema
migrschema = self.repo.config.load_schema()
- del CubicWebSchemaLoader.main_schema_directory
+ self.repo.config.appid = 'data'
assert 'Folder' in migrschema
self.repo.hm.deactivate_verification_hooks()
RepositoryBasedTC.setUp(self)
@@ -356,7 +357,7 @@
def test_add_remove_cube_and_deps(self):
cubes = set(self.config.cubes())
schema = self.repo.schema
- self.assertEquals(sorted(schema['see_also']._rproperties.keys()),
+ self.assertEquals(sorted((str(s), str(o)) for s, o in schema['see_also']._rproperties.keys()),
sorted([('EmailThread', 'EmailThread'), ('Folder', 'Folder'),
('Bookmark', 'Bookmark'), ('Bookmark', 'Note'),
('Note', 'Note'), ('Note', 'Bookmark')]))
--- a/server/test/unittest_msplanner.py Fri Jul 31 23:48:18 2009 +0200
+++ b/server/test/unittest_msplanner.py Fri Jul 31 23:54:20 2009 +0200
@@ -50,6 +50,7 @@
{'X': 'CWRelation'}, {'X': 'CWPermission'}, {'X': 'CWProperty'},
{'X': 'CWRType'}, {'X': 'CWUser'}, {'X': 'Email'},
{'X': 'EmailAddress'}, {'X': 'EmailPart'}, {'X': 'EmailThread'},
+ {'X': 'ExternalUri'},
{'X': 'File'}, {'X': 'Folder'}, {'X': 'Image'},
{'X': 'Note'}, {'X': 'Personne'}, {'X': 'RQLExpression'},
{'X': 'Societe'}, {'X': 'State'}, {'X': 'SubDivision'},
@@ -873,13 +874,13 @@
[{'X': 'Card'}, {'X': 'Note'}, {'X': 'State'}])],
[self.cards, self.system], {}, {'X': 'table0.C0'}, []),
('FetchStep',
- [('Any X WHERE X is IN(Bookmark, CWAttribute, CWCache, CWConstraint, CWConstraintType, CWEType, CWGroup, CWPermission, CWProperty, CWRType, CWRelation, Comment, Division, Email, EmailAddress, EmailPart, EmailThread, File, Folder, Image, Personne, RQLExpression, Societe, SubDivision, Tag, TrInfo, Transition)',
+ [('Any X WHERE X is IN(Bookmark, CWAttribute, CWCache, CWConstraint, CWConstraintType, CWEType, CWGroup, CWPermission, CWProperty, CWRType, CWRelation, Comment, Division, Email, EmailAddress, EmailPart, EmailThread, ExternalUri, File, Folder, Image, Personne, RQLExpression, Societe, SubDivision, Tag, TrInfo, Transition)',
sorted([{'X': 'Bookmark'}, {'X': 'Comment'}, {'X': 'Division'},
{'X': 'CWCache'}, {'X': 'CWConstraint'}, {'X': 'CWConstraintType'},
{'X': 'CWEType'}, {'X': 'CWAttribute'}, {'X': 'CWGroup'},
{'X': 'CWRelation'}, {'X': 'CWPermission'}, {'X': 'CWProperty'},
{'X': 'CWRType'}, {'X': 'Email'}, {'X': 'EmailAddress'},
- {'X': 'EmailPart'}, {'X': 'EmailThread'}, {'X': 'File'},
+ {'X': 'EmailPart'}, {'X': 'EmailThread'}, {'X': 'ExternalUri'}, {'X': 'File'},
{'X': 'Folder'}, {'X': 'Image'}, {'X': 'Personne'},
{'X': 'RQLExpression'}, {'X': 'Societe'}, {'X': 'SubDivision'},
{'X': 'Tag'}, {'X': 'TrInfo'}, {'X': 'Transition'}]))],
@@ -922,7 +923,7 @@
[self.system], {'X': 'table3.C0'}, {'ET': 'table0.C0', 'X': 'table0.C1'}, []),
# extra UnionFetchStep could be avoided but has no cost, so don't care
('UnionFetchStep',
- [('FetchStep', [('Any ET,X WHERE X is ET, ET is CWEType, X is IN(Bookmark, CWAttribute, CWCache, CWConstraint, CWConstraintType, CWEType, CWGroup, CWPermission, CWProperty, CWRType, CWRelation, Comment, Division, Email, EmailAddress, EmailPart, EmailThread, File, Folder, Image, Personne, RQLExpression, Societe, SubDivision, Tag, TrInfo, Transition)',
+ [('FetchStep', [('Any ET,X WHERE X is ET, ET is CWEType, X is IN(Bookmark, CWAttribute, CWCache, CWConstraint, CWConstraintType, CWEType, CWGroup, CWPermission, CWProperty, CWRType, CWRelation, Comment, Division, Email, EmailAddress, EmailPart, EmailThread, ExternalUri, File, Folder, Image, Personne, RQLExpression, Societe, SubDivision, Tag, TrInfo, Transition)',
[{'X': 'Bookmark', 'ET': 'CWEType'}, {'X': 'Comment', 'ET': 'CWEType'},
{'X': 'Division', 'ET': 'CWEType'}, {'X': 'CWCache', 'ET': 'CWEType'},
{'X': 'CWConstraint', 'ET': 'CWEType'}, {'X': 'CWConstraintType', 'ET': 'CWEType'},
@@ -931,7 +932,9 @@
{'X': 'CWPermission', 'ET': 'CWEType'}, {'X': 'CWProperty', 'ET': 'CWEType'},
{'X': 'CWRType', 'ET': 'CWEType'}, {'X': 'Email', 'ET': 'CWEType'},
{'X': 'EmailAddress', 'ET': 'CWEType'}, {'X': 'EmailPart', 'ET': 'CWEType'},
- {'X': 'EmailThread', 'ET': 'CWEType'}, {'X': 'File', 'ET': 'CWEType'},
+ {'X': 'EmailThread', 'ET': 'CWEType'},
+ {'ET': 'CWEType', 'X': 'ExternalUri'},
+ {'X': 'File', 'ET': 'CWEType'},
{'X': 'Folder', 'ET': 'CWEType'}, {'X': 'Image', 'ET': 'CWEType'},
{'X': 'Personne', 'ET': 'CWEType'}, {'X': 'RQLExpression', 'ET': 'CWEType'},
{'X': 'Societe', 'ET': 'CWEType'}, {'X': 'SubDivision', 'ET': 'CWEType'},
@@ -958,7 +961,9 @@
{'ET': 'CWEType', 'X': 'CWProperty'}, {'ET': 'CWEType', 'X': 'CWRType'},
{'ET': 'CWEType', 'X': 'CWUser'}, {'ET': 'CWEType', 'X': 'Email'},
{'ET': 'CWEType', 'X': 'EmailAddress'}, {'ET': 'CWEType', 'X': 'EmailPart'},
- {'ET': 'CWEType', 'X': 'EmailThread'}, {'ET': 'CWEType', 'X': 'File'},
+ {'ET': 'CWEType', 'X': 'EmailThread'},
+ {'ET': 'CWEType', 'X': 'ExternalUri'},
+ {'ET': 'CWEType', 'X': 'File'},
{'ET': 'CWEType', 'X': 'Folder'}, {'ET': 'CWEType', 'X': 'Image'},
{'ET': 'CWEType', 'X': 'Note'}, {'ET': 'CWEType', 'X': 'Personne'},
{'ET': 'CWEType', 'X': 'RQLExpression'}, {'ET': 'CWEType', 'X': 'Societe'},
--- a/server/test/unittest_querier.py Fri Jul 31 23:48:18 2009 +0200
+++ b/server/test/unittest_querier.py Fri Jul 31 23:54:20 2009 +0200
@@ -110,7 +110,7 @@
'ET': 'CWEType', 'ETN': 'String'}])
rql, solutions = partrqls[1]
self.assertEquals(rql, 'Any ETN,X WHERE X is ET, ET name ETN, ET is CWEType, '
- 'X is IN(Bookmark, CWAttribute, CWCache, CWConstraint, CWConstraintType, CWEType, CWGroup, CWPermission, CWProperty, CWRType, CWRelation, CWUser, Card, Comment, Division, Email, EmailAddress, EmailPart, EmailThread, File, Folder, Image, Note, Personne, RQLExpression, Societe, State, SubDivision, Tag, TrInfo, Transition)')
+ 'X is IN(Bookmark, CWAttribute, CWCache, CWConstraint, CWConstraintType, CWEType, CWGroup, CWPermission, CWProperty, CWRType, CWRelation, CWUser, Card, Comment, Division, Email, EmailAddress, EmailPart, EmailThread, ExternalUri, File, Folder, Image, Note, Personne, RQLExpression, Societe, State, SubDivision, Tag, TrInfo, Transition)')
self.assertListEquals(sorted(solutions),
sorted([{'X': 'Bookmark', 'ETN': 'String', 'ET': 'CWEType'},
{'X': 'Card', 'ETN': 'String', 'ET': 'CWEType'},
@@ -131,6 +131,7 @@
{'X': 'CWProperty', 'ETN': 'String', 'ET': 'CWEType'},
{'X': 'CWRType', 'ETN': 'String', 'ET': 'CWEType'},
{'X': 'CWUser', 'ETN': 'String', 'ET': 'CWEType'},
+ {'X': 'ExternalUri', 'ETN': 'String', 'ET': 'CWEType'},
{'X': 'File', 'ETN': 'String', 'ET': 'CWEType'},
{'X': 'Folder', 'ETN': 'String', 'ET': 'CWEType'},
{'X': 'Image', 'ETN': 'String', 'ET': 'CWEType'},
@@ -226,10 +227,10 @@
def test_select_2(self):
rset = self.execute('Any X ORDERBY N WHERE X is CWGroup, X name N')
- self.assertEquals(tuplify(rset.rows), [(3,), (1,), (4,), (2,)])
+ self.assertEquals(tuplify(rset.rows), [(1,), (2,), (3,), (4,)])
self.assertEquals(rset.description, [('CWGroup',), ('CWGroup',), ('CWGroup',), ('CWGroup',)])
rset = self.execute('Any X ORDERBY N DESC WHERE X is CWGroup, X name N')
- self.assertEquals(tuplify(rset.rows), [(2,), (4,), (1,), (3,)])
+ self.assertEquals(tuplify(rset.rows), [(4,), (3,), (2,), (1,)])
def test_select_3(self):
rset = self.execute('Any N GROUPBY N WHERE X is CWGroup, X name N')
@@ -272,7 +273,7 @@
def test_select_5(self):
rset = self.execute('Any X, TMP ORDERBY TMP WHERE X name TMP, X is CWGroup')
- self.assertEquals(tuplify(rset.rows), [(3, 'guests',), (1, 'managers',), (4, 'owners',), (2, 'users',)])
+ self.assertEquals(tuplify(rset.rows), [(1, 'guests',), (2, 'managers',), (3, 'owners',), (4, 'users',)])
self.assertEquals(rset.description, [('CWGroup', 'String',), ('CWGroup', 'String',), ('CWGroup', 'String',), ('CWGroup', 'String',)])
def test_select_6(self):
@@ -344,7 +345,8 @@
peid1 = self.execute("INSERT Personne X: X nom 'bidule'")[0][0]
rset = self.execute('Any X WHERE X eid %(x)s, P? connait X', {'x':peid1}, 'x')
self.assertEquals(rset.rows, [[peid1]])
- rset = self.execute('Any X WHERE X eid %(x)s, X require_permission P?', {'x':peid1}, 'x')
+ rset = self.execute('Any X WHERE X eid %(x)s, X require_permission P?',
+ {'x':peid1}, 'x')
self.assertEquals(rset.rows, [[peid1]])
def test_select_left_outer_join(self):
@@ -464,10 +466,12 @@
'WHERE RT name N, RDEF relation_type RT '
'HAVING COUNT(RDEF) > 10')
self.assertListEquals(rset.rows,
- [[u'description', 11], ['in_basket', 11],
- [u'name', 13], [u'created_by', 33],
- [u'creation_date', 33], [u'is', 33], [u'is_instance_of', 33],
- [u'modification_date', 33], [u'owned_by', 33]])
+ [[u'description', 11],
+ [u'name', 13], [u'created_by', 34],
+ [u'creation_date', 34], [u'cwuri', 34],
+ ['in_basket', 34],
+ [u'is', 34], [u'is_instance_of', 34],
+ [u'modification_date', 34], [u'owned_by', 34]])
def test_select_aggregat_having_dumb(self):
# dumb but should not raise an error
@@ -553,10 +557,10 @@
def test_select_limit_offset(self):
rset = self.execute('CWGroup X ORDERBY N LIMIT 2 WHERE X name N')
- self.assertEquals(tuplify(rset.rows), [(3,), (1,)])
+ self.assertEquals(tuplify(rset.rows), [(1,), (2,)])
self.assertEquals(rset.description, [('CWGroup',), ('CWGroup',)])
rset = self.execute('CWGroup X ORDERBY N LIMIT 2 OFFSET 2 WHERE X name N')
- self.assertEquals(tuplify(rset.rows), [(4,), (2,)])
+ self.assertEquals(tuplify(rset.rows), [(3,), (4,)])
def test_select_symetric(self):
self.execute("INSERT Personne X: X nom 'machin'")
--- a/server/test/unittest_repository.py Fri Jul 31 23:48:18 2009 +0200
+++ b/server/test/unittest_repository.py Fri Jul 31 23:54:20 2009 +0200
@@ -226,12 +226,12 @@
# check order of attributes is respected
self.assertListEquals([r.type for r in schema.eschema('CWAttribute').ordered_relations()
if not r.type in ('eid', 'is', 'is_instance_of', 'identity',
- 'creation_date', 'modification_date',
+ 'creation_date', 'modification_date', 'cwuri',
'owned_by', 'created_by')],
- ['relation_type', 'from_entity', 'to_entity', 'constrained_by',
+ ['relation_type', 'from_entity', 'in_basket', 'to_entity', 'constrained_by',
'cardinality', 'ordernum',
'indexed', 'fulltextindexed', 'internationalizable',
- 'defaultval', 'description_format', 'description'])
+ 'defaultval', 'description', 'description_format'])
self.assertEquals(schema.eschema('CWEType').main_attribute(), 'name')
self.assertEquals(schema.eschema('State').main_attribute(), 'name')
--- a/server/test/unittest_rqlrewrite.py Fri Jul 31 23:48:18 2009 +0200
+++ b/server/test/unittest_rqlrewrite.py Fri Jul 31 23:54:20 2009 +0200
@@ -107,7 +107,7 @@
"Any S WHERE S owned_by C, C eid %(u)s, A eid %(B)s, "
"EXISTS((C identity A) OR (C in_state D, E identity A, "
"E in_state D, D name 'subscribed'), D is State, E is CWUser), "
- "S is IN(Affaire, Basket, Bookmark, CWAttribute, CWCache, CWConstraint, CWConstraintType, CWEType, CWGroup, CWPermission, CWProperty, CWRType, CWRelation, CWUser, Card, Comment, Division, Email, EmailAddress, EmailPart, EmailThread, File, Folder, Image, Note, Personne, RQLExpression, Societe, State, SubDivision, Tag, TrInfo, Transition)")
+ "S is IN(Affaire, Basket, Bookmark, CWAttribute, CWCache, CWConstraint, CWConstraintType, CWEType, CWGroup, CWPermission, CWProperty, CWRType, CWRelation, CWUser, Card, Comment, Division, Email, EmailAddress, EmailPart, EmailThread, ExternalUri, File, Folder, Image, Note, Personne, RQLExpression, Societe, State, SubDivision, Tag, TrInfo, Transition)")
def test_simplified_rqlst(self):
card_constraint = ('X in_state S, U in_group G, P require_state S,'
--- a/server/test/unittest_security.py Fri Jul 31 23:48:18 2009 +0200
+++ b/server/test/unittest_security.py Fri Jul 31 23:54:20 2009 +0200
@@ -515,6 +515,7 @@
self.execute('SET TI comment %(c)s WHERE TI wf_info_for X, X ref "ARCT01"',
{'c': u'creation'})
self.commit()
+ aff.clear_related_cache('wf_info_for', 'object')
self.assertEquals(aff.latest_trinfo().comment, 'creation')
# but not from_state/to_state
self.execute('SET X in_state S WHERE X ref "ARCT01", S name "ben non"')