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. """