server/test/unittest_migractions.py
changeset 4191 01638461d4b0
parent 4103 dc04bede3502
child 4635 44a883148ab4
equal deleted inserted replaced
4190:742e3eb16f81 4191:01638461d4b0
   286         migrschema['adel'].rdefs[('Personne', 'String')].order = 6
   286         migrschema['adel'].rdefs[('Personne', 'String')].order = 6
   287         migrschema['ass'].rdefs[('Personne', 'String')].order = 5
   287         migrschema['ass'].rdefs[('Personne', 'String')].order = 5
   288         migrschema['Personne'].description = 'blabla bla'
   288         migrschema['Personne'].description = 'blabla bla'
   289         migrschema['titre'].description = 'usually a title'
   289         migrschema['titre'].description = 'usually a title'
   290         migrschema['titre'].rdefs[('Personne', 'String')].description = 'title for this person'
   290         migrschema['titre'].rdefs[('Personne', 'String')].description = 'title for this person'
       
   291         delete_concerne_rqlexpr = self._rrqlexpr_rset('delete', 'concerne')
       
   292         add_concerne_rqlexpr = self._rrqlexpr_rset('add', 'concerne')
   291         self.mh.cmd_sync_schema_props_perms(commit=False)
   293         self.mh.cmd_sync_schema_props_perms(commit=False)
   292 
   294 
   293         self.assertEquals(cursor.execute('Any D WHERE X name "Personne", X description D')[0][0],
   295         self.assertEquals(cursor.execute('Any D WHERE X name "Personne", X description D')[0][0],
   294                           'blabla bla')
   296                           'blabla bla')
   295         self.assertEquals(cursor.execute('Any D WHERE X name "titre", X description D')[0][0],
   297         self.assertEquals(cursor.execute('Any D WHERE X name "titre", X description D')[0][0],
   323         # new rql expr to add ecrit_par relation
   325         # new rql expr to add ecrit_par relation
   324         rexpr = self._rrqlexpr_entity('add', 'ecrit_par')
   326         rexpr = self._rrqlexpr_entity('add', 'ecrit_par')
   325         self.assertEquals(rexpr.expression,
   327         self.assertEquals(rexpr.expression,
   326                           'O require_permission P, P name "add_note", '
   328                           'O require_permission P, P name "add_note", '
   327                           'U in_group G, P require_group G')
   329                           'U in_group G, P require_group G')
   328         self.assertEquals([rt.name for rt in rexpr.reverse_add_permission], ['ecrit_par'])
   330         self.assertEquals([rdef.rtype.name for rdef in rexpr.reverse_add_permission], ['ecrit_par'])
   329         self.assertEquals(rexpr.reverse_read_permission, ())
   331         self.assertEquals(rexpr.reverse_read_permission, ())
   330         self.assertEquals(rexpr.reverse_delete_permission, ())
   332         self.assertEquals(rexpr.reverse_delete_permission, ())
   331         # no more rqlexpr to delete and add travaille relation
   333         # no more rqlexpr to delete and add travaille relation
   332         self.failIf(self._rrqlexpr_rset('add', 'travaille'))
   334         self.failIf(self._rrqlexpr_rset('add', 'travaille'))
   333         self.failIf(self._rrqlexpr_rset('delete', 'travaille'))
   335         self.failIf(self._rrqlexpr_rset('delete', 'travaille'))
   341         self.assertEquals(eexpr.expression, 'X concerne S, S owned_by U')
   343         self.assertEquals(eexpr.expression, 'X concerne S, S owned_by U')
   342         # no change for rqlexpr to add and delete Affaire entity
   344         # no change for rqlexpr to add and delete Affaire entity
   343         self.assertEquals(len(self._erqlexpr_rset('delete', 'Affaire')), 1)
   345         self.assertEquals(len(self._erqlexpr_rset('delete', 'Affaire')), 1)
   344         self.assertEquals(len(self._erqlexpr_rset('add', 'Affaire')), 1)
   346         self.assertEquals(len(self._erqlexpr_rset('add', 'Affaire')), 1)
   345         # no change for rqlexpr to add and delete concerne relation
   347         # no change for rqlexpr to add and delete concerne relation
   346         self.assertEquals(len(self._rrqlexpr_rset('delete', 'concerne')), 1)
   348         for rdef in self.schema['concerne'].rdefs.values():
   347         self.assertEquals(len(self._rrqlexpr_rset('add', 'concerne')), 1)
   349             print rdef, rdef.permissions
       
   350         self.assertEquals(len(self._rrqlexpr_rset('delete', 'concerne')), len(delete_concerne_rqlexpr))
       
   351         self.assertEquals(len(self._rrqlexpr_rset('add', 'concerne')), len(add_concerne_rqlexpr))
   348         # * migrschema involve:
   352         # * migrschema involve:
   349         #   * 8 deletion (2 in Affaire read + Societe + travaille + para rqlexprs)
   353         #   * 8 deletion (2 in Affaire read + Societe + travaille + para rqlexprs)
   350         #   * 1 update (Affaire update)
   354         #   * 1 update (Affaire update)
   351         #   * 2 new (Note add, ecrit_par add)
   355         #   * 2 new (Note add, ecrit_par add)
   352         # remaining orphan rql expr which should be deleted at commit (composite relation)
   356         # remaining orphan rql expr which should be deleted at commit (composite relation)
   363     def _erqlexpr_entity(self, action, ertype):
   367     def _erqlexpr_entity(self, action, ertype):
   364         rset = self._erqlexpr_rset(action, ertype)
   368         rset = self._erqlexpr_rset(action, ertype)
   365         self.assertEquals(len(rset), 1)
   369         self.assertEquals(len(rset), 1)
   366         return rset.get_entity(0, 0)
   370         return rset.get_entity(0, 0)
   367     def _rrqlexpr_rset(self, action, ertype):
   371     def _rrqlexpr_rset(self, action, ertype):
   368         rql = 'RQLExpression X WHERE ET is CWRType, ET %s_permission X, ET name %%(name)s' % action
   372         rql = 'RQLExpression X WHERE RT is CWRType, RDEF %s_permission X, RT name %%(name)s, RDEF relation_type RT' % action
   369         return self.mh.session.execute(rql, {'name': ertype})
   373         return self.mh.session.execute(rql, {'name': ertype})
   370     def _rrqlexpr_entity(self, action, ertype):
   374     def _rrqlexpr_entity(self, action, ertype):
   371         rset = self._rrqlexpr_rset(action, ertype)
   375         rset = self._rrqlexpr_rset(action, ertype)
   372         self.assertEquals(len(rset), 1)
   376         self.assertEquals(len(rset), 1)
   373         return rset.get_entity(0, 0)
   377         return rset.get_entity(0, 0)