# -*- coding: utf-8 -*- """ (c) 2017 - Copyright Red Hat Inc Authors: Pierre-Yves Chibon """ from __future__ import unicode_literals, absolute_import import unittest import shutil import sys import os import mock import munch import pygit2 import werkzeug sys.path.insert(0, os.path.join(os.path.dirname( os.path.abspath(__file__)), '..')) import pagure.lib.query import pagure.lib.model import pagure.utils import tests class PagureGetRemoteRepoPath(tests.SimplePagureTest): """ Tests for pagure """ def setUp(self): """ Set up the environnment, ran before every tests. """ super(PagureGetRemoteRepoPath, self).setUp() tests.create_projects(self.session) tests.create_projects_git(os.path.join(self.path, 'repos'), bare=True) tests.add_content_git_repo(os.path.join(self.path, 'repos', 'test2.git')) @mock.patch( 'pagure.lib.repo.PagureRepo.pull', mock.MagicMock(side_effect=pygit2.GitError)) def test_passing(self): """ Test get_remote_repo_path in pagure. """ output = pagure.utils.get_remote_repo_path( os.path.join(self.path, 'repos', 'test2.git'), 'master', ignore_non_exist=True) self.assertTrue(output.endswith('repos_test2.git_master')) def test_is_repo_committer_logged_out(self): """ Test is_repo_committer in pagure when there is no logged in user. """ repo = pagure.lib.query._get_project(self.session, 'test') with self.app.application.app_context(): output = pagure.utils.is_repo_committer(repo) self.assertFalse(output) def test_is_repo_committer_logged_in(self): """ Test is_repo_committer in pagure with the appropriate user logged in. """ repo = pagure.lib.query._get_project(self.session, 'test') g = munch.Munch() g.fas_user = tests.FakeUser(username='pingou') g.authenticated = True g.session = self.session with mock.patch('flask.g', g): output = pagure.utils.is_repo_committer(repo) self.assertTrue(output) def test_is_repo_committer_logged_in_in_group(self): """ Test is_repo_committer in pagure with the appropriate user logged in. """ # Create group msg = pagure.lib.query.add_group( self.session, group_name='packager', display_name='packager', description='The Fedora packager groups', group_type='user', user='pingou', is_admin=False, blacklist=[]) self.session.commit() self.assertEqual(msg, 'User `pingou` added to the group `packager`.') # Add user to group group = pagure.lib.query.search_groups(self.session, group_name='packager') msg = pagure.lib.query.add_user_to_group( self.session, username='foo', group=group, user='pingou', is_admin=True) self.session.commit() self.assertEqual(msg, 'User `foo` added to the group `packager`.') # Add group packager to project test project = pagure.lib.query._get_project(self.session, 'test') msg = pagure.lib.query.add_group_to_project( self.session, project=project, new_group='packager', user='pingou', ) self.session.commit() self.assertEqual(msg, 'Group added') repo = pagure.lib.query._get_project(self.session, 'test') g = munch.Munch() g.fas_user = tests.FakeUser(username='foo') g.authenticated = True g.session = self.session with mock.patch('flask.g', g): output = pagure.utils.is_repo_committer(repo) self.assertTrue(output) def test_is_repo_committer_logged_in_in_ticket_group(self): """ Test is_repo_committer in pagure with the appropriate user logged in. """ # Create group msg = pagure.lib.query.add_group( self.session, group_name='packager', display_name='packager', description='The Fedora packager groups', group_type='user', user='pingou', is_admin=False, blacklist=[]) self.session.commit() self.assertEqual(msg, 'User `pingou` added to the group `packager`.') # Add user to group group = pagure.lib.query.search_groups(self.session, group_name='packager') msg = pagure.lib.query.add_user_to_group( self.session, username='foo', group=group, user='pingou', is_admin=True) self.session.commit() self.assertEqual(msg, 'User `foo` added to the group `packager`.') # Add group packager to project test project = pagure.lib.query._get_project(self.session, 'test') msg = pagure.lib.query.add_group_to_project( self.session, project=project, new_group='packager', user='pingou', access='ticket', ) self.session.commit() self.assertEqual(msg, 'Group added') repo = pagure.lib.query._get_project(self.session, 'test') g = munch.Munch() g.fas_user = tests.FakeUser(username='foo') g.authenticated = True g.session = self.session with mock.patch('flask.g', g): output = pagure.utils.is_repo_committer(repo) self.assertFalse(output) def test_is_repo_committer_logged_in_wrong_user(self): """ Test is_repo_committer in pagure with the wrong user logged in. """ repo = pagure.lib.query._get_project(self.session, 'test') g = munch.Munch() g.fas_user = tests.FakeUser() g.authenticated = True g.session = self.session with mock.patch('flask.g', g): output = pagure.utils.is_repo_committer(repo) self.assertFalse(output) # Mocked config config = { 'provenpackager': {} } @mock.patch.dict('pagure.config.config', {'EXTERNAL_COMMITTER': config}) def test_is_repo_committer_external_committer_generic_no_member(self): """ Test is_repo_committer in pagure with EXTERNAL_COMMITTER configured to give access to all the provenpackager, but the user is not one. """ repo = pagure.lib.query._get_project(self.session, 'test') user = tests.FakeUser() g = munch.Munch() g.fas_user = user g.authenticated = True g.session = self.session with mock.patch('flask.g', g): output = pagure.utils.is_repo_committer(repo) self.assertFalse(output) @mock.patch.dict('pagure.config.config', {'EXTERNAL_COMMITTER': config}) def test_is_repo_committer_external_committer_generic_member(self): """ Test is_repo_committer in pagure with EXTERNAL_COMMITTER configured to give access to all the provenpackager, and the user is one """ repo = pagure.lib.query._get_project(self.session, 'test') g = munch.Munch() g.fas_user = tests.FakeUser(username='foo') g.fas_user.groups.append('provenpackager') g.authenticated = True g.session = self.session with mock.patch('flask.g', g): output = pagure.utils.is_repo_committer(repo) self.assertTrue(output) config = { 'provenpackager': { 'exclude': ['test'] } } @mock.patch.dict('pagure.config.config', {'EXTERNAL_COMMITTER': config}) def test_is_repo_committer_external_committer_excluding_one(self): """ Test is_repo_committer in pagure with EXTERNAL_COMMITTER configured to give access to all the provenpackager but for this one repo """ repo = pagure.lib.query._get_project(self.session, 'test') g = munch.Munch() g.fas_user = tests.FakeUser() g.fas_user.groups.append('provenpackager') g.authenticated = True g.session = self.session with mock.patch('flask.g', g): output = pagure.utils.is_repo_committer(repo) self.assertFalse(output) @mock.patch.dict('pagure.config.config', {'EXTERNAL_COMMITTER': config}) def test_is_repo_committer_owner_external_committer_excluding_one(self): """ Test is_repo_committer in pagure with EXTERNAL_COMMITTER configured to give access to all the provenpackager but for this one repo, but the user is still a direct committer """ repo = pagure.lib.query._get_project(self.session, 'test') g = munch.Munch() g.fas_user = tests.FakeUser(username='pingou') g.fas_user.groups.append('provenpackager') g.authenticated = True g.session = self.session with mock.patch('flask.g', g): output = pagure.utils.is_repo_committer(repo) self.assertTrue(output) config = { 'provenpackager': { 'restrict': ['test'] } } @mock.patch.dict('pagure.config.config', {'EXTERNAL_COMMITTER': config}) def test_is_repo_committer_external_committer_restricted_not_member(self): """ Test is_repo_committer in pagure with EXTERNAL_COMMITTER configured to give access the provenpackager just for one repo """ repo = pagure.lib.query._get_project(self.session, 'test') g = munch.Munch() g.fas_user = tests.FakeUser() g.authenticated = True g.session = self.session with mock.patch('flask.g', g): output = pagure.utils.is_repo_committer(repo) self.assertFalse(output) @mock.patch.dict('pagure.config.config', {'EXTERNAL_COMMITTER': config}) def test_is_repo_committer_external_committer_restricting_to_one(self): """ Test is_repo_committer in pagure with EXTERNAL_COMMITTER configured to give access the provenpackager just for one repo """ repo = pagure.lib.query._get_project(self.session, 'test') g = munch.Munch() g.fas_user = tests.FakeUser(username='foo') g.authenticated = True g.fas_user.groups.append('provenpackager') g.session = self.session with mock.patch('flask.g', g): output = pagure.utils.is_repo_committer(repo) self.assertTrue(output) @mock.patch.dict('pagure.config.config', {'EXTERNAL_COMMITTER': config}) def test_is_repo_committer_external_committer_restricting_another_one(self): """ Test is_repo_committer in pagure with EXTERNAL_COMMITTER configured to give access the provenpackager just for one repo not this one """ repo = pagure.lib.query._get_project(self.session, 'test2') g = munch.Munch() g.fas_user = tests.FakeUser(username='foo') g.authenticated = True g.fas_user.groups.append('provenpackager') g.session = self.session with mock.patch('flask.g', g): output = pagure.utils.is_repo_committer(repo) self.assertFalse(output) if __name__ == '__main__': unittest.main(verbosity=2)