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) |