def test_add_single(self): """Ajout de permission sur un seul groupe.""" for (incode, outcode) in commands._permissions.iteritems(): print "Test permission %s" % incode options = NamespaceStub( permission=incode, object_type=self._type, usergroup=self._usergroup.group_name.encode('utf-8'), object_group=self._group1.path.encode('utf-8'), batch=False, update=False, commit=False, # la base de test est en mémoire, # en la committant, on perdrait tout. ) res = commands.cmd_add(options) self.assertEquals(res, 0) # Une seule permission doit exister en base de données. # Elle doit porter sur le groupe 1 définis par le test # et avoir le bon type d'accès. dataperm = DBSession.query(tables.DataPermission).one() self.assertEquals(dataperm.idgroup, self._group1.idgroup) self.assertEquals(dataperm.idusergroup, self._usergroup.idgroup) self.assertEquals(dataperm.access, outcode) # Suppression de la permission pour le test # du type de permission suivant. DBSession.delete(dataperm) DBSession.flush() dataperm = DBSession.query(tables.DataPermission).first() self.assertEquals(dataperm, None)
def test_add_multiple_batch(self): """Ajout permission sur plusieurs groupes en mode batch.""" for (incode, outcode) in commands._permissions.iteritems(): print "Test permission %s" % incode options = NamespaceStub( permission=incode, object_type=self._type, usergroup=self._usergroup.group_name.encode('utf-8'), object_group=self._group1.name.encode('utf-8'), batch=True, update=False, commit=False, # la base de test est en mémoire, # en la committant, on perdrait tout. ) res = commands.cmd_add(options) self.assertEquals(res, 0) # 2 permissions doivent avoir été ajoutées. dataperms = DBSession.query(tables.DataPermission).all() self.assertEquals(2, len(dataperms)) idgroups = [self._group1.idgroup, self._group2.idgroup] for dataperm in dataperms: self.assertTrue(dataperm.idgroup in idgroups) idgroups.remove(dataperm.idgroup) self.assertEquals(dataperm.idusergroup, self._usergroup.idgroup) self.assertEquals(dataperm.access, outcode) # Suppression des permissions pour le test # du type de permission suivant. for dataperm in dataperms: DBSession.delete(dataperm) DBSession.flush() dataperm = DBSession.query(tables.DataPermission).first() self.assertEquals(dataperm, None)
def test_update(self): """Mise à jour des permissions.""" for (incode, outcode) in commands._permissions.iteritems(): print "Test permission %s" % incode # On simule l'existence d'une permission avant le début du test. # Si le test porte sur la permission "lecture seule", alors la # permission existante est en lecture/écriture et vice-versa. existing_perm = (incode == "ro") and "w" or "r" self._add_permission(self._group1, existing_perm) options = NamespaceStub( permission=incode, object_type=self._type, usergroup=self._usergroup.group_name.encode('utf-8'), object_group=self._group1.path.encode('utf-8'), batch=False, update=True, commit=False, # la base de test est en mémoire, # en la committant, on perdrait tout. ) # La demande doit être rejetée car elle rentre # en conflit avec les permissions existantes. res = commands.cmd_add(options) self.assertEquals(res, 0) # Une seule permission doit exister en base de données. dataperm = DBSession.query(tables.DataPermission).one() # Le contenu de la permission doit avoir changé. self.assertEquals(self._usergroup.idgroup, dataperm.idusergroup) self.assertEquals(self._group1.idgroup, dataperm.idgroup) self.assertEquals(outcode, dataperm.access) # Suppression de la permission pour le test # du type de permission suivant. DBSession.delete(dataperm) DBSession.flush() DBSession.expunge_all() # Nécessaire pour éviter que l'ancienne # DataPerm ne soit "vue" à l'itération # suivante. dataperm = DBSession.query(tables.DataPermission).first() self.assertEquals(dataperm, None)
def test_add_multiple_error(self): """Pas de permission sur plusieurs groupes par défaut.""" for incode in commands._permissions: print "Test permission %s" % incode options = NamespaceStub( permission=incode, object_type=self._type, usergroup=self._usergroup.group_name.encode('utf-8'), object_group=self._group1.name.encode('utf-8'), batch=False, update=False, commit=False, # la base de test est en mémoire, # en la committant, on perdrait tout. ) # La commande a été rejetée. res = commands.cmd_add(options) self.assertNotEquals(res, 0) # Aucune permission n'a été ajoutée. dataperm = DBSession.query(tables.DataPermission).first() self.assertEquals(dataperm, None)