diff --git a/tests/test_pagure_flask_ui_repo.py b/tests/test_pagure_flask_ui_repo.py index 4492ede..59b4ebe 100644 --- a/tests/test_pagure_flask_ui_repo.py +++ b/tests/test_pagure_flask_ui_repo.py @@ -2832,232 +2832,6 @@ class PagureFlaskRepotests(tests.Modeltests): ) self.assertIn("foo\n bar", output_text) - def test_view_blame_file(self): - """ Test the view_blame_file endpoint. """ - output = self.app.get("/foo/blame/sources") - # No project registered in the DB - self.assertEqual(output.status_code, 404) - - tests.create_projects(self.session) - - output = self.app.get("/test/blame/sources") - # No git repo associated - self.assertEqual(output.status_code, 404) - - tests.create_projects_git(os.path.join(self.path, "repos"), bare=True) - - output = self.app.get("/test/blame/sources") - self.assertEqual(output.status_code, 404) - - # Add some content to the git repo - tests.add_content_git_repo( - os.path.join(self.path, "repos", "test.git") - ) - tests.add_content_git_repo( - os.path.join(self.path, "repos", "test.git"), branch="feature" - ) - tests.add_readme_git_repo(os.path.join(self.path, "repos", "test.git")) - tests.add_binary_git_repo( - os.path.join(self.path, "repos", "test.git"), "test.jpg" - ) - tests.add_binary_git_repo( - os.path.join(self.path, "repos", "test.git"), "test_binary" - ) - - output = self.app.get("/test/blame/foofile") - self.assertEqual(output.status_code, 404) - regex = re.compile(r'>(\w+)\n') - - # View in master branch - output = self.app.get("/test/blame/sources") - self.assertEqual(output.status_code, 200) - output_text = output.get_data(as_text=True) - self.assertIn('', output_text) - self.assertTrue( - '' in output_text - or '' in output_text - ) - self.assertIn( - '', output_text - ) - data = regex.findall(output_text) - self.assertEqual(len(data), 2) - - # View for a commit - repo_obj = pygit2.Repository( - os.path.join(self.path, "repos", "test.git") - ) - commit = repo_obj[repo_obj.head.target] - parent = commit.parents[0].oid.hex - - output = self.app.get("/test/blame/sources?identifier=%s" % parent) - self.assertEqual(output.status_code, 200) - output_text = output.get_data(as_text=True) - self.assertIn('
 bar
', output_text) - self.assertTrue( - '' in output_text - or '' in output_text - ) - self.assertIn( - '', output_text - ) - data1 = regex.findall(output_text) - self.assertEqual(len(data1), 2) - self.assertEqual(data, data1) - - # View in feature branch - output = self.app.get("/test/blame/sources?identifier=feature") - self.assertEqual(output.status_code, 200) - output_text = output.get_data(as_text=True) - self.assertIn('
 bar
', output_text) - self.assertTrue( - '' in output_text - or '' in output_text - ) - self.assertIn( - '', output_text - ) - data2 = regex.findall(output_text) - self.assertEqual(len(data2), 3) - self.assertEqual(data[0], data2[0]) - self.assertNotEqual(data2[0], data2[1]) - self.assertEqual(data2[1], data2[2]) - - # View what's supposed to be an image - output = self.app.get("/test/blame/test.jpg") - self.assertEqual(output.status_code, 400) - output_text = output.get_data(as_text=True) - self.assertIn("400 Bad Request", output_text) - self.assertIn("

Binary files cannot be blamed

", output_text) - - # View folder - output = self.app.get("/test/blame/folder1") - self.assertEqual(output.status_code, 404) - output_text = output.get_data(as_text=True) - self.assertIn( - "Page not found :'( - Pagure", output_text - ) - self.assertIn("

Page not found (404)

", output_text) - - # View by image name -- with a non-existant file - output = self.app.get("/test/blame/testfoo.jpg") - self.assertEqual(output.status_code, 404) - output = self.app.get("/test/blame/folder1/testfoo.jpg") - self.assertEqual(output.status_code, 404) - - # View file with a non-ascii name - tests.add_commit_git_repo( - os.path.join(self.path, "repos", "test.git"), - ncommits=1, - filename="Šource", - ) - output = self.app.get("/test/blame/Šource") - self.assertEqual(output.status_code, 200) - output_text = output.get_data(as_text=True) - self.assertEqual( - output.headers["Content-Type"].lower(), "text/html; charset=utf-8" - ) - self.assertIn("  Šource", output_text) - self.assertIn('
 bar
', output_text) - self.assertTrue( - '' in output_text - or '' in output_text - ) - self.assertIn( - '', output_text - ) - - # Add a fork of a fork - item = pagure.lib.model.Project( - user_id=1, # pingou - name="test3", - description="test project #3", - is_fork=True, - parent_id=1, - hook_token="aaabbbppp", - ) - self.session.add(item) - self.session.commit() - - tests.add_content_git_repo( - os.path.join(self.path, "repos", "forks", "pingou", "test3.git") - ) - tests.add_readme_git_repo( - os.path.join(self.path, "repos", "forks", "pingou", "test3.git") - ) - tests.add_commit_git_repo( - os.path.join(self.path, "repos", "forks", "pingou", "test3.git"), - ncommits=10, - ) - tests.add_content_to_git( - os.path.join(self.path, "repos", "forks", "pingou", "test3.git"), - content="✨☃🍰☃✨", - ) - - output = self.app.get("/fork/pingou/test3/blame/sources") - self.assertEqual(output.status_code, 200) - output_text = output.get_data(as_text=True) - self.assertIn('
Row 0
', output_text) - self.assertTrue( - '' in output_text - or '' in output_text - ) - self.assertIn( - '', - output_text, - ) - - def test_view_blame_file_on_tag(self): - """ Test the view_blame_file endpoint. """ - - regex = re.compile(r'>(\w+)\n
 barRow 0
') - tests.create_projects(self.session) - tests.create_projects_git(os.path.join(self.path, "repos"), bare=True) - # Add some content to the git repo - tests.add_content_git_repo( - os.path.join(self.path, "repos", "test.git") - ) - tests.add_readme_git_repo(os.path.join(self.path, "repos", "test.git")) - - # add a tag to the git repo - repo = pygit2.Repository(os.path.join(self.path, "repos", "test.git")) - commit = repo[repo.head.target] - tagger = pygit2.Signature("Alice Doe", "adoe@example.com", 12347, 0) - repo.create_tag( - "v1.0", - commit.oid.hex, - pygit2.GIT_OBJ_COMMIT, - tagger, - "Release v1.0", - ) - - # View for tag v1.0 - output = self.app.get("/test/blame/sources?identifier=v1.0") - self.assertEqual(output.status_code, 200) - output_text = output.get_data(as_text=True) - self.assertIn('', output_text) - self.assertTrue( - '' in output_text - or '' in output_text - ) - self.assertIn( - '', output_text - ) - data = regex.findall(output_text) - self.assertEqual(len(data), 2) - def test_view_commit(self): """ Test the view_commit endpoint. """ output = self.app.get("/foo/c/bar") diff --git a/tests/test_pagure_flask_ui_repo_view_blame.py b/tests/test_pagure_flask_ui_repo_view_blame.py new file mode 100644 index 0000000..72ea505 --- /dev/null +++ b/tests/test_pagure_flask_ui_repo_view_blame.py @@ -0,0 +1,329 @@ +# -*- coding: utf-8 -*- + +""" +Authors: + Julen Landa Alustiza + Pierre-Yves Chibon + +""" + +from __future__ import unicode_literals, absolute_import + +import re +import sys +import os +import pygit2 + +sys.path.insert( + 0, os.path.join(os.path.dirname(os.path.abspath(__file__)), "..") +) + +import tests +import pagure.lib.model + + +class PagureFlaskRepoViewBlameFileSimpletests(tests.Modeltests): + """ Tests for view_blame_file endpoint of the flask pagure app """ + + def test_view_blame_file_no_project(self): + """ Test the view_blame_file endpoint """ + output = self.app.get("/foo/blame/sources") + # No project registered in the DB + self.assertEqual(output.status_code, 404) + output_text = output.get_data(as_text=True) + self.assertIn( + "Page not found :'( - Pagure", output_text + ) + self.assertIn("

Page not found (404)

", output_text) + self.assertIn("

Project not found

", output_text) + + def test_view_blame_file_no_git_repo(self): + """ Test the view_blame_file endpoint """ + tests.create_projects(self.session) + + output = self.app.get("/test/blame/sources") + # No git repo associated + self.assertEqual(output.status_code, 404) + + def test_view_blame_file_no_git_content(self): + """ Test the view_blame_file endpoint """ + tests.create_projects(self.session) + tests.create_projects_git(os.path.join(self.path, "repos"), bare=True) + + output = self.app.get("/test/blame/sources") + # project and associated repo, but no file + self.assertEqual(output.status_code, 404) + output_text = output.get_data(as_text=True) + self.assertIn( + "Page not found :'( - Pagure", output_text + ) + self.assertIn("

Page not found (404)

", output_text) + self.assertIn("

Empty repo cannot have a file

", output_text) + + +class PagureFlaskRepoViewBlameFiletests(tests.Modeltests): + """ Tests for view_blame_file endpoint of the flask pagure app """ + + def setUp(self): + """ Set up the environment, ran before every tests. """ + super(PagureFlaskRepoViewBlameFiletests, self).setUp() + self.regex = re.compile(r'>(\w+)\n
 bar
') + tests.create_projects(self.session) + tests.create_projects_git(os.path.join(self.path, "repos"), bare=True) + + # Add some content to the git repo + tests.add_content_to_git( + os.path.join(self.path, "repos", "test.git"), + message="initial commit", + ) + tests.add_content_to_git( + os.path.join(self.path, "repos", "test.git"), message="foo" + ) + tests.add_content_to_git( + os.path.join(self.path, "repos", "test.git"), + branch="feature", + content="bar", + message="bar", + author=("Aritz Author", "aritz@authors.tld"), + ) + + def test_view_blame_file_default_branch_master(self): + """ Test the view_blame_file endpoint """ + output = self.app.get("/test/blame/sources") + self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) + self.assertIn('', output_text) + self.assertTrue( + '' in output_text + or '' in output_text + ) + self.assertIn( + '', output_text + ) + self.assertIn('', output_text) + data = self.regex.findall(output_text) + self.assertEqual(len(data), 2) + + def test_view_blame_file_default_branch_non_master(self): + """ Test the view_blame_file endpoint """ + repo = pygit2.Repository(os.path.join(self.path, "repos", "test.git")) + reference = repo.lookup_reference("refs/heads/feature").resolve() + repo.set_head(reference.name) + output = self.app.get("/test/blame/sources") + self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) + self.assertIn('
foo
Alice Author
', output_text) + self.assertTrue( + '' in output_text + or '' in output_text + ) + self.assertIn( + '', output_text + ) + self.assertIn('', output_text) + data = self.regex.findall(output_text) + self.assertEqual(len(data), 3) + + def test_view_blame_file_on_commit(self): + """ Test the view_blame_file endpoint """ + repo_obj = pygit2.Repository( + os.path.join(self.path, "repos", "test.git") + ) + commit = repo_obj[repo_obj.head.target] + parent = commit.parents[0].oid.hex + + output = self.app.get( + "/test/blame/sources?identifier={}".format(parent) + ) + self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) + self.assertIn('
bar
Aritz Author
', output_text) + self.assertTrue( + '' in output_text + or '' in output_text + ) + self.assertIn( + '', output_text + ) + self.assertIn('', output_text) + data = self.regex.findall(output_text) + self.assertEqual(len(data), 1) + + def test_view_blame_file_on_branch(self): + """ Test the view_blame_file endpoint """ + output = self.app.get("/test/blame/sources?identifier=feature") + self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) + self.assertIn('
foo
Alice Author
', output_text) + self.assertTrue( + '' in output_text + or '' in output_text + ) + self.assertIn( + '', output_text + ) + self.assertIn('', output_text) + data = self.regex.findall(output_text) + self.assertEqual(len(data), 3) + + def test_view_blame_file_on_tag(self): + """ Test the view_blame_file endpoint """ + # set a tag on the head's parent commit + repo_obj = pygit2.Repository( + os.path.join(self.path, "repos", "test.git") + ) + commit = repo_obj[repo_obj.head.target] + parent = commit.parents[0].oid.hex + tagger = pygit2.Signature("Alice Doe", "adoe@example.com", 12347, 0) + repo_obj.create_tag( + "v1.0", parent, pygit2.GIT_OBJ_COMMIT, tagger, "Release v1.0" + ) + + output = self.app.get("/test/blame/sources?identifier=v1.0") + self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) + self.assertIn('
bar
Aritz Author
', output_text) + self.assertTrue( + '' in output_text + or '' in output_text + ) + self.assertIn( + '', output_text + ) + self.assertIn('', output_text) + data = self.regex.findall(output_text) + self.assertEqual(len(data), 1) + + def test_view_blame_file_binary(self): + """ Test the view_blame_file endpoint """ + # Add binary content + tests.add_binary_git_repo( + os.path.join(self.path, "repos", "test.git"), "test.jpg" + ) + output = self.app.get("/test/blame/test.jpg") + self.assertEqual(output.status_code, 400) + output_text = output.get_data(as_text=True) + self.assertIn("400 Bad Request", output_text) + self.assertIn("

Binary files cannot be blamed

", output_text) + + def test_view_blame_file_non_ascii_name(self): + """ Test the view_blame_file endpoint """ + tests.add_commit_git_repo( + os.path.join(self.path, "repos", "test.git"), + ncommits=1, + filename="Šource", + ) + output = self.app.get("/test/blame/Šource") + self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) + self.assertEqual( + output.headers["Content-Type"].lower(), "text/html; charset=utf-8" + ) + self.assertIn("  Šource", output_text) + self.assertIn('
foo
Alice Author
', output_text) + self.assertTrue( + '' in output_text + or '' in output_text + ) + self.assertIn( + '', output_text + ) + + def test_view_blame_file_fork_of_a_fork(self): + """ Test the view_blame_file endpoint """ + item = pagure.lib.model.Project( + user_id=1, # pingou + name="test3", + description="test project #3", + is_fork=True, + parent_id=1, + hook_token="aaabbbppp", + ) + self.session.add(item) + self.session.commit() + + tests.add_content_git_repo( + os.path.join(self.path, "repos", "forks", "pingou", "test3.git") + ) + tests.add_readme_git_repo( + os.path.join(self.path, "repos", "forks", "pingou", "test3.git") + ) + tests.add_commit_git_repo( + os.path.join(self.path, "repos", "forks", "pingou", "test3.git"), + ncommits=10, + ) + tests.add_content_to_git( + os.path.join(self.path, "repos", "forks", "pingou", "test3.git"), + content="✨☃🍰☃✨", + ) + + output = self.app.get("/fork/pingou/test3/blame/sources") + self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) + self.assertIn('
Row 0
', output_text) + self.assertTrue( + '' in output_text + or '' in output_text + ) + self.assertIn( + '', + output_text, + ) + + def test_view_blame_file_no_file(self): + """ Test the view_blame_file endpoint """ + output = self.app.get("/test/blame/foofile") + self.assertEqual(output.status_code, 404) + output_text = output.get_data(as_text=True) + self.assertIn( + "Page not found :'( - Pagure", output_text + ) + self.assertIn("

Page not found (404)

", output_text) + self.assertIn("

File not found

", output_text) + + def test_view_blame_file_folder(self): + """ Test the view_blame_file endpoint """ + tests.add_commit_git_repo( + os.path.join(self.path, "repos", "test.git/folder1"), + ncommits=1, + filename="sources", + ) + output = self.app.get("/test/blame/folder1") + self.assertEqual(output.status_code, 404) + output_text = output.get_data(as_text=True) + self.assertIn( + "Page not found :'( - Pagure", output_text + ) + self.assertIn("

Page not found (404)

", output_text) + self.assertIn("

File not found

", output_text) + + def test_view_blame_file_unborn_head_no_identifier(self): + repo_obj = pygit2.Repository( + os.path.join(self.path, "repos", "test.git") + ) + repo_obj.set_head("refs/heads/unexistent") + + output = self.app.get("/test/blame/sources") + self.assertEqual(output.status_code, 404) + output_text = output.get_data(as_text=True) + self.assertIn( + "Page not found :'( - Pagure", output_text + ) + self.assertIn("

Page not found (404)

", output_text) + self.assertIn( + "

Identifier is mandatory on unborn HEAD repos

", output_text + )
 barRow 0