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(
- ' bar
| ', 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('', output_text)
- self.assertTrue(
- ' | ' in output_text
- or ' | ' in output_text
- )
- self.assertIn(
- ' bar
| ', 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('', output_text)
- self.assertTrue(
- ' | ' in output_text
- or ' | ' in output_text
- )
- self.assertIn(
- ' bar
| ', 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('', output_text)
- self.assertTrue(
- ' | ' in output_text
- or ' | ' in output_text
- )
- self.assertIn(
- 'Row 0
| ', 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('', output_text)
- self.assertTrue(
- ' | ' in output_text
- or ' | ' in output_text
- )
- self.assertIn(
- ' barRow 0
| ',
- output_text,
- )
-
- def test_view_blame_file_on_tag(self):
- """ Test the view_blame_file endpoint. """
-
- regex = re.compile(r'>(\w+)\n')
- 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(
- ' bar
| ', 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')
+ 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(
+ 'foo
| ', output_text
+ )
+ self.assertIn('Alice Author | ', 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('', output_text)
+ self.assertTrue(
+ ' | ' in output_text
+ or ' | ' in output_text
+ )
+ self.assertIn(
+ 'bar
| ', output_text
+ )
+ self.assertIn('Aritz Author | ', 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('', output_text)
+ self.assertTrue(
+ ' | ' in output_text
+ or ' | ' in output_text
+ )
+ self.assertIn(
+ 'foo
| ', output_text
+ )
+ self.assertIn('Alice Author | ', 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('', output_text)
+ self.assertTrue(
+ ' | ' in output_text
+ or ' | ' in output_text
+ )
+ self.assertIn(
+ 'bar
| ', output_text
+ )
+ self.assertIn('Aritz Author | ', 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('', output_text)
+ self.assertTrue(
+ ' | ' in output_text
+ or ' | ' in output_text
+ )
+ self.assertIn(
+ 'foo
| ', output_text
+ )
+ self.assertIn('Alice Author | ', 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('', output_text)
+ self.assertTrue(
+ ' | ' in output_text
+ or ' | ' in output_text
+ )
+ self.assertIn(
+ 'Row 0
| ', 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('', output_text)
+ self.assertTrue(
+ ' | ' in output_text
+ or ' | ' in output_text
+ )
+ self.assertIn(
+ ' barRow 0
| ',
+ 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
+ )
| | |