From 5e14eabb85160e86d5f315208330af3564af5570 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Feb 26 2019 08:47:12 +0000 Subject: Allow dots and plus signs in project names Fixes https://pagure.io/pagure/issue/4227 Signed-off-by: Pierre-Yves Chibon --- diff --git a/pagure/forms.py b/pagure/forms.py index 032559e..cdfa8c4 100644 --- a/pagure/forms.py +++ b/pagure/forms.py @@ -210,7 +210,7 @@ class ProjectForm(ProjectFormSimplified): super(ProjectForm, self).__init__(*args, **kwargs) # set the name validator regex = pagure_config.get( - "PROJECT_NAME_REGEX", "^[a-zA-z0-9_][a-zA-Z0-9-_]*$" + "PROJECT_NAME_REGEX", "^[a-zA-z0-9_][a-zA-Z0-9-_.+]*$" ) self.name.validators = [ wtforms.validators.DataRequired(), diff --git a/tests/test_pagure_flask_ui_app.py b/tests/test_pagure_flask_ui_app.py index bd5c6c8..3cb913d 100644 --- a/tests/test_pagure_flask_ui_app.py +++ b/tests/test_pagure_flask_ui_app.py @@ -221,6 +221,66 @@ class PagureFlaskApptests(tests.Modeltests): 'title="Create New Project" aria-hidden="true">', output_text) + def test_new_project_with_dot(self): + """ Test the new_project endpoint when new project contains a dot. + """ + # Before + projects = pagure.lib.query.search_projects(self.session) + self.assertEqual(len(projects), 0) + + user = tests.FakeUser(username="foo") + with tests.user_set(self.app.application, user): + csrf_token = self.get_csrf() + + data = { + 'description': 'Project #1.', + 'name': 'project.1', + 'csrf_token': csrf_token + } + output = self.app.post('/new/', data=data, follow_redirects=True) + self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) + self.assertIn( + 'Overview - project.1 - Pagure', output_text) + self.assertIn( + 'project.1', + output_text + ) + + #After + projects = pagure.lib.query.search_projects(self.session) + self.assertEqual(len(projects), 1) + + def test_new_project_with_plus(self): + """ Test the new_project endpoint when new project contains a plus sign. + """ + # Before + projects = pagure.lib.query.search_projects(self.session) + self.assertEqual(len(projects), 0) + + user = tests.FakeUser(username="foo") + with tests.user_set(self.app.application, user): + csrf_token = self.get_csrf() + + data = { + 'description': 'Project #1.', + 'name': 'project+1', + 'csrf_token': csrf_token + } + output = self.app.post('/new/', data=data, follow_redirects=True) + self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) + self.assertIn( + 'Overview - project+1 - Pagure', output_text) + self.assertIn( + 'project+1', + output_text + ) + + #After + projects = pagure.lib.query.search_projects(self.session) + self.assertEqual(len(projects), 1) + def test_new_project_when_turned_off(self): """ Test the new_project endpoint when new project creation is not allowed in the pagure instance. """