Blame tests/test_pagure_flask_ui_app_browse.py

Pierre-Yves Chibon 5872c5
# -*- coding: utf-8 -*-
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
"""
Pierre-Yves Chibon 5872c5
 (c) 2018 - Copyright Red Hat Inc
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
 Authors:
Pierre-Yves Chibon 5872c5
   Pierre-Yves Chibon <pingou@pingoured.fr></pingou@pingoured.fr>
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
"""
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 67d1cc
from __future__ import unicode_literals, absolute_import
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
import unittest
Pierre-Yves Chibon 5872c5
import sys
Pierre-Yves Chibon 5872c5
import os
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
from mock import patch, MagicMock
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 73d120
sys.path.insert(
Pierre-Yves Chibon 73d120
    0, os.path.join(os.path.dirname(os.path.abspath(__file__)), "..")
Pierre-Yves Chibon 73d120
)
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 930073
import pagure.lib.query
Pierre-Yves Chibon 5872c5
import tests
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
class PagureFlaskAppBrowsetests(tests.Modeltests):
Pierre-Yves Chibon 5872c5
    """ Tests for the browse pages of flask app controller of pagure """
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
    def setUp(self):
Pierre-Yves Chibon 5872c5
        """ Set up the environnment, ran before every tests. """
Pierre-Yves Chibon 5872c5
        super(PagureFlaskAppBrowsetests, self).setUp()
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
        tests.create_projects(self.session)
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
        # Add a 3rd project with a long description
Pierre-Yves Chibon 5872c5
        item = pagure.lib.model.Project(
Pierre-Yves Chibon 5872c5
            user_id=2,  # foo
Pierre-Yves Chibon 73d120
            name="test3",
Pierre-Yves Chibon 73d120
            description="test project #3 with a very long description",
Pierre-Yves Chibon 73d120
            hook_token="aaabbbeeefff",
Pierre-Yves Chibon 5872c5
            private=True,
Pierre-Yves Chibon 5872c5
        )
Pierre-Yves Chibon 5872c5
        self.session.add(item)
Pierre-Yves Chibon 5872c5
        self.session.commit()
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 73d120
    @patch.dict("pagure.config.config", {"PRIVATE_PROJECTS": True})
Pierre-Yves Chibon 5872c5
    def test_browse_project_logged_in_private_project(self):
Pierre-Yves Chibon 5872c5
        """ Test the browse project endpoint when logged in with a private
Pierre-Yves Chibon 5872c5
        project. """
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 73d120
        user = tests.FakeUser(username="foo")
Pierre-Yves Chibon 5872c5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon 73d120
            output = self.app.get("/browse/projects/")
Pierre-Yves Chibon 5872c5
            self.assertEqual(output.status_code, 200)
Pierre-Yves Chibon 5872c5
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 73d120
            self.assertIn("<title>Home - Pagure</title>\n", output_text)
Pierre-Yves Chibon 5872c5
            self.assertIn(
Pierre-Yves Chibon 5872c5
                '

All Projects '

Pierre-Yves Chibon 5872c5
                '4',
Pierre-Yves Chibon 73d120
                output_text,
Pierre-Yves Chibon 73d120
            )
Pierre-Yves Chibon 5872c5
            self.assertIn(
Pierre-Yves Chibon 837e8c
                '
Pierre-Yves Chibon 5872c5
                'fa fa-fw fa-lock">',
Pierre-Yves Chibon 73d120
                output_text,
Pierre-Yves Chibon 73d120
            )
Pierre-Yves Chibon 837e8c
            self.assertEqual(output_text.count('title="Private Project"'), 1)
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 73d120
    @patch.dict("pagure.config.config", {"PRIVATE_PROJECTS": True})
Pierre-Yves Chibon 5872c5
    def test_browse_project_unauth_private_project(self):
Pierre-Yves Chibon 5872c5
        """ Test the browse project endpoint when logged out with a private
Pierre-Yves Chibon 5872c5
        project. """
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 73d120
        output = self.app.get("/browse/projects/")
Pierre-Yves Chibon 5872c5
        self.assertEqual(output.status_code, 200)
Pierre-Yves Chibon 5872c5
        output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 73d120
        self.assertIn("<title>Home - Pagure</title>\n", output_text)
Pierre-Yves Chibon 5872c5
        self.assertIn(
Pierre-Yves Chibon 5872c5
            '

All Projects '

Pierre-Yves Chibon 5872c5
            '3',
Pierre-Yves Chibon 73d120
            output_text,
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon 5872c5
        self.assertNotIn(
Pierre-Yves Chibon 837e8c
            '
Pierre-Yves Chibon 5872c5
            'fa fa-fw fa-lock">',
Pierre-Yves Chibon 73d120
            output_text,
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon 837e8c
        self.assertEqual(output_text.count('title="Private Project"'), 0)
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 73d120
    @patch.dict("pagure.config.config", {"PRIVATE_PROJECTS": True})
Pierre-Yves Chibon 5872c5
    def test_browse_project_logged_in_no_access_private_project(self):
Pierre-Yves Chibon 5872c5
        """ Test the browse project endpoint when logged in as an user that
Pierre-Yves Chibon 5872c5
        has no access to the private project. """
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 73d120
        user = tests.FakeUser(username="pingou")
Pierre-Yves Chibon 5872c5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon 73d120
            output = self.app.get("/browse/projects/")
Pierre-Yves Chibon 5872c5
            self.assertEqual(output.status_code, 200)
Pierre-Yves Chibon 5872c5
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 73d120
            self.assertIn("<title>Home - Pagure</title>\n", output_text)
Pierre-Yves Chibon 5872c5
            self.assertIn(
Pierre-Yves Chibon 5872c5
                '

All Projects '

Pierre-Yves Chibon 5872c5
                '3',
Pierre-Yves Chibon 73d120
                output_text,
Pierre-Yves Chibon 73d120
            )
Pierre-Yves Chibon 5872c5
            self.assertNotIn(
Pierre-Yves Chibon 837e8c
                '
Pierre-Yves Chibon 5872c5
                'fa fa-fw fa-lock">',
Pierre-Yves Chibon 73d120
                output_text,
Pierre-Yves Chibon 73d120
            )
Pierre-Yves Chibon 837e8c
            self.assertEqual(output_text.count('title="Private Project"'), 0)
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 73d120
    @patch.dict("pagure.config.config", {"PRIVATE_PROJECTS": True})
Pierre-Yves Chibon 5872c5
    def test_browse_project_logged_in_ticket_private_project(self):
Pierre-Yves Chibon 5872c5
        """ Test the browse project endpoint when logged in as an user that
Pierre-Yves Chibon 5872c5
        has no access to the private project. """
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
        # Add user 'pingou' with ticket access on repo
Pierre-Yves Chibon 73d120
        repo = pagure.lib.query._get_project(self.session, "test3")
Pierre-Yves Chibon 930073
        msg = pagure.lib.query.add_user_to_project(
Pierre-Yves Chibon 73d120
            self.session, repo, new_user="pingou", user="foo", access="ticket"
Pierre-Yves Chibon 5872c5
        )
Pierre-Yves Chibon 73d120
        self.assertEqual(msg, "User added")
Pierre-Yves Chibon 5872c5
        self.session.commit()
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
        # Ticket access level isn't sufficient to access private projects
Pierre-Yves Chibon 73d120
        user = tests.FakeUser(username="pingou")
Pierre-Yves Chibon 5872c5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon 73d120
            output = self.app.get("/browse/projects/")
Pierre-Yves Chibon 5872c5
            self.assertEqual(output.status_code, 200)
Pierre-Yves Chibon 5872c5
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 73d120
            self.assertIn("<title>Home - Pagure</title>\n", output_text)
Pierre-Yves Chibon 5872c5
            self.assertIn(
Pierre-Yves Chibon 5872c5
                '

All Projects '

Pierre-Yves Chibon 5872c5
                '3',
Pierre-Yves Chibon 73d120
                output_text,
Pierre-Yves Chibon 73d120
            )
Pierre-Yves Chibon 5872c5
            self.assertNotIn(
Pierre-Yves Chibon 837e8c
                '
Pierre-Yves Chibon 5872c5
                'fa fa-fw fa-lock">',
Pierre-Yves Chibon 73d120
                output_text,
Pierre-Yves Chibon 73d120
            )
Pierre-Yves Chibon 837e8c
            self.assertEqual(output_text.count('title="Private Project"'), 0)
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 73d120
    @patch.dict("pagure.config.config", {"PRIVATE_PROJECTS": True})
Pierre-Yves Chibon 5872c5
    def test_browse_project_logged_in_commit_private_project(self):
Pierre-Yves Chibon 5872c5
        """ Test the browse project endpoint when logged in as an user that
Pierre-Yves Chibon 5872c5
        has no access to the private project. """
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
        # Add user 'pingou' with commit access on repo
Pierre-Yves Chibon 73d120
        repo = pagure.lib.query._get_project(self.session, "test3")
Pierre-Yves Chibon 930073
        msg = pagure.lib.query.add_user_to_project(
Pierre-Yves Chibon 73d120
            self.session, repo, new_user="pingou", user="foo", access="commit"
Pierre-Yves Chibon 5872c5
        )
Pierre-Yves Chibon 73d120
        self.assertEqual(msg, "User added")
Pierre-Yves Chibon 5872c5
        self.session.commit()
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 73d120
        user = tests.FakeUser(username="pingou")
Pierre-Yves Chibon 5872c5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon 73d120
            output = self.app.get("/browse/projects/")
Pierre-Yves Chibon 5872c5
            self.assertEqual(output.status_code, 200)
Pierre-Yves Chibon 5872c5
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 73d120
            self.assertIn("<title>Home - Pagure</title>\n", output_text)
Pierre-Yves Chibon 5872c5
            self.assertIn(
Pierre-Yves Chibon 5872c5
                '

All Projects '

Pierre-Yves Chibon 5872c5
                '4',
Pierre-Yves Chibon 73d120
                output_text,
Pierre-Yves Chibon 73d120
            )
Pierre-Yves Chibon 5872c5
            self.assertIn(
Pierre-Yves Chibon 837e8c
                '
Pierre-Yves Chibon 5872c5
                'fa fa-fw fa-lock">',
Pierre-Yves Chibon 73d120
                output_text,
Pierre-Yves Chibon 73d120
            )
Pierre-Yves Chibon 837e8c
            self.assertEqual(output_text.count('title="Private Project"'), 1)
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 73d120
    @patch.dict("pagure.config.config", {"PRIVATE_PROJECTS": True})
Pierre-Yves Chibon 5872c5
    def test_browse_project_logged_in_admin_private_project(self):
Pierre-Yves Chibon 5872c5
        """ Test the browse project endpoint when logged in as an user that
Pierre-Yves Chibon 5872c5
        has no access to the private project. """
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
        # Add user 'pingou' with admin access on repo
Pierre-Yves Chibon 73d120
        repo = pagure.lib.query._get_project(self.session, "test3")
Pierre-Yves Chibon 930073
        msg = pagure.lib.query.add_user_to_project(
Pierre-Yves Chibon 73d120
            self.session, repo, new_user="pingou", user="foo", access="admin"
Pierre-Yves Chibon 5872c5
        )
Pierre-Yves Chibon 73d120
        self.assertEqual(msg, "User added")
Pierre-Yves Chibon 5872c5
        self.session.commit()
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 73d120
        user = tests.FakeUser(username="pingou")
Pierre-Yves Chibon 5872c5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon 73d120
            output = self.app.get("/browse/projects/")
Pierre-Yves Chibon 5872c5
            self.assertEqual(output.status_code, 200)
Pierre-Yves Chibon 5872c5
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 73d120
            self.assertIn("<title>Home - Pagure</title>\n", output_text)
Pierre-Yves Chibon 5872c5
            self.assertIn(
Pierre-Yves Chibon 5872c5
                '

All Projects '

Pierre-Yves Chibon 5872c5
                '4',
Pierre-Yves Chibon 73d120
                output_text,
Pierre-Yves Chibon 73d120
            )
Pierre-Yves Chibon 5872c5
            self.assertIn(
Pierre-Yves Chibon 837e8c
                '
Pierre-Yves Chibon 5872c5
                'fa fa-fw fa-lock">',
Pierre-Yves Chibon 73d120
                output_text,
Pierre-Yves Chibon 73d120
            )
Pierre-Yves Chibon 837e8c
            self.assertEqual(output_text.count('title="Private Project"'), 1)
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 73d120
Pierre-Yves Chibon 5872c5
class PagureFlaskAppBrowseGroupAdmintests(tests.Modeltests):
Pierre-Yves Chibon 5872c5
    """ Tests for the browse pages of flask app controller of pagure """
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
    def setUp(self):
Pierre-Yves Chibon 5872c5
        """ Set up the environnment, ran before every tests. """
Pierre-Yves Chibon 5872c5
        super(PagureFlaskAppBrowseGroupAdmintests, self).setUp()
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
        tests.create_projects(self.session)
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
        # Add a 3rd project with a long description
Pierre-Yves Chibon 5872c5
        item = pagure.lib.model.Project(
Pierre-Yves Chibon 5872c5
            user_id=2,  # foo
Pierre-Yves Chibon 73d120
            name="test3",
Pierre-Yves Chibon 73d120
            description="test project #3 with a very long description",
Pierre-Yves Chibon 73d120
            hook_token="aaabbbeeefff",
Pierre-Yves Chibon 5872c5
            private=True,
Pierre-Yves Chibon 5872c5
        )
Pierre-Yves Chibon 5872c5
        self.session.add(item)
Pierre-Yves Chibon 5872c5
        self.session.commit()
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
        # Create a group
Pierre-Yves Chibon 930073
        msg = pagure.lib.query.add_group(
Pierre-Yves Chibon 5872c5
            self.session,
Pierre-Yves Chibon 73d120
            group_name="JL",
Pierre-Yves Chibon 73d120
            display_name="Justice League",
Pierre-Yves Chibon 73d120
            description="Nope, it's not JLA anymore",
Pierre-Yves Chibon 73d120
            group_type="user",
Pierre-Yves Chibon 73d120
            user="foo",
Pierre-Yves Chibon 5872c5
            is_admin=False,
Pierre-Yves Chibon 73d120
            blacklist=pagure.config.config.get("BLACKLISTED_PROJECTS"),
Pierre-Yves Chibon 5872c5
        )
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 73d120
        self.assertEqual(msg, "User `foo` added to the group `JL`.")
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
        # Add the group to project we just created, test3
Pierre-Yves Chibon 5872c5
        # Add it with admin ACL
Pierre-Yves Chibon 73d120
        project = pagure.lib.query._get_project(self.session, "test3")
Pierre-Yves Chibon 930073
        msg = pagure.lib.query.add_group_to_project(
Pierre-Yves Chibon 5872c5
            self.session,
Pierre-Yves Chibon 5872c5
            project=project,
Pierre-Yves Chibon 73d120
            new_group="JL",
Pierre-Yves Chibon 73d120
            user="foo",
Pierre-Yves Chibon 73d120
            access="admin",
Pierre-Yves Chibon 5872c5
        )
Pierre-Yves Chibon 5872c5
        self.session.commit()
Pierre-Yves Chibon 73d120
        self.assertEqual(msg, "Group added")
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 73d120
    @patch.dict("pagure.config.config", {"PRIVATE_PROJECTS": True})
Pierre-Yves Chibon 5872c5
    def test_browse_project_user_not_in_group(self):
Pierre-Yves Chibon 5872c5
        """ Test the browse project endpoint when logged in as an user that
Pierre-Yves Chibon 5872c5
        has no access to the private project via a group as admin. """
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 73d120
        user = tests.FakeUser(username="pingou")
Pierre-Yves Chibon 5872c5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon 73d120
            output = self.app.get("/browse/projects/")
Pierre-Yves Chibon 5872c5
            self.assertEqual(output.status_code, 200)
Pierre-Yves Chibon 5872c5
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 73d120
            self.assertIn("<title>Home - Pagure</title>\n", output_text)
Pierre-Yves Chibon 5872c5
            self.assertIn(
Pierre-Yves Chibon 5872c5
                '

All Projects '

Pierre-Yves Chibon 5872c5
                '3',
Pierre-Yves Chibon 73d120
                output_text,
Pierre-Yves Chibon 73d120
            )
Pierre-Yves Chibon 5872c5
            self.assertNotIn(
Pierre-Yves Chibon 5872c5
                '
Pierre-Yves Chibon 5872c5
                'fa fa-fw fa-lock">',
Pierre-Yves Chibon 73d120
                output_text,
Pierre-Yves Chibon 73d120
            )
Pierre-Yves Chibon 5872c5
            self.assertEqual(output_text.count('title="Private project"'), 0)
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 73d120
    @patch.dict("pagure.config.config", {"PRIVATE_PROJECTS": True})
Pierre-Yves Chibon 5872c5
    def test_browse_project_user_in_group(self):
Pierre-Yves Chibon 5872c5
        """ Test the browse project endpoint when logged in as an user that
Pierre-Yves Chibon 5872c5
        has no access to the private project via a group as admin. """
Pierre-Yves Chibon 73d120
        group = pagure.lib.query.search_groups(self.session, group_name="JL")
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 930073
        pagure.lib.query.add_user_to_group(
Pierre-Yves Chibon 5872c5
            session=self.session,
Pierre-Yves Chibon 73d120
            username="pingou",
Pierre-Yves Chibon 5872c5
            group=group,
Pierre-Yves Chibon 73d120
            user="foo",
Pierre-Yves Chibon 5872c5
            is_admin=False,
Pierre-Yves Chibon 5872c5
        )
Pierre-Yves Chibon 5872c5
        self.session.commit()
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 73d120
        user = tests.FakeUser(username="pingou")
Pierre-Yves Chibon 5872c5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon 73d120
            output = self.app.get("/browse/projects/")
Pierre-Yves Chibon 5872c5
            self.assertEqual(output.status_code, 200)
Pierre-Yves Chibon 5872c5
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 73d120
            self.assertIn("<title>Home - Pagure</title>\n", output_text)
Pierre-Yves Chibon 5872c5
            self.assertIn(
Pierre-Yves Chibon 5872c5
                '

All Projects '

Pierre-Yves Chibon 5872c5
                '4',
Pierre-Yves Chibon 73d120
                output_text,
Pierre-Yves Chibon 73d120
            )
Pierre-Yves Chibon 5872c5
            self.assertIn(
Pierre-Yves Chibon 837e8c
                '
Pierre-Yves Chibon 5872c5
                'fa fa-fw fa-lock">',
Pierre-Yves Chibon 73d120
                output_text,
Pierre-Yves Chibon 73d120
            )
Pierre-Yves Chibon 837e8c
            self.assertEqual(output_text.count('title="Private Project"'), 1)
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
class PagureFlaskAppBrowseGroupCommittests(tests.Modeltests):
Pierre-Yves Chibon 5872c5
    """ Tests for the browse pages of flask app controller of pagure """
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
    def setUp(self):
Pierre-Yves Chibon 5872c5
        """ Set up the environnment, ran before every tests. """
Pierre-Yves Chibon 5872c5
        super(PagureFlaskAppBrowseGroupCommittests, self).setUp()
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
        tests.create_projects(self.session)
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
        # Add a 3rd project with a long description
Pierre-Yves Chibon 5872c5
        item = pagure.lib.model.Project(
Pierre-Yves Chibon 5872c5
            user_id=2,  # foo
Pierre-Yves Chibon 73d120
            name="test3",
Pierre-Yves Chibon 73d120
            description="test project #3 with a very long description",
Pierre-Yves Chibon 73d120
            hook_token="aaabbbeeefff",
Pierre-Yves Chibon 5872c5
            private=True,
Pierre-Yves Chibon 5872c5
        )
Pierre-Yves Chibon 5872c5
        self.session.add(item)
Pierre-Yves Chibon 5872c5
        self.session.commit()
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
        # Create a group
Pierre-Yves Chibon 930073
        msg = pagure.lib.query.add_group(
Pierre-Yves Chibon 5872c5
            self.session,
Pierre-Yves Chibon 73d120
            group_name="JL",
Pierre-Yves Chibon 73d120
            display_name="Justice League",
Pierre-Yves Chibon 73d120
            description="Nope, it's not JLA anymore",
Pierre-Yves Chibon 73d120
            group_type="user",
Pierre-Yves Chibon 73d120
            user="foo",
Pierre-Yves Chibon 5872c5
            is_admin=False,
Pierre-Yves Chibon 73d120
            blacklist=pagure.config.config.get("BLACKLISTED_PROJECTS"),
Pierre-Yves Chibon 5872c5
        )
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 73d120
        self.assertEqual(msg, "User `foo` added to the group `JL`.")
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
        # Add the group to project we just created, test3
Pierre-Yves Chibon 5872c5
        # Add it with commit ACL
Pierre-Yves Chibon 73d120
        project = pagure.lib.query._get_project(self.session, "test3")
Pierre-Yves Chibon 930073
        msg = pagure.lib.query.add_group_to_project(
Pierre-Yves Chibon 5872c5
            self.session,
Pierre-Yves Chibon 5872c5
            project=project,
Pierre-Yves Chibon 73d120
            new_group="JL",
Pierre-Yves Chibon 73d120
            user="foo",
Pierre-Yves Chibon 73d120
            access="commit",
Pierre-Yves Chibon 5872c5
        )
Pierre-Yves Chibon 5872c5
        self.session.commit()
Pierre-Yves Chibon 73d120
        self.assertEqual(msg, "Group added")
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 73d120
    @patch.dict("pagure.config.config", {"PRIVATE_PROJECTS": True})
Pierre-Yves Chibon 5872c5
    def test_browse_project_user_not_in_group(self):
Pierre-Yves Chibon 5872c5
        """ Test the browse project endpoint when logged in as an user that
Pierre-Yves Chibon 5872c5
        has no access to the private project via a group as admin. """
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 73d120
        user = tests.FakeUser(username="pingou")
Pierre-Yves Chibon 5872c5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon 73d120
            output = self.app.get("/browse/projects/")
Pierre-Yves Chibon 5872c5
            self.assertEqual(output.status_code, 200)
Pierre-Yves Chibon 5872c5
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 73d120
            self.assertIn("<title>Home - Pagure</title>\n", output_text)
Pierre-Yves Chibon 5872c5
            self.assertIn(
Pierre-Yves Chibon 5872c5
                '

All Projects '

Pierre-Yves Chibon 5872c5
                '3',
Pierre-Yves Chibon 73d120
                output_text,
Pierre-Yves Chibon 73d120
            )
Pierre-Yves Chibon 5872c5
            self.assertNotIn(
Pierre-Yves Chibon 5872c5
                '
Pierre-Yves Chibon 5872c5
                'fa fa-fw fa-lock">',
Pierre-Yves Chibon 73d120
                output_text,
Pierre-Yves Chibon 73d120
            )
Pierre-Yves Chibon 5872c5
            self.assertEqual(output_text.count('title="Private project"'), 0)
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 73d120
    @patch.dict("pagure.config.config", {"PRIVATE_PROJECTS": True})
Pierre-Yves Chibon 5872c5
    def test_browse_project_user_in_group(self):
Pierre-Yves Chibon 5872c5
        """ Test the browse project endpoint when logged in as an user that
Pierre-Yves Chibon 5872c5
        has no access to the private project via a group as admin. """
Pierre-Yves Chibon 73d120
        group = pagure.lib.query.search_groups(self.session, group_name="JL")
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 930073
        pagure.lib.query.add_user_to_group(
Pierre-Yves Chibon 5872c5
            session=self.session,
Pierre-Yves Chibon 73d120
            username="pingou",
Pierre-Yves Chibon 5872c5
            group=group,
Pierre-Yves Chibon 73d120
            user="foo",
Pierre-Yves Chibon 5872c5
            is_admin=False,
Pierre-Yves Chibon 5872c5
        )
Pierre-Yves Chibon 5872c5
        self.session.commit()
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 73d120
        user = tests.FakeUser(username="pingou")
Pierre-Yves Chibon 5872c5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon 73d120
            output = self.app.get("/browse/projects/")
Pierre-Yves Chibon 5872c5
            self.assertEqual(output.status_code, 200)
Pierre-Yves Chibon 5872c5
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 73d120
            self.assertIn("<title>Home - Pagure</title>\n", output_text)
Pierre-Yves Chibon 5872c5
            self.assertIn(
Pierre-Yves Chibon 5872c5
                '

All Projects '

Pierre-Yves Chibon 5872c5
                '4',
Pierre-Yves Chibon 73d120
                output_text,
Pierre-Yves Chibon 73d120
            )
Pierre-Yves Chibon 5872c5
            self.assertIn(
Pierre-Yves Chibon 837e8c
                '
Pierre-Yves Chibon 5872c5
                'fa fa-fw fa-lock">',
Pierre-Yves Chibon 73d120
                output_text,
Pierre-Yves Chibon 73d120
            )
Pierre-Yves Chibon 837e8c
            self.assertEqual(output_text.count('title="Private Project"'), 1)
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
class PagureFlaskAppBrowseGroupTickettests(tests.Modeltests):
Pierre-Yves Chibon 5872c5
    """ Tests for the browse pages of flask app controller of pagure """
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
    def setUp(self):
Pierre-Yves Chibon 5872c5
        """ Set up the environnment, ran before every tests. """
Pierre-Yves Chibon 5872c5
        super(PagureFlaskAppBrowseGroupTickettests, self).setUp()
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
        tests.create_projects(self.session)
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
        # Add a 3rd project with a long description
Pierre-Yves Chibon 5872c5
        item = pagure.lib.model.Project(
Pierre-Yves Chibon 5872c5
            user_id=2,  # foo
Pierre-Yves Chibon 73d120
            name="test3",
Pierre-Yves Chibon 73d120
            description="test project #3 with a very long description",
Pierre-Yves Chibon 73d120
            hook_token="aaabbbeeefff",
Pierre-Yves Chibon 5872c5
            private=True,
Pierre-Yves Chibon 5872c5
        )
Pierre-Yves Chibon 5872c5
        self.session.add(item)
Pierre-Yves Chibon 5872c5
        self.session.commit()
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
        # Create a group
Pierre-Yves Chibon 930073
        msg = pagure.lib.query.add_group(
Pierre-Yves Chibon 5872c5
            self.session,
Pierre-Yves Chibon 73d120
            group_name="JL",
Pierre-Yves Chibon 73d120
            display_name="Justice League",
Pierre-Yves Chibon 73d120
            description="Nope, it's not JLA anymore",
Pierre-Yves Chibon 73d120
            group_type="user",
Pierre-Yves Chibon 73d120
            user="foo",
Pierre-Yves Chibon 5872c5
            is_admin=False,
Pierre-Yves Chibon 73d120
            blacklist=pagure.config.config.get("BLACKLISTED_PROJECTS"),
Pierre-Yves Chibon 5872c5
        )
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 73d120
        self.assertEqual(msg, "User `foo` added to the group `JL`.")
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
        # Add the group to project we just created, test3
Pierre-Yves Chibon 5872c5
        # Add it with ticket ACL
Pierre-Yves Chibon 73d120
        project = pagure.lib.query._get_project(self.session, "test3")
Pierre-Yves Chibon 930073
        msg = pagure.lib.query.add_group_to_project(
Pierre-Yves Chibon 5872c5
            self.session,
Pierre-Yves Chibon 5872c5
            project=project,
Pierre-Yves Chibon 73d120
            new_group="JL",
Pierre-Yves Chibon 73d120
            user="foo",
Pierre-Yves Chibon 73d120
            access="ticket",
Pierre-Yves Chibon 5872c5
        )
Pierre-Yves Chibon 5872c5
        self.session.commit()
Pierre-Yves Chibon 73d120
        self.assertEqual(msg, "Group added")
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 73d120
    @patch.dict("pagure.config.config", {"PRIVATE_PROJECTS": True})
Pierre-Yves Chibon 5872c5
    def test_browse_project_user_not_in_group(self):
Pierre-Yves Chibon 5872c5
        """ Test the browse project endpoint when logged in as an user that
Pierre-Yves Chibon 5872c5
        has no access to the private project via a group as admin. """
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 73d120
        user = tests.FakeUser(username="pingou")
Pierre-Yves Chibon 5872c5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon 73d120
            output = self.app.get("/browse/projects/")
Pierre-Yves Chibon 5872c5
            self.assertEqual(output.status_code, 200)
Pierre-Yves Chibon 5872c5
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 73d120
            self.assertIn("<title>Home - Pagure</title>\n", output_text)
Pierre-Yves Chibon 5872c5
            self.assertIn(
Pierre-Yves Chibon 5872c5
                '

All Projects '

Pierre-Yves Chibon 5872c5
                '3',
Pierre-Yves Chibon 73d120
                output_text,
Pierre-Yves Chibon 73d120
            )
Pierre-Yves Chibon 5872c5
            self.assertNotIn(
Pierre-Yves Chibon 837e8c
                '
Pierre-Yves Chibon 5872c5
                'fa fa-fw fa-lock">',
Pierre-Yves Chibon 73d120
                output_text,
Pierre-Yves Chibon 73d120
            )
Pierre-Yves Chibon 837e8c
            self.assertEqual(output_text.count('title="Private Project"'), 0)
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 73d120
    @patch.dict("pagure.config.config", {"PRIVATE_PROJECTS": True})
Pierre-Yves Chibon 5872c5
    def test_browse_project_user_in_group(self):
Pierre-Yves Chibon 5872c5
        """ Test the browse project endpoint when logged in as an user that
Pierre-Yves Chibon 5872c5
        has no access to the private project via a group as admin. """
Pierre-Yves Chibon 73d120
        group = pagure.lib.query.search_groups(self.session, group_name="JL")
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 930073
        pagure.lib.query.add_user_to_group(
Pierre-Yves Chibon 5872c5
            session=self.session,
Pierre-Yves Chibon 73d120
            username="pingou",
Pierre-Yves Chibon 5872c5
            group=group,
Pierre-Yves Chibon 73d120
            user="foo",
Pierre-Yves Chibon 5872c5
            is_admin=False,
Pierre-Yves Chibon 5872c5
        )
Pierre-Yves Chibon 5872c5
        self.session.commit()
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
        # Ticket ACL isn't enough to grant you access
Pierre-Yves Chibon 73d120
        user = tests.FakeUser(username="pingou")
Pierre-Yves Chibon 5872c5
        with tests.user_set(self.app.application, user):
Pierre-Yves Chibon 73d120
            output = self.app.get("/browse/projects/")
Pierre-Yves Chibon 5872c5
            self.assertEqual(output.status_code, 200)
Pierre-Yves Chibon 5872c5
            output_text = output.get_data(as_text=True)
Pierre-Yves Chibon 73d120
            self.assertIn("<title>Home - Pagure</title>\n", output_text)
Pierre-Yves Chibon 5872c5
            self.assertIn(
Pierre-Yves Chibon 5872c5
                '

All Projects '

Pierre-Yves Chibon 5872c5
                '3',
Pierre-Yves Chibon 73d120
                output_text,
Pierre-Yves Chibon 73d120
            )
Pierre-Yves Chibon 5872c5
            self.assertNotIn(
Pierre-Yves Chibon 837e8c
                '
Pierre-Yves Chibon 5872c5
                'fa fa-fw fa-lock">',
Pierre-Yves Chibon 73d120
                output_text,
Pierre-Yves Chibon 73d120
            )
Pierre-Yves Chibon 837e8c
            self.assertEqual(output_text.count('title="Private Project"'), 0)
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 5872c5
Pierre-Yves Chibon 73d120
if __name__ == "__main__":
Pierre-Yves Chibon 5872c5
    unittest.main(verbosity=2)