diff --git a/pagure/lib/__init__.py b/pagure/lib/__init__.py index 882dafe..537eafc 100644 --- a/pagure/lib/__init__.py +++ b/pagure/lib/__init__.py @@ -1800,6 +1800,12 @@ def update_project_settings(session, repo, settings, user): redis=REDIS, ) + if 'pull_request_access_only' in update: + update_read_only_mode(session, repo, read_only=True) + session.add(repo) + session.flush() + pagure.lib.git.generate_gitolite_acls(project=repo) + return 'Edited successfully settings of repo: %s' % repo.fullname diff --git a/tests/test_pagure_flask_ui_repo.py b/tests/test_pagure_flask_ui_repo.py index c9683da..5e016a3 100644 --- a/tests/test_pagure_flask_ui_repo.py +++ b/tests/test_pagure_flask_ui_repo.py @@ -1177,6 +1177,66 @@ class PagureFlaskRepotests(tests.Modeltests): '', output.data) + @patch('pagure.lib.git.generate_gitolite_acls') + @patch('pagure.ui.repo.admin_session_timedout') + def test_view_settings_pr_only(self, ast, gen_acl): + """ Test the view_settings endpoint when turning on PR only. """ + ast.return_value = False + tests.create_projects(self.session) + tests.create_projects_git(os.path.join(self.path, 'repos')) + + user = tests.FakeUser(username='pingou') + with tests.user_set(pagure.APP, user): + output = self.app.get('/test/settings') + self.assertEqual(output.status_code, 200) + self.assertIn( + 'Settings - test - Pagure', output.data) + self.assertIn('

Settings for test

', output.data) + + csrf_token = self.get_csrf(output=output) + + data = { + 'csrf_token': csrf_token, + 'pull_requests': 'y', + 'issue_tracker': 'y', + 'pull_request_access_only': 'y', + } + output = self.app.post( + '/test/settings', data=data, follow_redirects=True) + self.assertEqual(output.status_code, 200) + self.assertIn( + 'Overview - test - Pagure', output.data) + self.assertIn( + '
\n' + 'test project #1
', output.data) + self.assertIn( + '\n Edited successfully ' + 'settings of repo: test', output.data) + + # Both checkbox are again checked + output = self.app.get('/test/settings', 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( + '', output.data) + self.assertIn( + '', output.data) + self.assertIn( + '', + output.data) + + repo = pagure.get_authorized_project(self.session, 'test') + gen_acl.assert_called_once() + args = gen_acl.call_args + self.assertEqual(args[0], tuple()) + self.assertEqual(args[1].keys(), ['project']) + self.assertEqual(args[1]['project'].fullname, 'test') + @patch('pagure.ui.repo.admin_session_timedout') def test_fields_in_view_settings(self, ast): """ Test the default fields in view_settings endpoint. """