From 3ad219f40a72639b277532f33964b80d57338a84 Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Feb 15 2017 10:30:34 +0000 Subject: [PATCH 1/26] Unit Tests: add user to project with different acls Signed-off-by: Vivek Anand --- diff --git a/tests/test_pagure_lib.py b/tests/test_pagure_lib.py index ddbcbc8..0a7bfe9 100644 --- a/tests/test_pagure_lib.py +++ b/tests/test_pagure_lib.py @@ -839,6 +839,32 @@ class PagureLibtests(tests.Modeltests): repo = pagure.lib.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') + + # Try adding the same user with the same access + self.assertRaises( + pagure.exceptions.PagureException, + pagure.lib.add_user_to_project, + session=self.session, + project=repo, + new_user='foo', + user='pingou', + access='admin' + ) + + # Update the access of the user + msg = pagure.lib.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') def test_new_project(self): """ Test the new_project of pagure.lib. """ From 8eadb3c674d10d00a5fabcce31095307d63a44ed Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Feb 15 2017 10:30:34 +0000 Subject: [PATCH 2/26] Unit Test: add group to project with different acls Signed-off-by: Vivek Anand --- diff --git a/tests/test_pagure_lib.py b/tests/test_pagure_lib.py index 0a7bfe9..8838d5a 100644 --- a/tests/test_pagure_lib.py +++ b/tests/test_pagure_lib.py @@ -2818,6 +2818,8 @@ class PagureLibtests(tests.Modeltests): ) self.session.commit() self.assertEqual(msg, 'Group added') + self.assertEqual(project.groups[0].group_name, 'foo') + self.assertEqual(project.admin_groups[0].group_name, 'foo') # Group already associated with the project self.assertRaises( @@ -2829,6 +2831,19 @@ class PagureLibtests(tests.Modeltests): user='pingou', ) + # Update the access of group in the project + msg = pagure.lib.add_group_to_project( + session=self.session, + project=project, + new_group='foo', + user='pingou', + access='commit' + ) + self.session.commit() + self.assertEqual(msg, 'Group access updated') + self.assertEqual(project.groups[0].group_name, 'foo') + self.assertEqual(project.committer_groups[0].group_name, 'foo') + def test_update_watch_status(self): """ Test the update_watch_status method of pagure.lib. """ tests.create_projects(self.session) From f92a8592c1e19f20320965c078c3afaef09aaa72 Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Feb 15 2017 10:30:34 +0000 Subject: [PATCH 3/26] Unit Test: search projects shouldn't return projects where user didn't have admin access Signed-off-by: Vivek Anand --- diff --git a/tests/test_pagure_lib.py b/tests/test_pagure_lib.py index 8838d5a..6590e9b 100644 --- a/tests/test_pagure_lib.py +++ b/tests/test_pagure_lib.py @@ -1251,6 +1251,20 @@ class PagureLibtests(tests.Modeltests): projects = pagure.lib.search_projects(self.session, count=True) self.assertEqual(projects, 3) + # Also check if the project shows up if a user doesn't + # have admin access in the project + project = pagure.lib.get_project(self.session, name='test') + pagure.lib.add_user_to_project( + self.session, + project=project, + new_user='foo', + user='pingou', + access='commit' + ) + + projects = pagure.lib.search_projects(self.session, username='foo') + self.assertEqual(len(projects), 0) + def test_search_project_forked(self): """ Test the search_project for forked projects in pagure.lib. """ tests.create_projects(self.session) From 14c156fe666e078b7dd20e31147d5fd13e1adf4d Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Feb 15 2017 10:30:34 +0000 Subject: [PATCH 4/26] Unit Test: get access levels in lib/__init Signed-off-by: Vivek Anand --- diff --git a/tests/test_pagure_lib.py b/tests/test_pagure_lib.py index 6590e9b..aba9bd5 100644 --- a/tests/test_pagure_lib.py +++ b/tests/test_pagure_lib.py @@ -3211,6 +3211,15 @@ class PagureLibtests(tests.Modeltests): html = pagure.lib.text2markdown(text) self.assertEqual(html, expected[idx]) + def test_get_access_levels(self): + ''' Test the get_access_levels method in pagure.lib ''' + + acls = pagure.lib.get_access_levels(self.session) + self.assertEqual( + sorted(['admin', 'commit', 'ticket']), + sorted(acls) + ) + def test_set_watch_obj(self): """ Test the set_watch_obj method in pagure.lib """ # Create the project ns/test From d4986e9ea2347605c4c29bf7e808890345b89dd4 Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Feb 15 2017 10:30:34 +0000 Subject: [PATCH 5/26] Unit Test: get project users of lib/__init__ Signed-off-by: Vivek Anand --- diff --git a/tests/test_pagure_lib.py b/tests/test_pagure_lib.py index aba9bd5..b874431 100644 --- a/tests/test_pagure_lib.py +++ b/tests/test_pagure_lib.py @@ -3220,6 +3220,287 @@ class PagureLibtests(tests.Modeltests): sorted(acls) ) + def test_get_project_users(self): + ''' Test the get_project_users method in pagure.lib.__init__ + when combine is True ''' + + tests.create_projects(self.session) + project = pagure.lib.get_project(self.session, name='test') + + # Default value of combine is True + # which means the an admin is a user, committer as well + # and a committer is also a user + # and a user is just a user + users = pagure.lib.get_project_users( + self.session, + project_obj=project, + access='admin', + ) + + # Only pingou is the admin as of now + # But, he is the creator and + # the creator of the project is not listed in user_projects + # table. Thus, get_projec_users won't return him as an admin + # He has all the access of an admin though + self.assertEqual(len(users), 0) + self.assertEqual(project.user.username, 'pingou') + + users = pagure.lib.get_project_users( + self.session, + project_obj=project, + access='owner', + ) + + # Wrong access level, should return None + self.assertEqual(users, None) + + # Let's add a new user to the project, 'foo' + # By default, if no access is specified, he becomes an admin + msg = pagure.lib.add_user_to_project( + self.session, + project=project, + new_user='foo', + user='pingou' + ) + self.session.commit() + # since, he is an admin, the msg should be 'User added' + self.assertEqual(msg, 'User added') + + project = pagure.lib.get_project(self.session, name='test') + users = pagure.lib.get_project_users( + self.session, + project_obj=project, + access='admin', + ) + + self.assertEqual(len(users), 1) + self.assertEqual(users[0].username, 'foo') + + # foo should be a committer as well, since he is an admin + users = pagure.lib.get_project_users( + self.session, + project_obj=project, + access='commit', + ) + + self.assertEqual(len(users), 1) + self.assertEqual(users[0].username, 'foo') + + # the admin also has ticket access + users = pagure.lib.get_project_users( + self.session, + project_obj=project, + access='ticket', + ) + + self.assertEqual(len(users), 1) + self.assertEqual(users[0].username, 'foo') + + # let's update the access of foo to 'committer' + msg = pagure.lib.add_user_to_project( + self.session, + project=project, + new_user='foo', + user='pingou', + access='commit' + ) + self.session.commit() + self.assertEqual(msg, 'User access updated') + + project = pagure.lib.get_project(self.session, name='test') + # No admin now, even though pingou the creator is there + users = pagure.lib.get_project_users( + self.session, + project_obj=project, + access='admin', + ) + self.assertEqual(len(users), 0) + + users = pagure.lib.get_project_users( + self.session, + project_obj=project, + access='commit', + ) + # foo is the committer currently + self.assertEqual(len(users), 1) + self.assertEqual(users[0].username, 'foo') + + users = pagure.lib.get_project_users( + self.session, + project_obj=project, + access='ticket', + ) + + # foo also has ticket rights + self.assertEqual(len(users), 1) + self.assertEqual(users[0].username, 'foo') + + # let's update the access of foo to 'ticket' + msg = pagure.lib.add_user_to_project( + self.session, + project=project, + new_user='foo', + user='pingou', + access='ticket' + ) + self.session.commit() + self.assertEqual(msg, 'User access updated') + + project = pagure.lib.get_project(self.session, name='test') + # No admin now, even though pingou the creator is there + users = pagure.lib.get_project_users( + self.session, + project_obj=project, + access='admin', + ) + self.assertEqual(len(users), 0) + + users = pagure.lib.get_project_users( + self.session, + project_obj=project, + access='commit', + ) + # foo deosn't have commit rights now + self.assertEqual(len(users), 0) + + users = pagure.lib.get_project_users( + self.session, + project_obj=project, + access='ticket', + ) + + # foo does have tickets right though + self.assertEqual(len(users), 1) + self.assertEqual(users[0].username, 'foo') + + def test_get_project_users_combine_false(self): + ''' Test the get_project_users method in pagure.lib.__init__ + when combine is False ''' + + tests.create_projects(self.session) + project = pagure.lib.get_project(self.session, name='test') + + # Let's add a new user to the project, 'foo' + # By default, if no access is specified, he becomes an admin + msg = pagure.lib.add_user_to_project( + self.session, + project=project, + new_user='foo', + user='pingou' + ) + self.session.commit() + # since, he is an admin, the msg should be 'User added' + self.assertEqual(msg, 'User added') + + # only one admin + users = pagure.lib.get_project_users( + self.session, + project_obj=project, + access='admin', + combine=False, + ) + + self.assertEqual(len(users), 1) + self.assertEqual(users[0].username, 'foo') + + # No user with only commit access + users = pagure.lib.get_project_users( + self.session, + project_obj=project, + access='commit', + combine=False, + ) + self.assertEqual(len(users), 0) + + # No user with only ticket access + users = pagure.lib.get_project_users( + self.session, + project_obj=project, + access='ticket', + combine=False, + ) + self.assertEqual(len(users), 0) + + # Update the access level of foo user to commit + msg = pagure.lib.add_user_to_project( + self.session, + project=project, + new_user='foo', + user='pingou', + access='commit' + ) + self.session.commit() + self.assertEqual(msg, 'User access updated') + + # He is just a committer + project = pagure.lib.get_project(self.session, name='test') + users = pagure.lib.get_project_users( + self.session, + project_obj=project, + access='admin', + combine=False, + ) + self.assertEqual(len(users), 0) + + # He is just a committer + users = pagure.lib.get_project_users( + self.session, + project_obj=project, + access='commit', + combine=False, + ) + self.assertEqual(len(users), 1) + self.assertEqual(users[0].username, 'foo') + + # He is just a committer + users = pagure.lib.get_project_users( + self.session, + project_obj=project, + access='ticket', + combine=False, + ) + self.assertEqual(len(users), 0) + + # Update the access level of foo user to ticket + msg = pagure.lib.add_user_to_project( + self.session, + project=project, + new_user='foo', + user='pingou', + access='ticket' + ) + self.session.commit() + self.assertEqual(msg, 'User access updated') + + # He is just a ticketer + project = pagure.lib.get_project(self.session, name='test') + users = pagure.lib.get_project_users( + self.session, + project_obj=project, + access='admin', + combine=False, + ) + self.assertEqual(len(users), 0) + + # He is just a ticketer + users = pagure.lib.get_project_users( + self.session, + project_obj=project, + access='commit', + combine=False, + ) + self.assertEqual(len(users), 0) + + # He is just a ticketer + users = pagure.lib.get_project_users( + self.session, + project_obj=project, + access='ticket', + combine=False, + ) + self.assertEqual(len(users), 1) + self.assertEqual(users[0].username, 'foo') + def test_set_watch_obj(self): """ Test the set_watch_obj method in pagure.lib """ # Create the project ns/test From 375b4702685f0c203f16a9949c3414133e65b600 Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Feb 15 2017 10:30:34 +0000 Subject: [PATCH 6/26] Unit Test: add group to project - check for ticket groups as well Signed-off-by: Vivek Anand --- diff --git a/tests/test_pagure_lib.py b/tests/test_pagure_lib.py index b874431..82269a5 100644 --- a/tests/test_pagure_lib.py +++ b/tests/test_pagure_lib.py @@ -2858,6 +2858,18 @@ class PagureLibtests(tests.Modeltests): self.assertEqual(project.groups[0].group_name, 'foo') self.assertEqual(project.committer_groups[0].group_name, 'foo') + # Update the access of group in the project + msg = pagure.lib.add_group_to_project( + session=self.session, + project=project, + new_group='foo', + user='pingou', + access='ticket' + ) + self.session.commit() + self.assertEqual(msg, 'Group access updated') + self.assertEqual(project.groups[0].group_name, 'foo') + def test_update_watch_status(self): """ Test the update_watch_status method of pagure.lib. """ tests.create_projects(self.session) From a26090c680bf140c69cb796bcc24c78e0cb63909 Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Feb 15 2017 10:30:34 +0000 Subject: [PATCH 7/26] Unit Test: get project groups in lib/init Signed-off-by: Vivek Anand --- diff --git a/tests/test_pagure_lib.py b/tests/test_pagure_lib.py index 82269a5..d1883d8 100644 --- a/tests/test_pagure_lib.py +++ b/tests/test_pagure_lib.py @@ -3513,6 +3513,340 @@ class PagureLibtests(tests.Modeltests): self.assertEqual(len(users), 1) self.assertEqual(users[0].username, 'foo') + def test_get_project_groups(self): + ''' Test the get_project_groups method in pagure.lib + when combine is True ''' + + # Create some projects + tests.create_projects(self.session) + # Create a group in database + msg = pagure.lib.add_group( + self.session, + group_name='JL', + display_name='Justice League', + description='Nope, it\'s not JLA anymore', + group_type='user', + user='foo', + is_admin=False, + blacklist=pagure.APP.config.get('BLACKLISTED_PROJECTS') + ) + + self.assertEqual( + msg, + 'User `foo` added to the group `JL`.' + ) + + # Add the group to project we just created, test + # First add it as an admin + project = pagure.lib.get_project(self.session, name='test') + msg = pagure.lib.add_group_to_project( + self.session, + project=project, + new_group='JL', + user='pingou', + ) + self.session.commit() + self.assertEqual(msg, 'Group added') + + # Now, the group is an admin in the project + # so, it must have access to everything + project = pagure.lib.get_project(self.session, name='test') + groups = pagure.lib.get_project_groups( + self.session, + project_obj=project, + access='admin', + ) + self.assertEqual(len(groups), 1) + self.assertEqual(groups[0].display_name, 'Justice League') + self.assertEqual(len(project.admin_groups), 1) + self.assertEqual( + project.admin_groups[0].display_name, + 'Justice League' + ) + + # The group should be committer as well + groups = pagure.lib.get_project_groups( + self.session, + project_obj=project, + access='commit', + ) + self.assertEqual(len(groups), 1) + self.assertEqual(groups[0].display_name, 'Justice League') + self.assertEqual(len(project.committer_groups), 1) + self.assertEqual( + project.committer_groups[0].display_name, + 'Justice League' + ) + + # The group should be ticketer as well + groups = pagure.lib.get_project_groups( + self.session, + project_obj=project, + access='ticket', + ) + self.assertEqual(len(groups), 1) + self.assertEqual(groups[0].display_name, 'Justice League') + self.assertEqual(len(project.groups), 1) + self.assertEqual( + project.groups[0].display_name, + 'Justice League' + ) + + # Update the access level of the group, JL to commit + project = pagure.lib.get_project(self.session, name='test') + msg = pagure.lib.add_group_to_project( + self.session, + project=project, + new_group='JL', + user='pingou', + access='commit' + ) + self.session.commit() + self.assertEqual(msg, 'Group access updated') + + # It shouldn't be an admin + project = pagure.lib.get_project(self.session, name='test') + groups = pagure.lib.get_project_groups( + self.session, + project_obj=project, + access='admin', + ) + self.assertEqual(len(groups), 0) + self.assertEqual(len(project.admin_groups), 0) + + # It is a committer + groups = pagure.lib.get_project_groups( + self.session, + project_obj=project, + access='commit', + ) + self.assertEqual(len(groups), 1) + self.assertEqual(groups[0].display_name, 'Justice League') + self.assertEqual(len(project.committer_groups), 1) + self.assertEqual( + project.committer_groups[0].display_name, + 'Justice League' + ) + + # The group should be ticketer as well + groups = pagure.lib.get_project_groups( + self.session, + project_obj=project, + access='ticket', + ) + self.assertEqual(len(groups), 1) + self.assertEqual(groups[0].display_name, 'Justice League') + self.assertEqual(len(project.groups), 1) + self.assertEqual( + project.groups[0].display_name, + 'Justice League' + ) + + # Update the access of group JL to ticket + msg = pagure.lib.add_group_to_project( + self.session, + project=project, + new_group='JL', + user='pingou', + access='ticket' + ) + self.session.commit() + self.assertEqual(msg, 'Group access updated') + + # It is not an admin + project = pagure.lib.get_project(self.session, name='test') + groups = pagure.lib.get_project_groups( + self.session, + project_obj=project, + access='admin', + ) + self.assertEqual(len(groups), 0) + self.assertEqual(len(project.admin_groups), 0) + + # The group shouldn't be a committer + groups = pagure.lib.get_project_groups( + self.session, + project_obj=project, + access='commit', + ) + self.assertEqual(len(groups), 0) + self.assertEqual(len(project.committer_groups), 0) + + # The group should be ticketer + groups = pagure.lib.get_project_groups( + self.session, + project_obj=project, + access='ticket', + ) + self.assertEqual(len(groups), 1) + self.assertEqual(groups[0].display_name, 'Justice League') + self.assertEqual(len(project.groups), 1) + self.assertEqual( + project.groups[0].display_name, + 'Justice League' + ) + + def test_get_project_groups_combine_false(self): + ''' Test the get_project_groups method in pagure.lib + when combine is False ''' + + # Create some projects + tests.create_projects(self.session) + # Create a group in database + msg = pagure.lib.add_group( + self.session, + group_name='JL', + display_name='Justice League', + description='Nope, it\'s not JLA anymore', + group_type='user', + user='foo', + is_admin=False, + blacklist=pagure.APP.config.get('BLACKLISTED_PROJECTS') + ) + + self.assertEqual( + msg, + 'User `foo` added to the group `JL`.' + ) + + # Add the group to project we just created, test + # First add it as an admin + project = pagure.lib.get_project(self.session, name='test') + msg = pagure.lib.add_group_to_project( + self.session, + project=project, + new_group='JL', + user='pingou', + ) + self.session.commit() + self.assertEqual(msg, 'Group added') + + # Now, the group is an admin in the project + # so, it must have access to everything + project = pagure.lib.get_project(self.session, name='test') + groups = pagure.lib.get_project_groups( + self.session, + project_obj=project, + access='admin', + combine=False, + ) + self.assertEqual(len(groups), 1) + self.assertEqual(groups[0].display_name, 'Justice League') + self.assertEqual(len(project.admin_groups), 1) + self.assertEqual( + project.admin_groups[0].display_name, + 'Justice League' + ) + + # The group shoudn't be a committer + groups = pagure.lib.get_project_groups( + self.session, + project_obj=project, + access='commit', + combine=False, + ) + self.assertEqual(len(groups), 0) + + # The group shoudn't be a ticketer + groups = pagure.lib.get_project_groups( + self.session, + project_obj=project, + access='ticket', + combine=False, + ) + self.assertEqual(len(groups), 0) + + # Update the access level of the group, JL to commit + project = pagure.lib.get_project(self.session, name='test') + msg = pagure.lib.add_group_to_project( + self.session, + project=project, + new_group='JL', + user='pingou', + access='commit' + ) + self.session.commit() + self.assertEqual(msg, 'Group access updated') + + # It shouldn't be an admin + project = pagure.lib.get_project(self.session, name='test') + groups = pagure.lib.get_project_groups( + self.session, + project_obj=project, + access='admin', + combine=False, + ) + self.assertEqual(len(groups), 0) + + # It is a committer + groups = pagure.lib.get_project_groups( + self.session, + project_obj=project, + access='commit', + combine=False, + ) + self.assertEqual(len(groups), 1) + self.assertEqual(groups[0].display_name, 'Justice League') + self.assertEqual(len(project.committer_groups), 1) + self.assertEqual( + project.committer_groups[0].display_name, + 'Justice League' + ) + + # The group shouldn't be ticketer + groups = pagure.lib.get_project_groups( + self.session, + project_obj=project, + access='ticket', + combine=False, + ) + self.assertEqual(len(groups), 0) + + # Update the access of group JL to ticket + msg = pagure.lib.add_group_to_project( + self.session, + project=project, + new_group='JL', + user='pingou', + access='ticket' + ) + self.session.commit() + self.assertEqual(msg, 'Group access updated') + + # It is not an admin + project = pagure.lib.get_project(self.session, name='test') + groups = pagure.lib.get_project_groups( + self.session, + project_obj=project, + access='admin', + combine=False, + ) + self.assertEqual(len(groups), 0) + + # The group shouldn't be a committer + groups = pagure.lib.get_project_groups( + self.session, + project_obj=project, + access='commit', + combine=False, + ) + self.assertEqual(len(groups), 0) + + # The group should be ticketer + groups = pagure.lib.get_project_groups( + self.session, + project_obj=project, + access='ticket', + combine=False, + ) + self.assertEqual(len(groups), 1) + self.assertEqual(groups[0].display_name, 'Justice League') + self.assertEqual(len(project.groups), 1) + self.assertEqual( + project.groups[0].display_name, + 'Justice League' + ) + def test_set_watch_obj(self): """ Test the set_watch_obj method in pagure.lib """ # Create the project ns/test From 95fd88ba55e6fda4b01bd50bc710e37132c7ba05 Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Feb 15 2017 10:30:34 +0000 Subject: [PATCH 8/26] Unit Test: get obj access in lib/init for model.User Signed-off-by: Vivek Anand --- diff --git a/tests/test_pagure_lib.py b/tests/test_pagure_lib.py index d1883d8..6cf5a36 100644 --- a/tests/test_pagure_lib.py +++ b/tests/test_pagure_lib.py @@ -3847,6 +3847,73 @@ class PagureLibtests(tests.Modeltests): 'Justice League' ) + def test_get_obj_access_user(self): + """ Test the get_obj_access method of pagure.lib + for model.User object """ + + # Create the projects + tests.create_projects(self.session) + + # Add a user object - make him an admin first + project = pagure.lib.get_project(self.session, name='test') + msg = pagure.lib.add_user_to_project( + self.session, + project=project, + new_user='foo', + user='pingou' + ) + self.session.commit() + self.assertEqual(msg, 'User added') + + user = pagure.lib.get_user(self.session, key='foo') + # He should be an admin + access_obj = pagure.lib.get_obj_access( + self.session, + project_obj=project, + obj=user + ) + self.assertEqual(access_obj.access, 'admin') + + # Update and check for commit access + msg = pagure.lib.add_user_to_project( + self.session, + project=project, + new_user='foo', + user='pingou', + access='commit' + ) + self.session.commit() + self.assertEqual(msg, 'User access updated') + project = pagure.lib.get_project(self.session, name='test') + + # He should be a committer + access_obj = pagure.lib.get_obj_access( + self.session, + project_obj=project, + obj=user + ) + self.assertEqual(access_obj.access, 'commit') + + # Update and check for ticket access + msg = pagure.lib.add_user_to_project( + self.session, + project=project, + new_user='foo', + user='pingou', + access='ticket' + ) + self.session.commit() + self.assertEqual(msg, 'User access updated') + project = pagure.lib.get_project(self.session, name='test') + + # He should be a ticketer + access_obj = pagure.lib.get_obj_access( + self.session, + project_obj=project, + obj=user + ) + self.assertEqual(access_obj.access, 'ticket') + def test_set_watch_obj(self): """ Test the set_watch_obj method in pagure.lib """ # Create the project ns/test From 015a64fd9629ee376da2013f6b0e4010fa142784 Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Feb 15 2017 10:30:34 +0000 Subject: [PATCH 9/26] Unit test: get object access for model.PagureGroup object Signed-off-by: Vivek Anand --- diff --git a/tests/test_pagure_lib.py b/tests/test_pagure_lib.py index 6cf5a36..51c4e1b 100644 --- a/tests/test_pagure_lib.py +++ b/tests/test_pagure_lib.py @@ -3914,6 +3914,90 @@ class PagureLibtests(tests.Modeltests): ) self.assertEqual(access_obj.access, 'ticket') + def test_get_obj_access_group(self): + """ Test the get_obj_access method of pagure.lib + for model.PagureGroup object """ + + # Create the projects + tests.create_projects(self.session) + + # Create a group in database + msg = pagure.lib.add_group( + self.session, + group_name='JL', + display_name='Justice League', + description='Nope, it\'s not JLA anymore', + group_type='user', + user='foo', + is_admin=False, + blacklist=pagure.APP.config.get('BLACKLISTED_PROJECTS') + ) + + self.assertEqual( + msg, + 'User `foo` added to the group `JL`.' + ) + + # Add a group object - make him an admin first + project = pagure.lib.get_project(self.session, name='test') + msg = pagure.lib.add_group_to_project( + self.session, + project=project, + new_group='JL', + user='pingou' + ) + self.session.commit() + self.assertEqual(msg, 'Group added') + + group = pagure.lib.search_groups(self.session, group_name='JL') + # He should be an admin + access_obj = pagure.lib.get_obj_access( + self.session, + project_obj=project, + obj=group + ) + self.assertEqual(access_obj.access, 'admin') + + # Update and check for commit access + msg = pagure.lib.add_group_to_project( + self.session, + project=project, + new_group='JL', + user='pingou', + access='commit' + ) + self.session.commit() + self.assertEqual(msg, 'Group access updated') + + project = pagure.lib.get_project(self.session, name='test') + # He should be a committer + access_obj = pagure.lib.get_obj_access( + self.session, + project_obj=project, + obj=group, + ) + self.assertEqual(access_obj.access, 'commit') + + # Update and check for ticket access + msg = pagure.lib.add_group_to_project( + self.session, + project=project, + new_group='JL', + user='pingou', + access='ticket' + ) + self.session.commit() + self.assertEqual(msg, 'Group access updated') + project = pagure.lib.get_project(self.session, name='test') + + # He should be a ticketer + access_obj = pagure.lib.get_obj_access( + self.session, + project_obj=project, + obj=group, + ) + self.assertEqual(access_obj.access, 'ticket') + def test_set_watch_obj(self): """ Test the set_watch_obj method in pagure.lib """ # Create the project ns/test From 2b440eddc4643f1401db684ec273e6241d609db8 Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Feb 15 2017 10:30:34 +0000 Subject: [PATCH 10/26] Unit test: AddUserForm and AddUserToGroupForm Signed-off-by: Vivek Anand --- diff --git a/tests/test_pagure_flask_form.py b/tests/test_pagure_flask_form.py index 916c3f8..5ec6e04 100644 --- a/tests/test_pagure_flask_form.py +++ b/tests/test_pagure_flask_form.py @@ -105,6 +105,30 @@ class PagureFlaskFormTests(tests.Modeltests): form.csrf_token.data = '##%s' % hmac_csrf self.assertTrue(form.validate_on_submit()) + def test_add_user_form(self): + """ Test the AddUserForm of pagure.forms """ + with pagure.APP.test_request_context(method='POST'): + form = pagure.forms.AddUserForm() + form.csrf_token.data = form.csrf_token.current_token + # No user or access given + self.assertFalse(form.validate_on_submit()) + # No access given + form.user.data = 'foo' + self.assertFalse(form.validate_on_submit()) + form.access.data = 'admin' + self.assertTrue(form.validate_on_submit()) + + def test_add_user_to_group_form(self): + """ Test the AddUserToGroup form of pagure.forms """ + with pagure.APP.test_request_context(method='POST'): + form = pagure.forms.AddUserToGroupForm() + form.csrf_token.data = form.csrf_token.current_token + # No user given + self.assertFalse(form.validate_on_submit()) + form.user.data = 'foo' + # Everything given + self.assertTrue(form.validate_on_submit()) + if __name__ == '__main__': SUITE = unittest.TestLoader().loadTestsFromTestCase( From 3944f016233b3d9f00d045220db1bf89d8deee7a Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Feb 15 2017 10:30:34 +0000 Subject: [PATCH 11/26] Unit test: AddGroupForm of pagure.forms Signed-off-by: Vivek Anand --- diff --git a/tests/test_pagure_flask_form.py b/tests/test_pagure_flask_form.py index 5ec6e04..06c4928 100644 --- a/tests/test_pagure_flask_form.py +++ b/tests/test_pagure_flask_form.py @@ -129,6 +129,20 @@ class PagureFlaskFormTests(tests.Modeltests): # Everything given self.assertTrue(form.validate_on_submit()) + def test_add_group_form(self): + """ Test the AddGroupForm form of pagure.forms """ + with pagure.APP.test_request_context(method='POST'): + form = pagure.forms.AddGroupForm() + form.csrf_token.data = form.csrf_token.current_token + # No group given + self.assertFalse(form.validate_on_submit()) + # No access given + form.group.data = 'gname' + self.assertFalse(form.validate_on_submit()) + form.access.data = 'admin' + self.assertTrue(form.validate_on_submit()) + + if __name__ == '__main__': SUITE = unittest.TestLoader().loadTestsFromTestCase( From d5809b9d48b1424a2ad6f002face6b4967304e0a Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Feb 15 2017 10:30:34 +0000 Subject: [PATCH 12/26] Unit test: private ticket comments for committers Signed-off-by: Vivek Anand --- diff --git a/tests/test_pagure_flask_internal.py b/tests/test_pagure_flask_internal.py index 709a78e..e9461dd 100644 --- a/tests/test_pagure_flask_internal.py +++ b/tests/test_pagure_flask_internal.py @@ -299,6 +299,112 @@ class PagureFlaskInternaltests(tests.Modeltests): pagure.APP.config['IP_ALLOWED_INTERNAL'] = before[:] @patch('pagure.lib.notify.send_email') + def test_private_ticket_add_comment_acl(self, send_email): + """ Test the ticket_add_comment function on a private ticket. """ + send_email.return_value = True + + tests.create_projects(self.session) + + # Create issues to play with + repo = pagure.lib.get_project(self.session, 'test') + msg = pagure.lib.new_issue( + session=self.session, + repo=repo, + title='Test issue', + content='We should work on this, really', + user='pingou', + private=True, + ticketfolder=None + ) + self.session.commit() + self.assertEqual(msg.title, 'Test issue') + + repo = pagure.lib.get_project(self.session, 'test') + issue = repo.issues[0] + self.assertEqual(len(issue.comments), 0) + + # Currently, he is just an average user, + # He doesn't have any access in this repo + data = { + 'objid': issue.uid, + 'useremail': 'foo@bar.com', + 'comment': 'Looks good to me!', + } + + # Valid objid, un-allowed user for this (private) ticket + output = self.app.put('/pv/ticket/comment/', data=data) + self.assertEqual(output.status_code, 403) + + repo = pagure.lib.get_project(self.session, 'test') + # Let's promote him to be a ticketer + # He shoudn't be able to comment even then though + msg = pagure.lib.add_user_to_project( + self.session, + project=repo, + new_user='foo', + user='pingou', + access='ticket' + ) + self.session.commit() + self.assertEqual(msg, 'User added') + + repo = pagure.lib.get_project(self.session, 'test') + output = self.app.put('/pv/ticket/comment/', data=data) + self.assertEqual(output.status_code, 403) + + repo = pagure.lib.get_project(self.session, 'test') + # Let's promote him to be a committer + # He should be able to comment + msg = pagure.lib.add_user_to_project( + self.session, + project=repo, + new_user='foo', + user='pingou', + access='commit' + ) + self.session.commit() + self.assertEqual(msg, 'User access updated') + # Add comment + output = self.app.put('/pv/ticket/comment/', data=data) + self.assertEqual(output.status_code, 200) + js_data = json.loads(output.data) + self.assertDictEqual(js_data, {'message': 'Comment added'}) + + repo = pagure.lib.get_project(self.session, 'test') + issue = repo.issues[0] + self.assertEqual(len(issue.comments), 1) + + # Let's promote him to be a admin + # He should be able to comment + msg = pagure.lib.add_user_to_project( + self.session, + project=repo, + new_user='foo', + user='pingou', + access='admin' + ) + self.session.commit() + self.assertEqual(msg, 'User access updated') + # Add comment + output = self.app.put('/pv/ticket/comment/', data=data) + self.assertEqual(output.status_code, 200) + js_data = json.loads(output.data) + self.assertDictEqual(js_data, {'message': 'Comment added'}) + + repo = pagure.lib.get_project(self.session, 'test') + issue = repo.issues[0] + self.assertEqual(len(issue.comments), 2) + + # Check the @localonly + before = pagure.APP.config['IP_ALLOWED_INTERNAL'][:] + pagure.APP.config['IP_ALLOWED_INTERNAL'] = [] + + output = self.app.put('/pv/ticket/comment/', data=data) + self.assertEqual(output.status_code, 403) + + pagure.APP.config['IP_ALLOWED_INTERNAL'] = before[:] + + @patch('pagure.lib.notify.send_email') def test_mergeable_request_pull_FF(self, send_email): """ Test the mergeable_request_pull endpoint with a fast-forward merge. From 937d3e0eb1cf1a6c952e70987dd06126439dde7f Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Feb 15 2017 10:30:34 +0000 Subject: [PATCH 13/26] Remove unused import in test/lib_git.py Signed-off-by: Vivek Anand --- diff --git a/tests/test_pagure_lib_git.py b/tests/test_pagure_lib_git.py index 3512d7b..961db88 100644 --- a/tests/test_pagure_lib_git.py +++ b/tests/test_pagure_lib_git.py @@ -9,9 +9,9 @@ """ __requires__ = ['SQLAlchemy >= 0.8'] + import pkg_resources -import json import unittest import shutil import sys From ffcb0c07716b0df80ba8aa4301dbe607abbdb123 Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Feb 15 2017 10:30:34 +0000 Subject: [PATCH 14/26] Unit Test: writing gitolite file when the new user is an admin Signed-off-by: Vivek Anand --- diff --git a/tests/test_pagure_lib_git.py b/tests/test_pagure_lib_git.py index 961db88..c2d76e2 100644 --- a/tests/test_pagure_lib_git.py +++ b/tests/test_pagure_lib_git.py @@ -47,11 +47,13 @@ class PagureLibGittests(tests.Modeltests): self.path, 'requests') def test_write_gitolite_acls(self): - """ Test the write_gitolite_acls function of pagure.lib.git. """ + """ Test the write_gitolite_acls function of pagure.lib.git. + when the new uesr is an made an admin """ tests.create_projects(self.session) repo = pagure.lib.get_project(self.session, 'test') # Add an user to a project + # The user will be an admin of the project msg = pagure.lib.add_user_to_project( session=self.session, project=repo, From 2897c26674f5b468dfcf850803de8d3071bc05be Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Feb 15 2017 10:30:34 +0000 Subject: [PATCH 15/26] Unit test: writing gitolite files when the new user has jus ticket access Signed-off-by: Vivek Anand --- diff --git a/tests/test_pagure_lib_git.py b/tests/test_pagure_lib_git.py index c2d76e2..6d16064 100644 --- a/tests/test_pagure_lib_git.py +++ b/tests/test_pagure_lib_git.py @@ -267,6 +267,108 @@ repo requests/forks/pingou/test3 os.unlink(outputconf) self.assertFalse(os.path.exists(outputconf)) + def test_write_gitolite_acls_ticket(self): + """ Test the write_gitolite_acls function of pagure.lib.git. + when the new uesr is just a ticketer """ + tests.create_projects(self.session) + + repo = pagure.lib.get_project(self.session, 'test') + # Add an user to a project + # The user will be an admin of the project + msg = pagure.lib.add_user_to_project( + session=self.session, + project=repo, + new_user='foo', + user='pingou', + access='ticket' + ) + self.session.commit() + self.assertEqual(msg, 'User added') + # Add a forked project + item = pagure.lib.model.Project( + user_id=1, # pingou + name='test3', + description='test project #2', + is_fork=True, + parent_id=1, + hook_token='aaabbbvvv', + ) + self.session.add(item) + self.session.commit() + + outputconf = os.path.join(self.path, 'test_gitolite.conf') + + pagure.lib.git.write_gitolite_acls(self.session, outputconf) + + self.assertTrue(os.path.exists(outputconf)) + + with open(outputconf) as stream: + data = stream.read() + + exp = """ +repo test + R = @all + RW+ = pingou + +repo docs/test + R = @all + RW+ = pingou + +repo tickets/test + RW+ = pingou + +repo requests/test + RW+ = pingou + +repo test2 + R = @all + RW+ = pingou + +repo docs/test2 + R = @all + RW+ = pingou + +repo tickets/test2 + RW+ = pingou + +repo requests/test2 + RW+ = pingou + +repo somenamespace/test3 + R = @all + RW+ = pingou + +repo docs/somenamespace/test3 + R = @all + RW+ = pingou + +repo tickets/somenamespace/test3 + RW+ = pingou + +repo requests/somenamespace/test3 + RW+ = pingou + +repo forks/pingou/test3 + R = @all + RW+ = pingou + +repo docs/forks/pingou/test3 + R = @all + RW+ = pingou + +repo tickets/forks/pingou/test3 + RW+ = pingou + +repo requests/forks/pingou/test3 + RW+ = pingou + +""" + #print data + self.assertEqual(data, exp) + + os.unlink(outputconf) + self.assertFalse(os.path.exists(outputconf)) + def test_write_gitolite_acls_groups(self): """ Test the write_gitolite_acls function of pagure.lib.git with groups. From 994729223d4149bdcb0edfee08581347e27602c3 Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Feb 15 2017 10:30:34 +0000 Subject: [PATCH 16/26] Unit test: write gitolite files when user is committer Signed-off-by: Vivek Anand --- diff --git a/tests/test_pagure_lib_git.py b/tests/test_pagure_lib_git.py index 6d16064..2fc9c84 100644 --- a/tests/test_pagure_lib_git.py +++ b/tests/test_pagure_lib_git.py @@ -369,6 +369,112 @@ repo requests/forks/pingou/test3 os.unlink(outputconf) self.assertFalse(os.path.exists(outputconf)) + def test_write_gitolite_acls_commit(self): + """ Test the write_gitolite_acls function of pagure.lib.git. + when the new uesr is just a committer """ + tests.create_projects(self.session) + + repo = pagure.lib.get_project(self.session, 'test') + # Add an user to a project + # The user will be an admin of the project + msg = pagure.lib.add_user_to_project( + session=self.session, + project=repo, + new_user='foo', + user='pingou', + access='commit' + ) + self.session.commit() + self.assertEqual(msg, 'User added') + # Add a forked project + item = pagure.lib.model.Project( + user_id=1, # pingou + name='test3', + description='test project #2', + is_fork=True, + parent_id=1, + hook_token='aaabbbvvv', + ) + self.session.add(item) + self.session.commit() + + outputconf = os.path.join(self.path, 'test_gitolite.conf') + + pagure.lib.git.write_gitolite_acls(self.session, outputconf) + + self.assertTrue(os.path.exists(outputconf)) + + with open(outputconf) as stream: + data = stream.read() + + exp = """ +repo test + R = @all + RW+ = pingou + RW+ = foo + +repo docs/test + R = @all + RW+ = pingou + RW+ = foo + +repo tickets/test + RW+ = pingou + RW+ = foo + +repo requests/test + RW+ = pingou + RW+ = foo + +repo test2 + R = @all + RW+ = pingou + +repo docs/test2 + R = @all + RW+ = pingou + +repo tickets/test2 + RW+ = pingou + +repo requests/test2 + RW+ = pingou + +repo somenamespace/test3 + R = @all + RW+ = pingou + +repo docs/somenamespace/test3 + R = @all + RW+ = pingou + +repo tickets/somenamespace/test3 + RW+ = pingou + +repo requests/somenamespace/test3 + RW+ = pingou + +repo forks/pingou/test3 + R = @all + RW+ = pingou + +repo docs/forks/pingou/test3 + R = @all + RW+ = pingou + +repo tickets/forks/pingou/test3 + RW+ = pingou + +repo requests/forks/pingou/test3 + RW+ = pingou + +""" + #print data + self.assertEqual(data, exp) + + os.unlink(outputconf) + self.assertFalse(os.path.exists(outputconf)) + def test_write_gitolite_acls_groups(self): """ Test the write_gitolite_acls function of pagure.lib.git with groups. From b5a55729f71e3a0860fd95ca40cc4a92cf7ad260 Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Feb 15 2017 10:30:34 +0000 Subject: [PATCH 17/26] Unit test: write gitolite files when group is admin Signed-off-by: Vivek Anand --- diff --git a/tests/test_pagure_lib_git.py b/tests/test_pagure_lib_git.py index 2fc9c84..e203f4d 100644 --- a/tests/test_pagure_lib_git.py +++ b/tests/test_pagure_lib_git.py @@ -477,13 +477,14 @@ repo requests/forks/pingou/test3 def test_write_gitolite_acls_groups(self): """ Test the write_gitolite_acls function of pagure.lib.git with - groups. + groups as admin """ tests.create_projects(self.session) repo = pagure.lib.get_project(self.session, 'test') # Add a couple of groups + # They would be admins msg = pagure.lib.add_group( self.session, group_name='sysadmin', From 1edd2cfbeef4e295c3c27c0517934802bd9473ee Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Feb 15 2017 10:30:34 +0000 Subject: [PATCH 18/26] Unit test: write gitolite files when group has ticket access Signed-off-by: Vivek Anand --- diff --git a/tests/test_pagure_lib_git.py b/tests/test_pagure_lib_git.py index e203f4d..9d3fb43 100644 --- a/tests/test_pagure_lib_git.py +++ b/tests/test_pagure_lib_git.py @@ -632,6 +632,159 @@ repo requests/forks/pingou/test2 os.unlink(outputconf) self.assertFalse(os.path.exists(outputconf)) + def test_write_gitolite_acls_groups_ticket(self): + """ Test the write_gitolite_acls function of pagure.lib.git with + groups as ticketers + """ + tests.create_projects(self.session) + + repo = pagure.lib.get_project(self.session, 'test') + + # Add a couple of groups + # They would be ticketers + msg = pagure.lib.add_group( + self.session, + group_name='sysadmin', + display_name='sysadmin group', + description=None, + group_type='user', + user='pingou', + is_admin=False, + blacklist=[], + ) + self.session.commit() + self.assertEqual(msg, 'User `pingou` added to the group `sysadmin`.') + msg = pagure.lib.add_group( + self.session, + group_name='devs', + display_name='devs group', + description=None, + group_type='user', + user='pingou', + is_admin=False, + blacklist=[], + ) + self.session.commit() + self.assertEqual(msg, 'User `pingou` added to the group `devs`.') + + # Associate these groups to a project + msg = pagure.lib.add_group_to_project( + session=self.session, + project=repo, + new_group='sysadmin', + user='pingou', + access='ticket', + ) + self.session.commit() + self.assertEqual(msg, 'Group added') + msg = pagure.lib.add_group_to_project( + session=self.session, + project=repo, + new_group='devs', + user='pingou', + access='ticket' + ) + self.session.commit() + self.assertEqual(msg, 'Group added') + + # Add an user to a project + msg = pagure.lib.add_user_to_project( + session=self.session, + project=repo, + new_user='foo', + user='pingou', + ) + self.session.commit() + self.assertEqual(msg, 'User added') + # Add a forked project + item = pagure.lib.model.Project( + user_id=1, # pingou + name='test2', + description='test project #2', + is_fork=True, + parent_id=1, + hook_token='aaabbbvvv', + ) + self.session.add(item) + self.session.commit() + + outputconf = os.path.join(self.path, 'test_gitolite.conf') + + pagure.lib.git.write_gitolite_acls(self.session, outputconf) + + self.assertTrue(os.path.exists(outputconf)) + + with open(outputconf) as stream: + data = stream.read() + + exp = """ +repo test + R = @all + RW+ = pingou + RW+ = foo + +repo docs/test + R = @all + RW+ = pingou + RW+ = foo + +repo tickets/test + RW+ = pingou + RW+ = foo + +repo requests/test + RW+ = pingou + RW+ = foo + +repo test2 + R = @all + RW+ = pingou + +repo docs/test2 + R = @all + RW+ = pingou + +repo tickets/test2 + RW+ = pingou + +repo requests/test2 + RW+ = pingou + +repo somenamespace/test3 + R = @all + RW+ = pingou + +repo docs/somenamespace/test3 + R = @all + RW+ = pingou + +repo tickets/somenamespace/test3 + RW+ = pingou + +repo requests/somenamespace/test3 + RW+ = pingou + +repo forks/pingou/test2 + R = @all + RW+ = pingou + +repo docs/forks/pingou/test2 + R = @all + RW+ = pingou + +repo tickets/forks/pingou/test2 + RW+ = pingou + +repo requests/forks/pingou/test2 + RW+ = pingou + +""" + #print data + self.assertEqual(data.split('\n'), exp.split('\n')) + + os.unlink(outputconf) + self.assertFalse(os.path.exists(outputconf)) + def test_commit_to_patch(self): """ Test the commit_to_patch function of pagure.lib.git. """ # Create a git repo to play with From 5827c9f1f8c5a1bbed079dbdc6d93e2ee1c1a186 Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Feb 15 2017 10:30:34 +0000 Subject: [PATCH 19/26] Unit test: write gitolite files when group has commit access Signed-off-by: Vivek Anand --- diff --git a/tests/test_pagure_lib_git.py b/tests/test_pagure_lib_git.py index 9d3fb43..63daf1c 100644 --- a/tests/test_pagure_lib_git.py +++ b/tests/test_pagure_lib_git.py @@ -785,6 +785,165 @@ repo requests/forks/pingou/test2 os.unlink(outputconf) self.assertFalse(os.path.exists(outputconf)) + def test_write_gitolite_acls_groups_commit(self): + """ Test the write_gitolite_acls function of pagure.lib.git with + groups as committers + """ + tests.create_projects(self.session) + + repo = pagure.lib.get_project(self.session, 'test') + + # Add a couple of groups + # They would be committers + msg = pagure.lib.add_group( + self.session, + group_name='sysadmin', + display_name='sysadmin group', + description=None, + group_type='user', + user='pingou', + is_admin=False, + blacklist=[], + ) + self.session.commit() + self.assertEqual(msg, 'User `pingou` added to the group `sysadmin`.') + msg = pagure.lib.add_group( + self.session, + group_name='devs', + display_name='devs group', + description=None, + group_type='user', + user='pingou', + is_admin=False, + blacklist=[], + ) + self.session.commit() + self.assertEqual(msg, 'User `pingou` added to the group `devs`.') + + # Associate these groups to a project + msg = pagure.lib.add_group_to_project( + session=self.session, + project=repo, + new_group='sysadmin', + user='pingou', + access='commit' + ) + self.session.commit() + self.assertEqual(msg, 'Group added') + msg = pagure.lib.add_group_to_project( + session=self.session, + project=repo, + new_group='devs', + user='pingou', + access='commit' + ) + self.session.commit() + self.assertEqual(msg, 'Group added') + + # Add an user to a project + msg = pagure.lib.add_user_to_project( + session=self.session, + project=repo, + new_user='foo', + user='pingou', + ) + self.session.commit() + self.assertEqual(msg, 'User added') + # Add a forked project + item = pagure.lib.model.Project( + user_id=1, # pingou + name='test2', + description='test project #2', + is_fork=True, + parent_id=1, + hook_token='aaabbbvvv', + ) + self.session.add(item) + self.session.commit() + + outputconf = os.path.join(self.path, 'test_gitolite.conf') + + pagure.lib.git.write_gitolite_acls(self.session, outputconf) + + self.assertTrue(os.path.exists(outputconf)) + + with open(outputconf) as stream: + data = stream.read() + + exp = """@sysadmin = pingou +@devs = pingou + +repo test + R = @all + RW+ = @sysadmin @devs + RW+ = pingou + RW+ = foo + +repo docs/test + R = @all + RW+ = @sysadmin @devs + RW+ = pingou + RW+ = foo + +repo tickets/test + RW+ = @sysadmin @devs + RW+ = pingou + RW+ = foo + +repo requests/test + RW+ = @sysadmin @devs + RW+ = pingou + RW+ = foo + +repo test2 + R = @all + RW+ = pingou + +repo docs/test2 + R = @all + RW+ = pingou + +repo tickets/test2 + RW+ = pingou + +repo requests/test2 + RW+ = pingou + +repo somenamespace/test3 + R = @all + RW+ = pingou + +repo docs/somenamespace/test3 + R = @all + RW+ = pingou + +repo tickets/somenamespace/test3 + RW+ = pingou + +repo requests/somenamespace/test3 + RW+ = pingou + +repo forks/pingou/test2 + R = @all + RW+ = pingou + +repo docs/forks/pingou/test2 + R = @all + RW+ = pingou + +repo tickets/forks/pingou/test2 + RW+ = pingou + +repo requests/forks/pingou/test2 + RW+ = pingou + +""" + #print data + self.assertEqual(data.split('\n'), exp.split('\n')) + + os.unlink(outputconf) + self.assertFalse(os.path.exists(outputconf)) + def test_commit_to_patch(self): """ Test the commit_to_patch function of pagure.lib.git. """ # Create a git repo to play with From 74bad48c31dcf7f0613d7d0a3726df5fb83efd48 Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Feb 15 2017 10:30:34 +0000 Subject: [PATCH 20/26] Remove unused import from test/lib.git.py Signed-off-by: Vivek Anand --- diff --git a/tests/test_pagure_lib_model.py b/tests/test_pagure_lib_model.py index a98b840..336ecfe 100644 --- a/tests/test_pagure_lib_model.py +++ b/tests/test_pagure_lib_model.py @@ -12,7 +12,6 @@ __requires__ = ['SQLAlchemy >= 0.8'] import pkg_resources import unittest -import shutil import sys import os From 0602a4635a4b9b04050082affac236e1a2e06a8e Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Feb 15 2017 10:30:34 +0000 Subject: [PATCH 21/26] Adjust unit test: raise exception when acl not found Signed-off-by: Vivek Anand --- diff --git a/tests/test_pagure_lib.py b/tests/test_pagure_lib.py index 51c4e1b..b7271cc 100644 --- a/tests/test_pagure_lib.py +++ b/tests/test_pagure_lib.py @@ -3257,15 +3257,15 @@ class PagureLibtests(tests.Modeltests): self.assertEqual(len(users), 0) self.assertEqual(project.user.username, 'pingou') - users = pagure.lib.get_project_users( - self.session, - project_obj=project, - access='owner', + # Wrong access level, should raise Accesslevelnotfound exception + self.assertRaises( + pagure.exceptions.AccessLevelNotFound, + pagure.lib.get_project_users, + self.session, + project_obj=project, + access='owner', ) - # Wrong access level, should return None - self.assertEqual(users, None) - # Let's add a new user to the project, 'foo' # By default, if no access is specified, he becomes an admin msg = pagure.lib.add_user_to_project( From 19b244e3f3493acf020c75609dbc6875f5581ab1 Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Feb 15 2017 10:30:34 +0000 Subject: [PATCH 22/26] Adjust unit tests for ui/repo.py for project acls Signed-off-by: Vivek Anand --- diff --git a/tests/test_pagure_flask_ui_repo.py b/tests/test_pagure_flask_ui_repo.py index 816c0c3..9f50006 100644 --- a/tests/test_pagure_flask_ui_repo.py +++ b/tests/test_pagure_flask_ui_repo.py @@ -264,53 +264,47 @@ class PagureFlaskRepotests(tests.Modeltests): 'user': 'ralph', } - # Missing access + # Missing access and no CSRF output = self.app.post('/test/adduser', data=data) self.assertEqual(output.status_code, 200) self.assertIn( 'Add user - test - Pagure', output.data) self.assertTrue('Add user to the' in output.data) - data['csrf_token'] = csrf_token + # No CSRF output = self.app.post('/test/adduser', data=data) self.assertEqual(output.status_code, 200) self.assertIn( 'Add user - test - Pagure', output.data) - self.assertIn('Add user to the', output.data) - data = { - 'user': 'ralph', - 'access': 'commit', - } - - # No CSRF + # Missing access + data['csrf_token'] = csrf_token output = self.app.post('/test/adduser', data=data) self.assertEqual(output.status_code, 200) self.assertIn( 'Add user - test - Pagure', output.data) + self.assertIn('Add user to the', output.data) # Unknown user - data['csrf_token'] = csrf_token + data['access'] = 'commit' output = self.app.post('/test/adduser', data=data) self.assertEqual(output.status_code, 200) self.assertIn( 'Add user - test - Pagure', output.data) self.assertIn('Add user to the', output.data) self.assertIn( - '\n No user "ralph" ' - 'found', output.data) + '\n No user "ralph" found\n', + output.data) + # All correct data['user'] = 'foo' output = self.app.post( '/test/adduser', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) - self.assertIn( - 'Settings - test - Pagure', output.data) self.assertIn('

Settings for test

', output.data) self.assertIn( '\n User added', output.data) - @patch('pagure.ui.repo.admin_session_timedout') def test_add_group_project_when_user_mngt_off(self, ast): """ Test the add_group_project endpoint when user management is From 02d814d874295fd64c38ffba17c2acd0c8cc5cef Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Feb 15 2017 10:30:34 +0000 Subject: [PATCH 23/26] Search project should return the project in case of commit access Signed-off-by: Vivek Anand --- diff --git a/tests/test_pagure_lib.py b/tests/test_pagure_lib.py index b7271cc..ab4fe92 100644 --- a/tests/test_pagure_lib.py +++ b/tests/test_pagure_lib.py @@ -1253,6 +1253,7 @@ class PagureLibtests(tests.Modeltests): # Also check if the project shows up if a user doesn't # have admin access in the project + # Check with commit access first project = pagure.lib.get_project(self.session, name='test') pagure.lib.add_user_to_project( self.session, @@ -1263,6 +1264,17 @@ class PagureLibtests(tests.Modeltests): ) projects = pagure.lib.search_projects(self.session, username='foo') + self.assertEqual(len(projects), 1) + + # Now check with only ticket access + pagure.lib.add_user_to_project( + self.session, + project=project, + new_user='foo', + user='pingou', + access='ticket' + ) + projects = pagure.lib.search_projects(self.session, username='foo') self.assertEqual(len(projects), 0) def test_search_project_forked(self): From e904a33637cebefd721de7f2e15341a5611163cb Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Feb 15 2017 10:30:34 +0000 Subject: [PATCH 24/26] Adjust pagure.lib tests after committers are allowed to have repos in index file Signed-off-by: Vivek Anand --- diff --git a/tests/test_pagure_lib.py b/tests/test_pagure_lib.py index ab4fe92..2c8d5c1 100644 --- a/tests/test_pagure_lib.py +++ b/tests/test_pagure_lib.py @@ -1255,7 +1255,7 @@ class PagureLibtests(tests.Modeltests): # have admin access in the project # Check with commit access first project = pagure.lib.get_project(self.session, name='test') - pagure.lib.add_user_to_project( + msg = pagure.lib.add_user_to_project( self.session, project=project, new_user='foo', @@ -1263,17 +1263,22 @@ class PagureLibtests(tests.Modeltests): access='commit' ) + self.assertEqual(msg, 'User added') + self.session.commit() projects = pagure.lib.search_projects(self.session, username='foo') self.assertEqual(len(projects), 1) # Now check with only ticket access - pagure.lib.add_user_to_project( + project = pagure.lib.get_project(self.session, name='test') + msg = pagure.lib.add_user_to_project( self.session, project=project, new_user='foo', user='pingou', access='ticket' ) + self.assertEqual(msg, 'User access updated') + self.session.commit() projects = pagure.lib.search_projects(self.session, username='foo') self.assertEqual(len(projects), 0) From 7757363d00d7bf7163e1391b3199850cd063706e Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Feb 15 2017 10:30:34 +0000 Subject: [PATCH 25/26] Fix typo where we were checking user object against username (strings) --- diff --git a/pagure/internal/__init__.py b/pagure/internal/__init__.py index a360322..af41f4d 100644 --- a/pagure/internal/__init__.py +++ b/pagure/internal/__init__.py @@ -141,8 +141,8 @@ def ticket_add_comment(): user_obj = pagure.lib.search_user(pagure.SESSION, email=useremail) admin = False if user_obj: - admin = user_obj == issue.project.user.user or ( - user_obj in [user.user for user in issue.project.committers]) + admin = user_obj.user == issue.project.user.user or ( + user_obj.user in [user.user for user in issue.project.committers]) if issue.private and user_obj and not admin \ and not issue.user.user == user_obj.username: From 15f25e0649dfdd9c8d9cf5d367736884e595da63 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Feb 15 2017 10:30:34 +0000 Subject: [PATCH 26/26] Enhance the unit-tests to ensure the user is added to the group as it should --- diff --git a/tests/test_pagure_flask_internal.py b/tests/test_pagure_flask_internal.py index e9461dd..0a51015 100644 --- a/tests/test_pagure_flask_internal.py +++ b/tests/test_pagure_flask_internal.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """ - (c) 2015 - Copyright Red Hat Inc + (c) 2015-2017 - Copyright Red Hat Inc Authors: Pierre-Yves Chibon @@ -347,8 +347,14 @@ class PagureFlaskInternaltests(tests.Modeltests): ) self.session.commit() self.assertEqual(msg, 'User added') - repo = pagure.lib.get_project(self.session, 'test') + self.assertEqual( + sorted([u.username for u in repo.users]), ['foo']) + self.assertEqual( + sorted([u.username for u in repo.committers]), []) + self.assertEqual( + sorted([u.username for u in repo.admins]), []) + output = self.app.put('/pv/ticket/comment/', data=data) self.assertEqual(output.status_code, 403) @@ -364,6 +370,14 @@ class PagureFlaskInternaltests(tests.Modeltests): ) self.session.commit() self.assertEqual(msg, 'User access updated') + repo = pagure.lib.get_project(self.session, 'test') + self.assertEqual( + sorted([u.username for u in repo.users]), ['foo']) + self.assertEqual( + sorted([u.username for u in repo.committers]), ['foo']) + self.assertEqual( + sorted([u.username for u in repo.admins]), []) + # Add comment output = self.app.put('/pv/ticket/comment/', data=data) self.assertEqual(output.status_code, 200) @@ -385,6 +399,15 @@ class PagureFlaskInternaltests(tests.Modeltests): ) self.session.commit() self.assertEqual(msg, 'User access updated') + + repo = pagure.lib.get_project(self.session, 'test') + self.assertEqual( + sorted([u.username for u in repo.users]), ['foo']) + self.assertEqual( + sorted([u.username for u in repo.committers]), ['foo']) + self.assertEqual( + sorted([u.username for u in repo.admins]), ['foo']) + # Add comment output = self.app.put('/pv/ticket/comment/', data=data) self.assertEqual(output.status_code, 200)