|
1 """unit tests for schema rql (de)serialization |
|
2 """ |
|
3 |
|
4 import sys |
|
5 from cStringIO import StringIO |
|
6 |
|
7 from logilab.common.testlib import TestCase, unittest_main |
|
8 |
|
9 from cubicweb.schema import CubicWebSchemaLoader |
|
10 from cubicweb.devtools import TestServerConfiguration |
|
11 |
|
12 loader = CubicWebSchemaLoader() |
|
13 config = TestServerConfiguration('data') |
|
14 config.bootstrap_cubes() |
|
15 loader.lib_directory = config.schemas_lib_dir() |
|
16 schema = loader.load(config) |
|
17 |
|
18 from cubicweb.server.schemaserial import * |
|
19 |
|
20 class Schema2RQLTC(TestCase): |
|
21 |
|
22 def test_eschema2rql1(self): |
|
23 self.assertListEquals(list(eschema2rql(schema.eschema('EFRDef'))), |
|
24 [ |
|
25 ('INSERT EEType X: X description %(description)s,X final %(final)s,X meta %(meta)s,X name %(name)s', |
|
26 {'description': u'define a final relation: link a final relation type from a non final entity to a final entity type. used to build the application schema', |
|
27 'meta': True, 'name': u'EFRDef', 'final': False}) |
|
28 ]) |
|
29 |
|
30 def test_eschema2rql2(self): |
|
31 self.assertListEquals(list(eschema2rql(schema.eschema('String'))), [ |
|
32 ('INSERT EEType X: X description %(description)s,X final %(final)s,X meta %(meta)s,X name %(name)s', |
|
33 {'description': u'', 'final': True, 'meta': True, 'name': u'String'})]) |
|
34 |
|
35 def test_eschema2rql_specialization(self): |
|
36 self.assertListEquals(list(specialize2rql(schema)), |
|
37 [ |
|
38 ('SET X specializes ET WHERE X name %(x)s, ET name %(et)s', |
|
39 {'x': 'Division', 'et': 'Societe'}), |
|
40 ('SET X specializes ET WHERE X name %(x)s, ET name %(et)s', |
|
41 {'x': 'SubDivision', 'et': 'Division'})]) |
|
42 |
|
43 def test_rschema2rql1(self): |
|
44 self.assertListEquals(list(rschema2rql(schema.rschema('relation_type'))), |
|
45 [ |
|
46 ('INSERT ERType X: X description %(description)s,X final %(final)s,X fulltext_container %(fulltext_container)s,X inlined %(inlined)s,X meta %(meta)s,X name %(name)s,X symetric %(symetric)s', |
|
47 {'description': u'link a relation definition to its relation type', 'meta': True, 'symetric': False, 'name': u'relation_type', 'final' : False, 'fulltext_container': None, 'inlined': True}), |
|
48 ('INSERT ENFRDef X: X cardinality %(cardinality)s,X composite %(composite)s,X description %(description)s,X ordernum %(ordernum)s,X relation_type ER,X from_entity SE,X to_entity OE WHERE SE name %(se)s,ER name %(rt)s,OE name %(oe)s', |
|
49 {'rt': 'relation_type', 'description': u'', 'composite': u'object', 'oe': 'ERType', |
|
50 'ordernum': 1, 'cardinality': u'1*', 'se': 'EFRDef'}), |
|
51 ('INSERT EConstraint X: X value %(value)s, X cstrtype CT, EDEF constrained_by X WHERE CT name %(ctname)s, EDEF relation_type ER, EDEF from_entity SE, EDEF to_entity OE, ER name %(rt)s, SE name %(se)s, OE name %(oe)s, EDEF is ENFRDef', |
|
52 {'rt': 'relation_type', 'oe': 'ERType', 'ctname': u'RQLConstraint', 'se': 'EFRDef', 'value': u'O final TRUE'}), |
|
53 ('INSERT ENFRDef X: X cardinality %(cardinality)s,X composite %(composite)s,X description %(description)s,X ordernum %(ordernum)s,X relation_type ER,X from_entity SE,X to_entity OE WHERE SE name %(se)s,ER name %(rt)s,OE name %(oe)s', |
|
54 {'rt': 'relation_type', 'description': u'', 'composite': u'object', 'oe': 'ERType', |
|
55 'ordernum': 1, 'cardinality': u'1*', 'se': 'ENFRDef'}), |
|
56 ('INSERT EConstraint X: X value %(value)s, X cstrtype CT, EDEF constrained_by X WHERE CT name %(ctname)s, EDEF relation_type ER, EDEF from_entity SE, EDEF to_entity OE, ER name %(rt)s, SE name %(se)s, OE name %(oe)s, EDEF is ENFRDef', |
|
57 {'rt': 'relation_type', 'oe': 'ERType', 'ctname': u'RQLConstraint', 'se': 'ENFRDef', 'value': u'O final FALSE'}), |
|
58 ]) |
|
59 |
|
60 def test_rschema2rql2(self): |
|
61 expected = [ |
|
62 ('INSERT ERType X: X description %(description)s,X final %(final)s,X fulltext_container %(fulltext_container)s,X inlined %(inlined)s,X meta %(meta)s,X name %(name)s,X symetric %(symetric)s', {'description': u'core relation giving to a group the permission to add an entity or relation type', 'meta': True, 'symetric': False, 'name': u'add_permission', 'final': False, 'fulltext_container': None, 'inlined': False}), |
|
63 ('INSERT ENFRDef X: X cardinality %(cardinality)s,X composite %(composite)s,X description %(description)s,X ordernum %(ordernum)s,X relation_type ER,X from_entity SE,X to_entity OE WHERE SE name %(se)s,ER name %(rt)s,OE name %(oe)s', |
|
64 {'rt': 'add_permission', 'description': u'rql expression allowing to add entities/relations of this type', 'composite': 'subject', 'oe': 'RQLExpression', 'ordernum': 5, 'cardinality': u'*?', 'se': 'EEType'}), |
|
65 ('INSERT ENFRDef X: X cardinality %(cardinality)s,X composite %(composite)s,X description %(description)s,X ordernum %(ordernum)s,X relation_type ER,X from_entity SE,X to_entity OE WHERE SE name %(se)s,ER name %(rt)s,OE name %(oe)s', |
|
66 {'rt': 'add_permission', 'description': u'rql expression allowing to add entities/relations of this type', 'composite': 'subject', 'oe': 'RQLExpression', 'ordernum': 5, 'cardinality': u'*?', 'se': 'ERType'}), |
|
67 |
|
68 ('INSERT ENFRDef X: X cardinality %(cardinality)s,X composite %(composite)s,X description %(description)s,X ordernum %(ordernum)s,X relation_type ER,X from_entity SE,X to_entity OE WHERE SE name %(se)s,ER name %(rt)s,OE name %(oe)s', |
|
69 {'rt': 'add_permission', 'description': u'groups allowed to add entities/relations of this type', 'composite': None, 'oe': 'EGroup', 'ordernum': 3, 'cardinality': u'**', 'se': 'EEType'}), |
|
70 ('INSERT ENFRDef X: X cardinality %(cardinality)s,X composite %(composite)s,X description %(description)s,X ordernum %(ordernum)s,X relation_type ER,X from_entity SE,X to_entity OE WHERE SE name %(se)s,ER name %(rt)s,OE name %(oe)s', |
|
71 {'rt': 'add_permission', 'description': u'groups allowed to add entities/relations of this type', 'composite': None, 'oe': 'EGroup', 'ordernum': 3, 'cardinality': u'**', 'se': 'ERType'}), |
|
72 ] |
|
73 for i, (rql, args) in enumerate(rschema2rql(schema.rschema('add_permission'))): |
|
74 yield self.assertEquals, (rql, args), expected[i] |
|
75 |
|
76 def test_rschema2rql3(self): |
|
77 self.assertListEquals(list(rschema2rql(schema.rschema('cardinality'))), |
|
78 [ |
|
79 ('INSERT ERType X: X description %(description)s,X final %(final)s,X fulltext_container %(fulltext_container)s,X inlined %(inlined)s,X meta %(meta)s,X name %(name)s,X symetric %(symetric)s', |
|
80 {'description': u'', 'meta': False, 'symetric': False, 'name': u'cardinality', 'final': True, 'fulltext_container': None, 'inlined': False}), |
|
81 |
|
82 ('INSERT EFRDef X: X cardinality %(cardinality)s,X defaultval %(defaultval)s,X description %(description)s,X fulltextindexed %(fulltextindexed)s,X indexed %(indexed)s,X internationalizable %(internationalizable)s,X ordernum %(ordernum)s,X relation_type ER,X from_entity SE,X to_entity OE WHERE SE name %(se)s,ER name %(rt)s,OE name %(oe)s', |
|
83 {'rt': 'cardinality', 'description': u'subject/object cardinality', 'internationalizable': True, 'fulltextindexed': False, 'ordernum': 5, 'defaultval': None, 'indexed': False, 'cardinality': u'?1', 'oe': 'String', 'se': 'EFRDef'}), |
|
84 ('INSERT EConstraint X: X value %(value)s, X cstrtype CT, EDEF constrained_by X WHERE CT name %(ctname)s, EDEF relation_type ER, EDEF from_entity SE, EDEF to_entity OE, ER name %(rt)s, SE name %(se)s, OE name %(oe)s, EDEF is EFRDef', |
|
85 {'rt': 'cardinality', 'oe': 'String', 'ctname': u'SizeConstraint', 'se': 'EFRDef', 'value': u'max=2'}), |
|
86 ('INSERT EConstraint X: X value %(value)s, X cstrtype CT, EDEF constrained_by X WHERE CT name %(ctname)s, EDEF relation_type ER, EDEF from_entity SE, EDEF to_entity OE, ER name %(rt)s, SE name %(se)s, OE name %(oe)s, EDEF is EFRDef', |
|
87 {'rt': 'cardinality', 'oe': 'String', 'ctname': u'StaticVocabularyConstraint', 'se': 'EFRDef', 'value': u"u'?1', u'11', u'??', u'1?'"}), |
|
88 |
|
89 ('INSERT EFRDef X: X cardinality %(cardinality)s,X defaultval %(defaultval)s,X description %(description)s,X fulltextindexed %(fulltextindexed)s,X indexed %(indexed)s,X internationalizable %(internationalizable)s,X ordernum %(ordernum)s,X relation_type ER,X from_entity SE,X to_entity OE WHERE SE name %(se)s,ER name %(rt)s,OE name %(oe)s', |
|
90 {'rt': 'cardinality', 'description': u'subject/object cardinality', 'internationalizable': True, 'fulltextindexed': False, 'ordernum': 5, 'defaultval': None, 'indexed': False, 'cardinality': u'?1', 'oe': 'String', 'se': 'ENFRDef'}), |
|
91 ('INSERT EConstraint X: X value %(value)s, X cstrtype CT, EDEF constrained_by X WHERE CT name %(ctname)s, EDEF relation_type ER, EDEF from_entity SE, EDEF to_entity OE, ER name %(rt)s, SE name %(se)s, OE name %(oe)s, EDEF is EFRDef', |
|
92 {'rt': 'cardinality', 'oe': 'String', 'ctname': u'SizeConstraint', 'se': 'ENFRDef', 'value': u'max=2'}), |
|
93 ('INSERT EConstraint X: X value %(value)s, X cstrtype CT, EDEF constrained_by X WHERE CT name %(ctname)s, EDEF relation_type ER, EDEF from_entity SE, EDEF to_entity OE, ER name %(rt)s, SE name %(se)s, OE name %(oe)s, EDEF is EFRDef', |
|
94 {'rt': 'cardinality', 'oe': 'String', 'ctname': u'StaticVocabularyConstraint', 'se': 'ENFRDef', 'value': u"u'?*', u'1*', u'+*', u'**', u'?+', u'1+', u'++', u'*+', u'?1', u'11', u'+1', u'*1', u'??', u'1?', u'+?', u'*?'"}), |
|
95 ]) |
|
96 |
|
97 |
|
98 def test_updateeschema2rql1(self): |
|
99 self.assertListEquals(list(updateeschema2rql(schema.eschema('EFRDef'))), |
|
100 [('SET X description %(description)s,X final %(final)s,X meta %(meta)s,X name %(name)s WHERE X is EEType, X name %(et)s', |
|
101 {'description': u'define a final relation: link a final relation type from a non final entity to a final entity type. used to build the application schema', 'meta': True, 'et': 'EFRDef', 'final': False, 'name': u'EFRDef'}), |
|
102 ]) |
|
103 |
|
104 def test_updateeschema2rql2(self): |
|
105 self.assertListEquals(list(updateeschema2rql(schema.eschema('String'))), |
|
106 [('SET X description %(description)s,X final %(final)s,X meta %(meta)s,X name %(name)s WHERE X is EEType, X name %(et)s', |
|
107 {'description': u'', 'meta': True, 'et': 'String', 'final': True, 'name': u'String'}) |
|
108 ]) |
|
109 |
|
110 def test_updaterschema2rql1(self): |
|
111 self.assertListEquals(list(updaterschema2rql(schema.rschema('relation_type'))), |
|
112 [ |
|
113 ('SET X description %(description)s,X final %(final)s,X fulltext_container %(fulltext_container)s,X inlined %(inlined)s,X meta %(meta)s,X name %(name)s,X symetric %(symetric)s WHERE X is ERType, X name %(rt)s', |
|
114 {'rt': 'relation_type', 'symetric': False, |
|
115 'description': u'link a relation definition to its relation type', |
|
116 'meta': True, 'final': False, 'fulltext_container': None, 'inlined': True, 'name': u'relation_type'}) |
|
117 ]) |
|
118 |
|
119 def test_updaterschema2rql2(self): |
|
120 expected = [ |
|
121 ('SET X description %(description)s,X final %(final)s,X fulltext_container %(fulltext_container)s,X inlined %(inlined)s,X meta %(meta)s,X name %(name)s,X symetric %(symetric)s WHERE X is ERType, X name %(rt)s', |
|
122 {'rt': 'add_permission', 'symetric': False, |
|
123 'description': u'core relation giving to a group the permission to add an entity or relation type', |
|
124 'meta': True, 'final': False, 'fulltext_container': None, 'inlined': False, 'name': u'add_permission'}) |
|
125 ] |
|
126 for i, (rql, args) in enumerate(updaterschema2rql(schema.rschema('add_permission'))): |
|
127 yield self.assertEquals, (rql, args), expected[i] |
|
128 |
|
129 class Perms2RQLTC(TestCase): |
|
130 GROUP_MAPPING = { |
|
131 'managers': 0, |
|
132 'users': 1, |
|
133 'guests': 2, |
|
134 'owners': 3, |
|
135 } |
|
136 |
|
137 def test_eperms2rql1(self): |
|
138 self.assertListEquals([rql for rql, kwargs in erperms2rql(schema.eschema('EEType'), self.GROUP_MAPPING)], |
|
139 ['SET X read_permission Y WHERE X is EEType, X name "EEType", Y eid 2', |
|
140 'SET X read_permission Y WHERE X is EEType, X name "EEType", Y eid 0', |
|
141 'SET X read_permission Y WHERE X is EEType, X name "EEType", Y eid 1', |
|
142 'SET X add_permission Y WHERE X is EEType, X name "EEType", Y eid 0', |
|
143 'SET X update_permission Y WHERE X is EEType, X name "EEType", Y eid 0', |
|
144 'SET X update_permission Y WHERE X is EEType, X name "EEType", Y eid 3', |
|
145 'SET X delete_permission Y WHERE X is EEType, X name "EEType", Y eid 0', |
|
146 ]) |
|
147 |
|
148 def test_rperms2rql2(self): |
|
149 self.assertListEquals([rql for rql, kwargs in erperms2rql(schema.rschema('read_permission'), self.GROUP_MAPPING)], |
|
150 ['SET X read_permission Y WHERE X is ERType, X name "read_permission", Y eid 2', |
|
151 'SET X read_permission Y WHERE X is ERType, X name "read_permission", Y eid 0', |
|
152 'SET X read_permission Y WHERE X is ERType, X name "read_permission", Y eid 1', |
|
153 'SET X add_permission Y WHERE X is ERType, X name "read_permission", Y eid 0', |
|
154 'SET X delete_permission Y WHERE X is ERType, X name "read_permission", Y eid 0', |
|
155 ]) |
|
156 |
|
157 def test_rperms2rql3(self): |
|
158 self.assertListEquals([rql for rql, kwargs in erperms2rql(schema.rschema('name'), self.GROUP_MAPPING)], |
|
159 ['SET X read_permission Y WHERE X is ERType, X name "name", Y eid 2', |
|
160 'SET X read_permission Y WHERE X is ERType, X name "name", Y eid 0', |
|
161 'SET X read_permission Y WHERE X is ERType, X name "name", Y eid 1', |
|
162 'SET X add_permission Y WHERE X is ERType, X name "name", Y eid 2', |
|
163 'SET X add_permission Y WHERE X is ERType, X name "name", Y eid 0', |
|
164 'SET X add_permission Y WHERE X is ERType, X name "name", Y eid 1', |
|
165 'SET X delete_permission Y WHERE X is ERType, X name "name", Y eid 2', |
|
166 'SET X delete_permission Y WHERE X is ERType, X name "name", Y eid 0', |
|
167 'SET X delete_permission Y WHERE X is ERType, X name "name", Y eid 1', |
|
168 ]) |
|
169 |
|
170 #def test_perms2rql(self): |
|
171 # self.assertListEquals(perms2rql(schema, self.GROUP_MAPPING), |
|
172 # ['INSERT EEType X: X name 'Societe', X final FALSE']) |
|
173 |
|
174 |
|
175 |
|
176 if __name__ == '__main__': |
|
177 unittest_main() |