# -*- coding: utf-8 -*-
"""
(c) 2017 - Copyright Red Hat Inc
Authors:
Pierre-Yves Chibon <pingou@pingoured.fr>
"""
from __future__ import unicode_literals, absolute_import
import unittest
import sys
import os
from mock import patch, MagicMock
sys.path.insert(0, os.path.join(os.path.dirname(
os.path.abspath(__file__)), '..'))
import pagure.lib.query
import tests
class PagureLibAddUserToProjecttests(tests.Modeltests):
""" Tests for pagure.lib.query.add_user_to_project """
def setUp(self):
""" Set up the environnment, ran before every tests. """
super(PagureLibAddUserToProjecttests, self).setUp()
tests.create_projects(self.session)
item = pagure.lib.model.User(
user='bar',
fullname='bar baz',
password='foo',
default_email='bar@bar.com',
)
self.session.add(item)
item = pagure.lib.model.UserEmail(
user_id=3,
email='bar@bar.com')
self.session.add(item)
self.session.commit()
# Before
repo = pagure.lib.query._get_project(self.session, 'test')
self.assertEqual(len(repo.users), 0)
msg = pagure.lib.query.add_user_to_project(
session=self.session,
project=repo,
new_user='foo',
user='pingou',
)
self.session.commit()
self.assertEqual(msg, 'User added')
# After
repo = pagure.lib.query._get_project(self.session, 'test')
self.assertEqual(len(repo.users), 1)
self.assertEqual(repo.users[0].user, 'foo')
self.assertEqual(repo.admins[0].user, 'foo')
@patch('pagure.lib.notify.send_email', MagicMock(return_value=True))
def test_re_add_user_to_project_default(self):
""" Update an existing user but to the same access level. """
repo = pagure.lib.query._get_project(self.session, 'test')
# Try adding the same user with the same access
self.assertRaises(
pagure.exceptions.PagureException,
pagure.lib.query.add_user_to_project,
session=self.session,
project=repo,
new_user='foo',
user='pingou',
access='admin'
)
@patch('pagure.lib.notify.send_email', MagicMock(return_value=True))
def test_update_user_to_project_default(self):
""" Update an existing user without any required group membership.
"""
repo = pagure.lib.query._get_project(self.session, 'test')
# Update the access of the user
msg = pagure.lib.query.add_user_to_project(
session=self.session,
project=repo,
new_user='foo',
user='pingou',
access='commit'
)
self.session.commit()
self.assertEqual(msg, 'User access updated')
self.assertEqual(len(repo.users), 1)
self.assertEqual(repo.users[0].user, 'foo')
self.assertEqual(repo.committers[0].user, 'foo')
@patch('pagure.lib.notify.send_email', MagicMock(return_value=True))
def test_update_user_to_project_require_packager_on_all(self):
"""
Update an existing user but required group membership on all
projects.
"""
repo = pagure.lib.query._get_project(self.session, 'test')
config = {
'*': ['packager']
}
# Update the access of the user
self.assertRaises(
pagure.exceptions.PagureException,
pagure.lib.query.add_user_to_project,
session=self.session,
project=repo,
new_user='foo',
user='pingou',
access='admin',
required_groups=config
)
self.session.commit()
self.assertEqual(len(repo.users), 1)
self.assertEqual(repo.users[0].user, 'foo')
self.assertEqual(repo.committers[0].user, 'foo')
@patch('pagure.lib.notify.send_email', MagicMock(return_value=True))
def test_update_user_to_project_require_packager_on_st(self):
"""
Update an existing user but required group membership on all
projects match *st.
"""
repo = pagure.lib.query._get_project(self.session, 'test')
config = {
'*st': ['packager']
}
# Update the access of the user
self.assertRaises(
pagure.exceptions.PagureException,
pagure.lib.query.add_user_to_project,
session=self.session,
project=repo,
new_user='foo',
user='pingou',
access='admin',
required_groups=config
)
self.session.commit()
self.assertEqual(len(repo.users), 1)
self.assertEqual(repo.users[0].user, 'foo')
self.assertEqual(repo.committers[0].user, 'foo')
@patch('pagure.lib.notify.send_email', MagicMock(return_value=True))
def test_update_user_to_project_require_packager_on_te(self):
"""
Update an existing user but required group membership on all
projects match te*.
"""
repo = pagure.lib.query._get_project(self.session, 'test')
config = {
'te*': ['packager']
}
# Update the access of the user
self.assertRaises(
pagure.exceptions.PagureException,
pagure.lib.query.add_user_to_project,
session=self.session,
project=repo,
new_user='foo',
user='pingou',
access='admin',
required_groups=config
)
self.session.commit()
self.assertEqual(len(repo.users), 1)
self.assertEqual(repo.users[0].user, 'foo')
self.assertEqual(repo.committers[0].user, 'foo')
@patch('pagure.lib.notify.send_email', MagicMock(return_value=True))
def test_update_user_to_project_require_packager_on_test(self):
"""
Update an existing user but required group membership on a specific
project: test.
"""
repo = pagure.lib.query._get_project(self.session, 'test')
config = {
'test': ['packager']
}
# Update the access of the user
self.assertRaises(
pagure.exceptions.PagureException,
pagure.lib.query.add_user_to_project,
session=self.session,
project=repo,
new_user='foo',
user='pingou',
access='admin',
required_groups=config
)
self.session.commit()
self.assertEqual(len(repo.users), 1)
self.assertEqual(repo.users[0].user, 'foo')
self.assertEqual(repo.committers[0].user, 'foo')
@patch('pagure.lib.notify.send_email', MagicMock(return_value=True))
def test_add_user_to_test2_require_packager_on_test(self):
"""
Add user to project test2 while the configuration requires group
membership on the project test.
"""
repo = pagure.lib.query._get_project(self.session, 'test2')
self.assertEqual(len(repo.users), 0)
config = {
'test': ['packager']
}
# Add the user
pagure.lib.query.add_user_to_project(
session=self.session,
project=repo,
new_user='foo',
user='pingou',
access='admin',
required_groups=config
)
self.session.commit()
self.assertEqual(len(repo.users), 1)
self.assertEqual(repo.users[0].user, 'foo')
self.assertEqual(repo.committers[0].user, 'foo')
class PagureLibAddUserToProjectWithGrouptests(
PagureLibAddUserToProjecttests):
""" Tests for pagure.lib.query.add_user_to_project """
def setUp(self):
""" Set up the environnment, ran before every tests. """
super(PagureLibAddUserToProjectWithGrouptests, self).setUp()
# 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='bar',
group=group,
user='pingou',
is_admin=True)
self.session.commit()
self.assertEqual(msg, 'User `bar` added to the group `packager`.')
@patch('pagure.lib.notify.send_email', MagicMock(return_value=True))
def test_add_user_to_test_require_packager_on_test(self):
"""
Add user to project test while the configuration requires group
membership on the project test.
"""
repo = pagure.lib.query._get_project(self.session, 'test')
self.assertEqual(len(repo.users), 1)
config = {
'test': ['packager']
}
# Add the user to the project
pagure.lib.query.add_user_to_project(
session=self.session,
project=repo,
new_user='bar',
user='pingou',
access='commit',
required_groups=config
)
self.session.commit()
repo = pagure.lib.query._get_project(self.session, 'test')
self.assertEqual(len(repo.users), 2)
self.assertEqual(repo.users[0].user, 'foo')
self.assertEqual(repo.committers[0].user, 'foo')
self.assertEqual(repo.users[1].user, 'bar')
self.assertEqual(repo.committers[1].user, 'bar')
@patch('pagure.lib.notify.send_email', MagicMock(return_value=True))
def test_add_user_to_test_require_packager(self):
"""
Add user to project test while the configuration requires group
membership on all the projects.
"""
repo = pagure.lib.query._get_project(self.session, 'test')
self.assertEqual(len(repo.users), 1)
config = {
'*': ['packager']
}
# Add the user to the project
pagure.lib.query.add_user_to_project(
session=self.session,
project=repo,
new_user='bar',
user='pingou',
access='commit',
required_groups=config
)
self.session.commit()
repo = pagure.lib.query._get_project(self.session, 'test')
self.assertEqual(len(repo.users), 2)
self.assertEqual(repo.users[0].user, 'foo')
self.assertEqual(repo.committers[0].user, 'foo')
self.assertEqual(repo.users[1].user, 'bar')
self.assertEqual(repo.committers[1].user, 'bar')
if __name__ == '__main__':
unittest.main(verbosity=2)