diff --git a/pagure/ui/fork.py b/pagure/ui/fork.py index 9b9a7b9..e4217fe 100644 --- a/pagure/ui/fork.py +++ b/pagure/ui/fork.py @@ -1520,7 +1520,9 @@ def fork_edit_file( flask.abort(400) if pagure.lib._get_project( - flask.g.session, repo.name, user=flask.g.fas_user.username): + flask.g.session, repo.name, + namespace=repo.namespace, + user=flask.g.fas_user.username): flask.flash('You had already forked this project') return flask.redirect(flask.url_for( 'ui_ns.edit_file', diff --git a/tests/test_pagure_flask_ui_fork.py b/tests/test_pagure_flask_ui_fork.py index 468496e..8669474 100644 --- a/tests/test_pagure_flask_ui_fork.py +++ b/tests/test_pagure_flask_ui_fork.py @@ -3073,6 +3073,30 @@ index 0000000..2a552bb '', output_text) + # Check for edit panel- Fork already done + output = self.app.post('fork_edit/test/edit/master/f/sources', + data=data, follow_redirects=True) + self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) + self.assertIn( + 'Edit - test - Pagure', + output_text) + self.assertIn( + '\n You had already forked ' + 'this project', output_text) + self.assertIn( + ' View Upstream', + output_text) + self.assertIn( + '
  • ' + '  master' + '
  • ' + '  sources
  • ', + output_text) + self.assertIn( + '', + output_text) + # View what's supposed to be an image output = self.app.post('fork_edit/test/edit/master/f/test.jpg', data=data, follow_redirects=True) @@ -3104,6 +3128,133 @@ index 0000000..2a552bb 'Edit in your fork\n \n', output.get_data(as_text=True)) + @patch('pagure.lib.notify.send_email', MagicMock(return_value=True)) + def test_fork_edit_file_namespace(self): + """ Test the fork_edit file endpoint on a namespaced project. """ + + tests.create_projects(self.session) + for folder in ['docs', 'tickets', 'requests', 'repos']: + tests.create_projects_git( + os.path.join(self.path, folder), bare=True) + + # User not logged in + output = self.app.post( + 'fork_edit/somenamespace/test3/edit/master/f/sources') + self.assertEqual(output.status_code, 302) + + user = tests.FakeUser() + user.username = 'pingou' + with tests.user_set(self.app.application, user): + # Invalid request + output = self.app.post( + 'fork_edit/somenamespace/test3/edit/master/f/sources') + self.assertEqual(output.status_code, 400) + + output = self.app.get('/new/') + self.assertEqual(output.status_code, 200) + self.assertIn('Create new Project', output.get_data(as_text=True)) + + csrf_token = self.get_csrf(output=output) + + data = { + 'csrf_token': csrf_token, + } + + # No files can be found since they are not added + output = self.app.post( + 'fork_edit/somenamespace/test3/edit/master/f/sources', + data=data, follow_redirects=True) + self.assertEqual(output.status_code, 404) + + user = tests.FakeUser() + user.username = 'foo' + with tests.user_set(self.app.application, user): + + data = { + 'csrf_token': csrf_token, + } + + # Invalid request + output = self.app.post( + 'fork_edit/somenamespace/test3/edit/master/f/sources', + follow_redirects=True) + self.assertEqual(output.status_code, 400) + + # Add content to the repo + tests.add_content_git_repo(os.path.join( + pagure.config.config['GIT_FOLDER'], + 'somenamespace', 'test3.git')) + + tests.add_readme_git_repo(os.path.join( + pagure.config.config['GIT_FOLDER'], + 'somenamespace', 'test3.git')) + + tests.add_binary_git_repo( + os.path.join( + pagure.config.config['GIT_FOLDER'], + 'somenamespace', 'test3.git'), 'test.jpg') + + # Check if button exists + output = self.app.get('/somenamespace/test3/blob/master/f/sources') + self.assertEqual(output.status_code, 200) + self.assertIn( + 'Fork and Edit\n \n', + output.get_data(as_text=True)) + + # Check fork-edit doesn't show for binary files + output = self.app.get('/somenamespace/test3/blob/master/f/test.jpg') + self.assertEqual(output.status_code, 200) + self.assertNotIn( + 'Fork and Edit\n \n', + output.get_data(as_text=True)) + + # Check for edit panel + output = self.app.post( + 'fork_edit/somenamespace/test3/edit/master/f/sources', + data=data, follow_redirects=True) + self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) + self.assertIn( + 'Edit - somenamespace/test3 - Pagure', + output_text) + self.assertIn( + ' View Upstream', + output_text) + self.assertIn( + '
  • ' + '  master' + '
  • ' + '  sources
  • ', + output_text) + self.assertIn( + '', + output_text) + + # Check for edit panel - while the project was already forked + output = self.app.post( + 'fork_edit/somenamespace/test3/edit/master/f/sources', + data=data, follow_redirects=True) + self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) + self.assertIn( + 'Edit - somenamespace/test3 - Pagure', + output_text) + self.assertIn( + '\n You had already forked ' + 'this project', output_text) + self.assertIn( + ' View Upstream', + output_text) + self.assertIn( + '
  • ' + '  master' + '
  • ' + '  sources
  • ', + output_text) + self.assertIn( + '', + output_text) + @patch('pagure.lib.notify.send_email') def test_fork_without_main_repo(self, send_email): """ Test the fork without the main repo. """