コード例 #1
0
    def test_get_root_group_when_not_allowed(self):
        """Récupération des groupes racines de l'arbre sans les droits"""
        # Récupération du groupe utilisé lors de ce test.
        SupItemGroup.by_group_name(u'root')

        # Création d'un nouvel utilisateur et d'un nouveau groupe
        usergroup = UserGroup(group_name=u'new_users')
        vigiboard_perm = Permission.by_permission_name(u'vigiboard-access')
        usergroup.permissions.append(vigiboard_perm)
        user = User(
            user_name=u'new_user',
            fullname=u'',
            email=u'user.has.no@access',
        )
        user.usergroups.append(usergroup)
        DBSession.add(user)
        DBSession.flush()
        transaction.commit()

        # L'utilisateur est authentifié mais n'a aucun accès. Il
        # cherche à obtenir la liste des groupes racines de l'arbre.
        response = self.app.get('/get_groups',
            extra_environ={'REMOTE_USER': '******'})
        json = response.json

        # On s'assure que la liste retournée est bien vide.
        self.assertEqual(
            json, {
                'items': [],
                'groups': []
            }
        )
コード例 #2
0
    def test_search_supitemgroup_when_disallowed(self):
        """Teste la recherche par supitemgroup SANS les droits d'accès."""

        # On récupère le groupe de supitems utilisé lors de ce test.
        group2 = SupItemGroup.by_group_name(u'group2')

        # L'utilisateur n'est pas authentifié.
        response = self.app.get('/', status=401)

        # L'utilisateur est authentifié avec des permissions réduites.
        # Il effectue une recherche sur un groupe de supitems auquel il
        # n'a pas accès, mais qui est le fils du groupe parent d'un groupe
        # auquel il a accès. Il ne doit donc obtenir aucun résultat.
        environ = {'REMOTE_USER': '******'}
        response = self.app.get(
            '/?supitemgroup=%d' % group2.idgroup,
            extra_environ=environ
        )

        # Il doit y avoir 1 seule ligne dans la réponse.
        # (la réponse contient le texte "Il n'y a aucun événément", traduit)
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
        print "There are %d rows in the result set" % len(rows)
        assert_equal(len(rows), 1)

        # Il doit y avoir 1 seule colonne dans la réponse.
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
        print "There are %d columns in the result set" % len(cols)
        assert_equal(len(cols), 1)
コード例 #3
0
    def test_get_group_anonymous(self):
        """Récupération de l'étage de l'arbre en anonyme"""
        # Récupération du groupe utilisé lors de ce test.
        group2 = SupItemGroup.by_group_name(u'group2')

        # L'utilisateur n'est pas authentifié.
        # Il cherche à obtenir la liste des groupes fils d'un groupe donné.
        self.app.get('/get_groups?parent_id=%d' % group2.idgroup,
            status=401)
コード例 #4
0
    def test_get_root_group_when_allowed(self):
        """Récupération des groupes racines de l'arbre avec les droits"""

        # Récupération du groupe utilisé lors de ce test.
        root = SupItemGroup.by_group_name(u'root')

        # L'utilisateur est authentifié et fait partie du groupe 'managers'.
        # Il cherche à obtenir la liste des groupes racines de l'arbre.
        response = self.app.get('/get_groups',
            extra_environ={'REMOTE_USER': '******'})
        json = response.json

        # On s'assure que la liste retournée contient bien le groupe racine.
        self.assertEqual(
            json, {
                'items': [],
                'groups': [
                    {'id': root.idgroup, 'name': root.name, 'type': 'group'}
                ]
            }
        )

        # L'utilisateur est authentifié avec des permissions étendues.
        # Il cherche à obtenir la liste des groupes racines de l'arbre.
        response = self.app.get('/get_groups',
            extra_environ={'REMOTE_USER': '******'})
        json = response.json

        # On s'assure que la liste retournée contient bien le
        # groupe racine, auquel cet utilisateur a directement accès.
        self.assertEqual(
            json, {
                'items': [],
                'groups': [
                    {'id': root.idgroup, 'name': root.name, 'type': 'group'}
                ]
            }
        )

        # L'utilisateur est authentifié avec des permissions restreintes.
        # Il cherche à obtenir la liste des groupes racines de l'arbre.
        response = self.app.get('/get_groups',
            extra_environ={'REMOTE_USER': '******'})
        json = response.json

        # On s'assure que la liste retournée contient bien le
        # groupe racine, auquel cet utilisateur a indirectement accès.
        self.assertEqual(
            json, {
                'items': [],
                'groups': [
                    {'id': root.idgroup, 'name': root.name, 'type': 'group'}
                ]
            }
        )
コード例 #5
0
    def test_get_group_when_not_allowed(self):
        """Récupération de l'étage de l'arbre sans les droits"""

        # Récupération du groupe utilisé lors de ce test.
        group2 = SupItemGroup.by_group_name(u'group2')

        # L'utilisateur est authentifié avec des permissions
        # restreintes. Il cherche à obtenir la liste des groupes fils
        # d'un groupe auquel il n'a pas accès, même indirectement.
        response = self.app.get('/get_groups?parent_id=%d' % group2.idgroup,
            extra_environ={'REMOTE_USER': '******'})
        json = response.json

        # On s'assure que la liste de groupes retournée est bien vide
        self.assertEqual(
            json, {'items': [], 'groups': []}
        )
コード例 #6
0
    def test_get_group_when_allowed(self):
        """Récupération de l'étage de l'arbre avec les droits"""

        # Récupération des groupes utilisés lors de ce test.
        root = SupItemGroup.by_group_name(u'root')
        maingroup = SupItemGroup.by_group_name(u'maingroup')
        group1 = SupItemGroup.by_group_name(u'group1')
        group2 = SupItemGroup.by_group_name(u'group2')

        # L'utilisateur est authentifié et fait partie du groupe 'managers'.
        # Il cherche à obtenir la liste des groupes fils d'un groupe donné.
        response = self.app.get('/get_groups?parent_id=%d' % root.idgroup,
            extra_environ={'REMOTE_USER': '******'})
        json = response.json

        # On s'assure que la liste retournée contient
        # bien les groupes fils de ce groupe parent
        self.assertEqual(
            json, {
                'items': [],
                'groups': [
                    {'id': maingroup.idgroup, 'name': maingroup.name, 'type': 'group'}
                ]
            }
        )

        # L'utilisateur est authentifié avec des permissions
        # étendues. Il cherche à obtenir la liste des groupes
        # fils d'un groupe auquel il a directement accès.
        response = self.app.get('/get_groups?parent_id=%d' % root.idgroup,
            extra_environ={'REMOTE_USER': '******'})
        json = response.json

        # On s'assure que la liste retournée contient
        # bien les groupes fils de ce groupe parent
        self.assertEqual(
            json, {
                'items': [],
                'groups': [
                    {'id': maingroup.idgroup, 'name': maingroup.name, 'type': 'group'}
                ]
            }
        )

        # Le même utilisateur cherche à obtenir la liste des
        # groupes fils d'un groupe auquel il a indirectement accès.
        response = self.app.get('/get_groups?parent_id=%d' % maingroup.idgroup,
            extra_environ={'REMOTE_USER': '******'})
        json = response.json

        # On s'assure que la liste retournée contient
        # bien les groupes fils de ce groupe parent.
        self.assertEqual(json, {
                'items': [],
                'groups': [
                    {'id': group1.idgroup, 'name': group1.name, 'type': 'group'},
                    {'id': group2.idgroup, 'name': group2.name, 'type': 'group'}
                ]
            })

        # L'utilisateur est authentifié avec des permissions
        # restreintes. Il cherche à obtenir la liste des groupes
        # fils d'un groupe auquel il n'a pas accès, mais a toutefois
        # le droit d'accéder à un des groupes fils en question.
        response = self.app.get('/get_groups?parent_id=%d' % maingroup.idgroup,
            extra_environ={'REMOTE_USER': '******'})
        json = response.json

        # On s'assure que la liste retournée contient bien ce groupe fils.
        self.assertEqual(
            json, {
                'items': [],
                'groups': [
                    {'id': group1.idgroup, 'name': group1.name, 'type': 'group'}
                ]
            }
        )

        # Le même utilisateur cherche à obtenir la liste des groupes
        # fils d'un groupe de niveau encore supérieur.
        response = self.app.get('/get_groups?parent_id=%d' % root.idgroup,
            extra_environ={'REMOTE_USER': '******'})
        json = response.json

        # On s'assure que la liste retournée contient bien
        # le groupe parent du groupe auquel il a accès.
        self.assertEqual(
            json, {
                'items': [],
                'groups': [
                    {'id': maingroup.idgroup, 'name': maingroup.name, 'type': 'group'}
                ]
            }
        )
コード例 #7
0
    def test_search_supitemgroup_when_allowed(self):
        """Teste la recherche par supitemgroup avec les bons droits d'accès."""

        # On récupère les 3 groupes de supitems utilisés lors de ces tests.
        root = SupItemGroup.by_group_name(u'root')
        maingroup = SupItemGroup.by_group_name(u'maingroup')
        group1 = SupItemGroup.by_group_name(u'group1')

        # L'utilisateur est authentifié avec des permissions réduites.
        # Il effectue une recherche sur un groupe de supitems auquel
        # il a accès, on s'attend à ce que la requête retourne 2 résultats.
        environ = {'REMOTE_USER': '******'}
        response = self.app.get(
            '/?supitemgroup=%d' % group1.idgroup,
            extra_environ=environ
        )

        # Il doit y avoir 2 lignes dans la réponse.
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
        print "There are %d rows in the result set" % len(rows)
        assert_equal(len(rows), 2)

        # Il doit y avoir plusieurs colonnes dans la réponse.
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
        print "There are %d columns in the result set" % len(cols)
        assert_true(len(cols) > 1)

        # Le même utilisateur effectue une recherche sur un groupe de supitems
        # auquel il n'a pas accès, mais qui est parent du groupe précédent.
        # On s'attend donc à ce que la requête retourne également 2 résultats.
        environ = {'REMOTE_USER': '******'}
        response = self.app.get(
            '/?supitemgroup=%d' % maingroup.idgroup,
            extra_environ=environ
        )

        # Il doit y avoir 2 lignes dans la réponse.
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
        print "There are %d rows in the result set" % len(rows)
        assert_equal(len(rows), 2)

        # Il doit y avoir plusieurs colonnes dans la réponse.
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
        print "There are %d columns in the result set" % len(cols)
        assert_true(len(cols) > 1)

        # Le même utilisateur effectue une recherche à partir du groupe racine.
        # On s'attend donc à ce que la requête retourne également 2 résultats.
        environ = {'REMOTE_USER': '******'}
        response = self.app.get(
            '/?supitemgroup=%d' % root.idgroup,
            extra_environ=environ
        )

        # Il doit y avoir 2 lignes dans la réponse.
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
        print "There are %d rows in the result set" % len(rows)
        assert_equal(len(rows), 2)

        # Il doit y avoir plusieurs colonnes dans la réponse.
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
        print "There are %d columns in the result set" % len(cols)
        assert_true(len(cols) > 1)

        # L'utilisateur est authentifié avec des permissions plus étendues.
        # Il effectue une recherche sur un groupe de supitems auquel
        # il a accès, on s'attend à ce que la requête retourne 5 résultats,
        # dont 4 grâce à l'héritage de permissions entre les groupes.
        environ = {'REMOTE_USER': '******'}
        response = self.app.get(
            '/?supitemgroup=%d' % maingroup.idgroup,
            extra_environ=environ
        )

        # Il doit y avoir 5 lignes dans la réponse.
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
        print "There are %d rows in the result set" % len(rows)
        assert_equal(len(rows), 5)

        # Il doit y avoir plusieurs colonnes dans la réponse.
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
        print "There are %d columns in the result set" % len(cols)
        assert_true(len(cols) > 1)

        # L'utilisateur est authentifié et fait partie du groupe
        # 'managers'. Il effectue une recherche sur un groupe de supitems,
        # et on s'attend à ce que la requête retourne 5 résultats.
        environ = {'REMOTE_USER': '******'}
        response = self.app.get(
            '/?supitemgroup=%d' % maingroup.idgroup,
            extra_environ=environ
        )

        # Il doit y avoir 5 lignes dans la réponse.
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
        print "There are %d rows in the result set" % len(rows)
        assert_equal(len(rows), 5)

        # Il doit y avoir plusieurs colonnes dans la réponse.
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
        print "There are %d columns in the result set" % len(cols)
        assert_true(len(cols) > 1)