49 self.mh = ServerMigrationHelper(self.repo.config, migrschema, |
49 self.mh = ServerMigrationHelper(self.repo.config, migrschema, |
50 repo=self.repo, cnx=self.cnx, |
50 repo=self.repo, cnx=self.cnx, |
51 interactive=False) |
51 interactive=False) |
52 assert self.cnx is self.mh._cnx |
52 assert self.cnx is self.mh._cnx |
53 assert self.session is self.mh.session, (self.session.id, self.mh.session.id) |
53 assert self.session is self.mh.session, (self.session.id, self.mh.session.id) |
|
54 |
54 |
55 |
55 def test_add_attribute_int(self): |
56 def test_add_attribute_int(self): |
56 self.failIf('whatever' in self.schema) |
57 self.failIf('whatever' in self.schema) |
57 orderdict = dict(self.mh.rqlexec('Any RTN, O WHERE X name "Note", RDEF from_entity X, ' |
58 orderdict = dict(self.mh.rqlexec('Any RTN, O WHERE X name "Note", RDEF from_entity X, ' |
58 'RDEF relation_type RT, RDEF ordernum O, RT name RTN')) |
59 'RDEF relation_type RT, RDEF ordernum O, RT name RTN')) |
135 self.mh.cmd_add_entity_type('Folder2') |
136 self.mh.cmd_add_entity_type('Folder2') |
136 self.failUnless('Folder2' in self.schema) |
137 self.failUnless('Folder2' in self.schema) |
137 self.failUnless(self.execute('CWEType X WHERE X name "Folder2"')) |
138 self.failUnless(self.execute('CWEType X WHERE X name "Folder2"')) |
138 self.failUnless('filed_under2' in self.schema) |
139 self.failUnless('filed_under2' in self.schema) |
139 self.failUnless(self.execute('CWRType X WHERE X name "filed_under2"')) |
140 self.failUnless(self.execute('CWRType X WHERE X name "filed_under2"')) |
|
141 self.schema.rebuild_infered_relations() |
140 self.assertEquals(sorted(str(rs) for rs in self.schema['Folder2'].subject_relations()), |
142 self.assertEquals(sorted(str(rs) for rs in self.schema['Folder2'].subject_relations()), |
141 ['created_by', 'creation_date', 'cwuri', |
143 ['created_by', 'creation_date', 'cwuri', |
142 'description', 'description_format', |
144 'description', 'description_format', |
143 'eid', |
145 'eid', |
144 'filed_under2', 'has_text', |
146 'filed_under2', 'has_text', |
153 for cstr in eschema.constraints('name'): |
155 for cstr in eschema.constraints('name'): |
154 self.failUnless(hasattr(cstr, 'eid')) |
156 self.failUnless(hasattr(cstr, 'eid')) |
155 |
157 |
156 def test_add_drop_entity_type(self): |
158 def test_add_drop_entity_type(self): |
157 self.mh.cmd_add_entity_type('Folder2') |
159 self.mh.cmd_add_entity_type('Folder2') |
158 todoeid = self.mh.cmd_add_state(u'todo', 'Folder2', initial=True) |
160 wf = self.mh.cmd_add_workflow(u'folder2 wf', 'Folder2') |
159 doneeid = self.mh.cmd_add_state(u'done', 'Folder2') |
161 todo = wf.add_state(u'todo', initial=True) |
160 self.mh.cmd_add_transition(u'redoit', 'Folder2', (doneeid,), todoeid) |
162 done = wf.add_state(u'done') |
161 self.mh.cmd_add_transition(u'markasdone', 'Folder2', (todoeid,), doneeid) |
163 wf.add_transition(u'redoit', done, todo) |
|
164 wf.add_transition(u'markasdone', todo, done) |
162 self.commit() |
165 self.commit() |
163 eschema = self.schema.eschema('Folder2') |
166 eschema = self.schema.eschema('Folder2') |
164 self.mh.cmd_drop_entity_type('Folder2') |
167 self.mh.cmd_drop_entity_type('Folder2') |
165 self.failIf('Folder2' in self.schema) |
168 self.failIf('Folder2' in self.schema) |
166 self.failIf(self.execute('CWEType X WHERE X name "Folder2"')) |
169 self.failIf(self.execute('CWEType X WHERE X name "Folder2"')) |
170 self.failIf(self.execute('Transition X WHERE NOT X transition_of WF')) |
173 self.failIf(self.execute('Transition X WHERE NOT X transition_of WF')) |
171 |
174 |
172 def test_add_drop_relation_type(self): |
175 def test_add_drop_relation_type(self): |
173 self.mh.cmd_add_entity_type('Folder2', auto=False) |
176 self.mh.cmd_add_entity_type('Folder2', auto=False) |
174 self.mh.cmd_add_relation_type('filed_under2') |
177 self.mh.cmd_add_relation_type('filed_under2') |
|
178 self.schema.rebuild_infered_relations() |
175 self.failUnless('filed_under2' in self.schema) |
179 self.failUnless('filed_under2' in self.schema) |
176 self.assertEquals(sorted(str(e) for e in self.schema['filed_under2'].subjects()), |
180 self.assertEquals(sorted(str(e) for e in self.schema['filed_under2'].subjects()), |
177 sorted(str(e) for e in self.schema.entities() if not e.is_final())) |
181 sorted(str(e) for e in self.schema.entities() if not e.is_final())) |
178 self.assertEquals(self.schema['filed_under2'].objects(), ('Folder2',)) |
182 self.assertEquals(self.schema['filed_under2'].objects(), ('Folder2',)) |
179 self.mh.cmd_drop_relation_type('filed_under2') |
183 self.mh.cmd_drop_relation_type('filed_under2') |
187 ('Affaire', )) |
191 ('Affaire', )) |
188 self.assertEquals(self.schema['concerne2'].rproperty('Personne', 'Affaire', 'cardinality'), |
192 self.assertEquals(self.schema['concerne2'].rproperty('Personne', 'Affaire', 'cardinality'), |
189 '1*') |
193 '1*') |
190 self.mh.cmd_add_relation_definition('Personne', 'concerne2', 'Note') |
194 self.mh.cmd_add_relation_definition('Personne', 'concerne2', 'Note') |
191 self.assertEquals(sorted(self.schema['concerne2'].objects()), ['Affaire', 'Note']) |
195 self.assertEquals(sorted(self.schema['concerne2'].objects()), ['Affaire', 'Note']) |
192 self.mh.add_entity('Personne', nom=u'tot') |
196 self.mh.create_entity('Personne', nom=u'tot') |
193 self.mh.add_entity('Affaire') |
197 self.mh.create_entity('Affaire') |
194 self.mh.rqlexec('SET X concerne2 Y WHERE X is Personne, Y is Affaire') |
198 self.mh.rqlexec('SET X concerne2 Y WHERE X is Personne, Y is Affaire') |
195 self.commit() |
199 self.commit() |
196 self.mh.cmd_drop_relation_definition('Personne', 'concerne2', 'Affaire') |
200 self.mh.cmd_drop_relation_definition('Personne', 'concerne2', 'Affaire') |
197 self.failUnless('concerne2' in self.schema) |
201 self.failUnless('concerne2' in self.schema) |
198 self.mh.cmd_drop_relation_definition('Personne', 'concerne2', 'Note') |
202 self.mh.cmd_drop_relation_definition('Personne', 'concerne2', 'Note') |
223 ['Affaire', 'Division', 'Note', 'Societe', 'SubDivision']) |
227 ['Affaire', 'Division', 'Note', 'Societe', 'SubDivision']) |
224 self.mh.cmd_drop_relation_definition('Affaire', 'concerne', 'Societe') |
228 self.mh.cmd_drop_relation_definition('Affaire', 'concerne', 'Societe') |
225 self.assertEquals(sorted(str(e) for e in self.schema['concerne'].subjects()), |
229 self.assertEquals(sorted(str(e) for e in self.schema['concerne'].subjects()), |
226 ['Affaire', 'Personne']) |
230 ['Affaire', 'Personne']) |
227 self.assertEquals(sorted(str(e) for e in self.schema['concerne'].objects()), |
231 self.assertEquals(sorted(str(e) for e in self.schema['concerne'].objects()), |
|
232 ['Affaire', 'Division', 'Note', 'SubDivision']) |
|
233 self.schema.rebuild_infered_relations() # need to be explicitly called once everything is in place |
|
234 self.assertEquals(sorted(str(e) for e in self.schema['concerne'].objects()), |
228 ['Affaire', 'Note']) |
235 ['Affaire', 'Note']) |
229 self.mh.cmd_add_relation_definition('Affaire', 'concerne', 'Societe') |
236 self.mh.cmd_add_relation_definition('Affaire', 'concerne', 'Societe') |
230 self.assertEquals(sorted(str(e) for e in self.schema['concerne'].subjects()), |
237 self.assertEquals(sorted(str(e) for e in self.schema['concerne'].subjects()), |
231 ['Affaire', 'Personne']) |
238 ['Affaire', 'Personne']) |
|
239 self.assertEquals(sorted(str(e) for e in self.schema['concerne'].objects()), |
|
240 ['Affaire', 'Note', 'Societe']) |
|
241 self.schema.rebuild_infered_relations() # need to be explicitly called once everything is in place |
232 self.assertEquals(sorted(str(e) for e in self.schema['concerne'].objects()), |
242 self.assertEquals(sorted(str(e) for e in self.schema['concerne'].objects()), |
233 ['Affaire', 'Division', 'Note', 'Societe', 'SubDivision']) |
243 ['Affaire', 'Division', 'Note', 'Societe', 'SubDivision']) |
234 # trick: overwrite self.maxeid to avoid deletion of just reintroduced types |
244 # trick: overwrite self.maxeid to avoid deletion of just reintroduced types |
235 self.maxeid = self.execute('Any MAX(X)')[0][0] |
245 self.maxeid = self.execute('Any MAX(X)')[0][0] |
236 |
246 |
459 |
469 |
460 def test_remove_dep_cube(self): |
470 def test_remove_dep_cube(self): |
461 ex = self.assertRaises(ConfigurationError, self.mh.cmd_remove_cube, 'file') |
471 ex = self.assertRaises(ConfigurationError, self.mh.cmd_remove_cube, 'file') |
462 self.assertEquals(str(ex), "can't remove cube file, used as a dependency") |
472 self.assertEquals(str(ex), "can't remove cube file, used as a dependency") |
463 |
473 |
464 def test_set_state(self): |
|
465 user = self.session.user |
|
466 self.mh.set_state(user.eid, 'deactivated') |
|
467 user.clear_related_cache('in_state', 'subject') |
|
468 self.assertEquals(user.state, 'deactivated') |
|
469 |
|
470 def test_introduce_base_class(self): |
474 def test_introduce_base_class(self): |
471 self.mh.cmd_add_entity_type('Para') |
475 self.mh.cmd_add_entity_type('Para') |
472 self.mh.repo.schema.rebuild_infered_relations() |
476 self.mh.repo.schema.rebuild_infered_relations() |
473 self.assertEquals(sorted(et.type for et in self.schema['Para'].specialized_by()), |
477 self.assertEquals(sorted(et.type for et in self.schema['Para'].specialized_by()), |
474 ['Note']) |
478 ['Note']) |