server/test/unittest_migractions.py
changeset 3293 69c0ba095536
parent 3163 edfe43ceaa35
parent 3267 320a715e2a22
child 3369 7b88d12b4ee2
equal deleted inserted replaced
3230:1d25e928c299 3293:69c0ba095536
    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'])