| |
| |
| """ |
| (c) 2015 - Copyright Red Hat Inc |
| |
| Authors: |
| Pierre-Yves Chibon <pingou@pingoured.fr> |
| |
| """ |
| |
| __requires__ = ['SQLAlchemy >= 0.8'] |
| import pkg_resources |
| |
| import json |
| import unittest |
| import shutil |
| import sys |
| import os |
| |
| import pygit2 |
| from mock import patch |
| |
| sys.path.insert(0, os.path.join(os.path.dirname( |
| os.path.abspath(__file__)), '..')) |
| |
| import pagure.lib.git |
| import tests |
| |
| |
| class PagureLibGittests(tests.Modeltests): |
| """ Tests for pagure.lib.git """ |
| |
| def setUp(self): |
| """ Set up the environnment, ran before every tests. """ |
| super(PagureLibGittests, self).setUp() |
| |
| pagure.APP.config['FORK_FOLDER'] = os.path.join(tests.HERE, 'forks') |
| |
| def test_write_gitolite_acls(self): |
| """ Test the write_gitolite_acls function of pagure.lib.git. """ |
| tests.create_projects(self.session) |
| |
| repo = pagure.lib.get_project(self.session, 'test') |
| |
| msg = pagure.lib.add_user_to_project( |
| session=self.session, |
| project=repo, |
| new_user='foo', |
| user='pingou', |
| ) |
| self.session.commit() |
| self.assertEqual(msg, 'User added') |
| |
| item = pagure.lib.model.Project( |
| user_id=1, |
| name='test3', |
| description='test project #2', |
| parent_id=1, |
| hook_token='aaabbbvvv', |
| ) |
| self.session.add(item) |
| self.session.commit() |
| |
| outputconf = os.path.join(tests.HERE, 'test_gitolite.conf') |
| |
| pagure.lib.git.write_gitolite_acls(self.session, outputconf) |
| |
| self.assertTrue(os.path.exists(outputconf)) |
| |
| with open(outputconf) as stream: |
| data = stream.read() |
| |
| exp = """ |
| repo test |
| R = @all |
| RW+ = pingou |
| RW+ = foo |
| |
| repo docs/test |
| R = @all |
| RW+ = pingou |
| RW+ = foo |
| |
| repo tickets/test |
| R = @all |
| RW+ = pingou |
| RW+ = foo |
| |
| repo requests/test |
| R = @all |
| RW+ = pingou |
| RW+ = foo |
| |
| repo test2 |
| R = @all |
| RW+ = pingou |
| |
| repo docs/test2 |
| R = @all |
| RW+ = pingou |
| |
| repo tickets/test2 |
| R = @all |
| RW+ = pingou |
| |
| repo requests/test2 |
| R = @all |
| RW+ = pingou |
| |
| repo forks/pingou/test3 |
| R = @all |
| RW+ = pingou |
| |
| repo docs/pingou/test3 |
| R = @all |
| RW+ = pingou |
| |
| repo tickets/pingou/test3 |
| R = @all |
| RW+ = pingou |
| |
| repo requests/pingou/test3 |
| R = @all |
| RW+ = pingou |
| |
| """ |
| self.assertEqual(data, exp) |
| |
| os.unlink(outputconf) |
| self.assertFalse(os.path.exists(outputconf)) |
| |
| def test_write_gitolite_acls_groups(self): |
| """ Test the write_gitolite_acls function of pagure.lib.git with |
| groups. |
| """ |
| tests.create_projects(self.session) |
| |
| repo = pagure.lib.get_project(self.session, 'test') |
| |
| |
| msg = pagure.lib.add_group( |
| self.session, |
| group_name='sysadmin', |
| group_type='user', |
| user='pingou', |
| is_admin=False, |
| ) |
| self.session.commit() |
| self.assertEqual(msg, 'User `pingou` added to the group `sysadmin`.') |
| msg = pagure.lib.add_group( |
| self.session, |
| group_name='devs', |
| group_type='user', |
| user='pingou', |
| is_admin=False, |
| ) |
| self.session.commit() |
| self.assertEqual(msg, 'User `pingou` added to the group `devs`.') |
| |
| |
| msg = pagure.lib.add_group_to_project( |
| session=self.session, |
| project=repo, |
| new_group='sysadmin', |
| user='pingou', |
| ) |
| self.session.commit() |
| self.assertEqual(msg, 'Group added') |
| msg = pagure.lib.add_group_to_project( |
| session=self.session, |
| project=repo, |
| new_group='devs', |
| user='pingou', |
| ) |
| self.session.commit() |
| self.assertEqual(msg, 'Group added') |
| |
| |
| msg = pagure.lib.add_user_to_project( |
| session=self.session, |
| project=repo, |
| new_user='foo', |
| user='pingou', |
| ) |
| self.session.commit() |
| self.assertEqual(msg, 'User added') |
| |
| item = pagure.lib.model.Project( |
| user_id=1, |
| name='test2', |
| description='test project #2', |
| parent_id=1, |
| hook_token='aaabbbvvv', |
| ) |
| self.session.add(item) |
| self.session.commit() |
| |
| outputconf = os.path.join(tests.HERE, 'test_gitolite.conf') |
| |
| pagure.lib.git.write_gitolite_acls(self.session, outputconf) |
| |
| self.assertTrue(os.path.exists(outputconf)) |
| |
| with open(outputconf) as stream: |
| data = stream.read() |
| |
| exp = """@sysadmin = pingou |
| @devs = pingou |
| |
| repo test |
| R = @all |
| RW+ = @sysadmin @devs |
| RW+ = pingou |
| RW+ = foo |
| |
| repo docs/test |
| R = @all |
| RW+ = @sysadmin @devs |
| RW+ = pingou |
| RW+ = foo |
| |
| repo tickets/test |
| R = @all |
| RW+ = @sysadmin @devs |
| RW+ = pingou |
| RW+ = foo |
| |
| repo requests/test |
| R = @all |
| RW+ = @sysadmin @devs |
| RW+ = pingou |
| RW+ = foo |
| |
| repo test2 |
| R = @all |
| RW+ = pingou |
| |
| repo docs/test2 |
| R = @all |
| RW+ = pingou |
| |
| repo tickets/test2 |
| R = @all |
| RW+ = pingou |
| |
| repo requests/test2 |
| R = @all |
| RW+ = pingou |
| |
| repo forks/pingou/test2 |
| R = @all |
| RW+ = pingou |
| |
| repo docs/pingou/test2 |
| R = @all |
| RW+ = pingou |
| |
| repo tickets/pingou/test2 |
| R = @all |
| RW+ = pingou |
| |
| repo requests/pingou/test2 |
| R = @all |
| RW+ = pingou |
| |
| """ |
| self.assertEqual(data.split('\n'), exp.split('\n')) |
| |
| os.unlink(outputconf) |
| self.assertFalse(os.path.exists(outputconf)) |
| |
| def test_commit_to_patch(self): |
| """ Test the commit_to_patch function of pagure.lib.git. """ |
| |
| self.gitrepo = os.path.join(tests.HERE, 'test_repo.git') |
| os.makedirs(self.gitrepo) |
| repo = pygit2.init_repository(self.gitrepo) |
| |
| |
| with open(os.path.join(self.gitrepo, 'sources'), 'w') as stream: |
| stream.write('foo\n bar') |
| repo.index.add('sources') |
| repo.index.write() |
| |
| |
| tree = repo.index.write_tree() |
| author = pygit2.Signature( |
| 'Alice Author', 'alice@authors.tld') |
| committer = pygit2.Signature( |
| 'Cecil Committer', 'cecil@committers.tld') |
| repo.create_commit( |
| 'refs/heads/master', |
| author, |
| committer, |
| 'Add sources file for testing', |
| |
| tree, |
| |
| [] |
| ) |
| |
| first_commit = repo.revparse_single('HEAD') |
| |
| |
| with open(os.path.join(self.gitrepo, 'sources'), 'w') as stream: |
| stream.write('foo\n bar\nbaz\n boose') |
| repo.index.add('sources') |
| repo.index.write() |
| |
| |
| tree = repo.index.write_tree() |
| author = pygit2.Signature( |
| 'Alice Author', 'alice@authors.tld') |
| committer = pygit2.Signature( |
| 'Cecil Committer', 'cecil@committers.tld') |
| repo.create_commit( |
| 'refs/heads/master', |
| author, |
| committer, |
| 'Add baz and boose to the sources\n\n There are more objects to ' |
| 'consider', |
| |
| tree, |
| |
| [first_commit.oid.hex] |
| ) |
| |
| second_commit = repo.revparse_single('HEAD') |
| |
| |
| patch = pagure.lib.git.commit_to_patch( |
| repo, [first_commit, second_commit]) |
| exp = """Mon Sep 17 00:00:00 2001 |
| From: Alice Author <alice@authors.tld> |
| Subject: [PATCH 1/2] Add sources file for testing |
| |
| |
| --- |
| |
| diff --git a/sources b/sources |
| new file mode 100644 |
| index 0000000..9f44358 |
| --- /dev/null |
| +++ b/sources |
| @@ -0,0 +1,2 @@ |
| +foo |
| + bar |
| \ No newline at end of file |
| |
| Mon Sep 17 00:00:00 2001 |
| From: Alice Author <alice@authors.tld> |
| Subject: [PATCH 2/2] Add baz and boose to the sources |
| |
| |
| There are more objects to consider |
| --- |
| |
| diff --git a/sources b/sources |
| index 9f44358..2a552bb 100644 |
| --- a/sources |
| +++ b/sources |
| @@ -1,2 +1,4 @@ |
| foo |
| - bar |
| \ No newline at end of file |
| + bar |
| +baz |
| + boose |
| \ No newline at end of file |
| |
| """ |
| npatch = [] |
| for row in patch.split('\n'): |
| if row.startswith('Date:'): |
| continue |
| if row.startswith('From '): |
| row = row.split(' ', 2)[2] |
| npatch.append(row) |
| |
| patch = '\n'.join(npatch) |
| self.assertEqual(patch, exp) |
| |
| |
| patch = pagure.lib.git.commit_to_patch(repo, second_commit) |
| exp = """Mon Sep 17 00:00:00 2001 |
| From: Alice Author <alice@authors.tld> |
| Subject: Add baz and boose to the sources |
| |
| |
| There are more objects to consider |
| --- |
| |
| diff --git a/sources b/sources |
| index 9f44358..2a552bb 100644 |
| --- a/sources |
| +++ b/sources |
| @@ -1,2 +1,4 @@ |
| foo |
| - bar |
| \ No newline at end of file |
| + bar |
| +baz |
| + boose |
| \ No newline at end of file |
| |
| """ |
| npatch = [] |
| for row in patch.split('\n'): |
| if row.startswith('Date:'): |
| continue |
| if row.startswith('From '): |
| row = row.split(' ', 2)[2] |
| npatch.append(row) |
| |
| patch = '\n'.join(npatch) |
| self.assertEqual(patch, exp) |
| |
| @patch('pagure.lib.notify.send_email') |
| def test_update_git(self, email_f): |
| """ Test the update_git of pagure.lib.git. """ |
| email_f.return_value = True |
| |
| |
| item = pagure.lib.model.Project( |
| user_id=1, |
| name='test_ticket_repo', |
| description='test project for ticket', |
| hook_token='aaabbbwww', |
| ) |
| self.session.add(item) |
| self.session.commit() |
| |
| |
| self.gitrepo = os.path.join(tests.HERE, 'test_ticket_repo.git') |
| os.makedirs(self.gitrepo) |
| repo_obj = pygit2.init_repository(self.gitrepo, bare=True) |
| |
| repo = pagure.lib.get_project(self.session, 'test_ticket_repo') |
| |
| msg = pagure.lib.new_issue( |
| session=self.session, |
| repo=repo, |
| title='Test issue', |
| content='We should work on this', |
| user='pingou', |
| ticketfolder=tests.HERE |
| ) |
| self.assertEqual(msg.title, 'Test issue') |
| issue = pagure.lib.search_issues(self.session, repo, issueid=1) |
| pagure.lib.git.update_git(issue, repo, tests.HERE) |
| |
| repo = pygit2.Repository(self.gitrepo) |
| commit = repo.revparse_single('HEAD') |
| |
| |
| patch = pagure.lib.git.commit_to_patch(repo, commit) |
| exp = """Mon Sep 17 00:00:00 2001 |
| From: pagure <pagure> |
| Subject: Updated ticket <hash>: Test issue |
| |
| |
| --- |
| |
| diff --git a/123 b/456 |
| new file mode 100644 |
| index 0000000..60f7480 |
| --- /dev/null |
| +++ b/456 |
| @@ -0,0 +1 @@ |
| +{"status": "Open", "blocks": [], "tags": [], "title": "Test issue", "private": false, "content": "We should work on this", "assignee": null, "depends": [], "user": {"fullname": "PY C", "default_email": "bar@pingou.com", "name": "pingou", "emails": ["bar@pingou.com", "foo@pingou.com"]}, "date_created": null, "id": 1, "comments": []} |
| \ No newline at end of file |
| |
| """ |
| npatch = [] |
| for row in patch.split('\n'): |
| if row.startswith('Date:'): |
| continue |
| elif row.startswith('From '): |
| row = row.split(' ', 2)[2] |
| elif row.startswith('diff --git '): |
| row = row.split(' ') |
| row[2] = 'a/123' |
| row[3] = 'b/456' |
| row = ' '.join(row) |
| elif 'Updated ticket' in row: |
| row = row.split() |
| row[3] = '<hash>:' |
| row = ' '.join(row) |
| elif 'date_created' in row: |
| data = json.loads(row[1:]) |
| data['date_created'] = None |
| row = '+' + json.dumps(data) |
| elif row.startswith('index 00'): |
| row = 'index 0000000..60f7480' |
| elif row.startswith('+++ b/'): |
| row = '+++ b/456' |
| npatch.append(row) |
| patch = '\n'.join(npatch) |
| |
| self.assertEqual(patch, exp) |
| |
| |
| msg = pagure.lib.add_issue_comment( |
| session=self.session, |
| issue=issue, |
| comment='Hey look a comment!', |
| user='foo', |
| ticketfolder=tests.HERE |
| ) |
| self.session.commit() |
| self.assertEqual(msg, 'Comment added') |
| |
| |
| repo = pygit2.Repository(self.gitrepo) |
| commit = repo.revparse_single('HEAD') |
| patch = pagure.lib.git.commit_to_patch(repo, commit) |
| exp = """Mon Sep 17 00:00:00 2001 |
| From: pagure <pagure> |
| Subject: Updated ticket <hash>: Test issue |
| |
| |
| --- |
| |
| diff --git a/123 b/456 |
| index 458821a..77674a8 |
| --- a/123 |
| +++ b/456 |
| @@ -1 +1 @@ |
| -{"status": "Open", "blocks": [], "tags": [], "title": "Test issue", "private": false, "content": "We should work on this", "assignee": null, "depends": [], "user": {"fullname": "PY C", "default_email": "bar@pingou.com", "name": "pingou", "emails": ["bar@pingou.com", "foo@pingou.com"]}, "date_created": null, "id": 1, "comments": []} |
| \ No newline at end of file |
| +{"status": "Open", "blocks": [], "tags": [], "title": "Test issue", "private": false, "content": "We should work on this", "assignee": null, "depends": [], "user": {"fullname": "PY C", "default_email": "bar@pingou.com", "name": "pingou", "emails": ["bar@pingou.com", "foo@pingou.com"]}, "date_created": null, "id": 1, "comments": [{"comment": "Hey look a comment!", "date_created": null, "id": 1, "parent": null, "user": {"fullname": "foo bar", "default_email": "foo@bar.com", "name": "foo", "emails": ["foo@bar.com"]}}]} |
| \ No newline at end of file |
| |
| """ |
| npatch = [] |
| for row in patch.split('\n'): |
| if row.startswith('Date:'): |
| continue |
| elif row.startswith('From '): |
| row = row.split(' ', 2)[2] |
| elif row.startswith('diff --git '): |
| row = row.split(' ') |
| row[2] = 'a/123' |
| row[3] = 'b/456' |
| row = ' '.join(row) |
| elif 'Updated ticket' in row: |
| row = row.split() |
| row[3] = '<hash>:' |
| row = ' '.join(row) |
| elif 'date_created' in row: |
| data = json.loads(row[1:]) |
| data['date_created'] = None |
| comments = [] |
| for comment in data['comments']: |
| comment['date_created'] = None |
| comments.append(comment) |
| data['comments'] = comments |
| row = row[0] + json.dumps(data) |
| elif row.startswith('index'): |
| row = 'index 458821a..77674a8' |
| elif row.startswith('--- a/'): |
| row = '--- a/123' |
| elif row.startswith('+++ b/'): |
| row = '+++ b/456' |
| npatch.append(row) |
| patch = '\n'.join(npatch) |
| |
| self.assertEqual(patch, exp) |
| |
| def test_clean_git(self): |
| """ Test the clean_git method of pagure.lib.git. """ |
| pagure.lib.git.clean_git(None, None, None) |
| |
| self.test_update_git() |
| |
| gitpath = os.path.join(tests.HERE, 'test_ticket_repo.git') |
| gitrepo = pygit2.init_repository(gitpath, bare=True) |
| |
| |
| commit = gitrepo.revparse_single('HEAD') |
| patch = pagure.lib.git.commit_to_patch(gitrepo, commit) |
| hash_file = None |
| for row in patch.split('\n'): |
| if row.startswith('+++ b/'): |
| hash_file = row.split('+++ b/')[-1] |
| break |
| |
| |
| files = [entry.name for entry in commit.tree] |
| self.assertEqual(files, [hash_file]) |
| |
| repo = pagure.lib.get_project(self.session, 'test_ticket_repo') |
| issue = pagure.lib.search_issues(self.session, repo, issueid=1) |
| pagure.lib.git.clean_git(issue, repo, tests.HERE, objtype='ticket') |
| |
| |
| commit = gitrepo.revparse_single('HEAD') |
| files = [entry.name for entry in commit.tree] |
| self.assertEqual(files, []) |
| |
| @patch('pagure.lib.notify.send_email') |
| def test_update_git_requests(self, email_f): |
| """ Test the update_git of pagure.lib.git for pull-requests. """ |
| email_f.return_value = True |
| |
| |
| item = pagure.lib.model.Project( |
| user_id=1, |
| name='test_ticket_repo', |
| description='test project for ticket', |
| hook_token='aaabbbxxx', |
| ) |
| self.session.add(item) |
| self.session.commit() |
| |
| |
| self.gitrepo = os.path.join(tests.HERE, 'test_ticket_repo.git') |
| os.makedirs(self.gitrepo) |
| repo_obj = pygit2.init_repository(self.gitrepo, bare=True) |
| |
| repo = pagure.lib.get_project(self.session, 'test_ticket_repo') |
| |
| msg = pagure.lib.new_pull_request( |
| session=self.session, |
| repo_from=repo, |
| branch_from='feature', |
| repo_to=repo, |
| branch_to='master', |
| title='test PR', |
| user='pingou', |
| requestfolder=tests.HERE, |
| requestuid='foobar', |
| requestid=None, |
| status=True, |
| notify=True |
| ) |
| |
| self.assertEqual(msg, 'Request created') |
| request = repo.requests[0] |
| self.assertEqual(request.title, 'test PR') |
| pagure.lib.git.update_git(request, request.project, tests.HERE) |
| |
| repo = pygit2.Repository(self.gitrepo) |
| commit = repo.revparse_single('HEAD') |
| |
| |
| patch = pagure.lib.git.commit_to_patch(repo, commit) |
| exp = """Mon Sep 17 00:00:00 2001 |
| From: pagure <pagure> |
| Subject: Updated ticket <hash>: test PR |
| |
| |
| --- |
| |
| diff --git a/123 b/456 |
| new file mode 100644 |
| index 0000000..60f7480 |
| --- /dev/null |
| +++ b/456 |
| @@ -0,0 +1 @@ |
| +{"status": true, "branch_from": "feature", "uid": "foobar", "commit_stop": null, "title": "test PR", "comments": [], "project": {"description": "test project for ticket", "parent": null, "settings": {"Minimum_score_to_merge_pull-request": -1, "Web-hooks": null, "project_documentation": true, "pull_requests": true, "Only_assignee_can_merge_pull-request": false, "issue_tracker": true}, "user": {"fullname": "PY C", "name": "pingou", "emails": ["bar@pingou.com", "foo@pingou.com"]}, "date_created": null, "id": 1, "name": "test_ticket_repo"}, "assignee": null, "repo_from": {"description": "test project for ticket", "parent": null, "settings": {"Minimum_score_to_merge_pull-request": -1, "Web-hooks": null, "project_documentation": true, "pull_requests": true, "Only_assignee_can_merge_pull-request": false, "issue_tracker": true}, "user": {"fullname": "PY C", "name": "pingou", "emails": ["bar@pingou.com", "foo@pingou.com"]}, "date_created": null, "id": 1, "name": "test_ticket_repo"}, "user": {"fullname": "PY C", "default_email": "bar@pingou.com", "name": "pingou", "emails": ["bar@pingou.com", "foo@pingou.com"]}, "branch": "master", "date_created": null, "commit_start": null, "id": 1} |
| \ No newline at end of file |
| |
| """ |
| npatch = [] |
| for row in patch.split('\n'): |
| if row.startswith('Date:'): |
| continue |
| elif row.startswith('From '): |
| row = row.split(' ', 2)[2] |
| elif row.startswith('diff --git '): |
| row = row.split(' ') |
| row[2] = 'a/123' |
| row[3] = 'b/456' |
| row = ' '.join(row) |
| elif 'Updated ticket' in row: |
| row = row.split() |
| row[3] = '<hash>:' |
| row = ' '.join(row) |
| elif 'date_created' in row: |
| data = json.loads(row[1:]) |
| data['project']['date_created'] = None |
| data['repo_from']['date_created'] = None |
| data['date_created'] = None |
| row = '+' + json.dumps(data) |
| elif row.startswith('index 00'): |
| row = 'index 0000000..60f7480' |
| elif row.startswith('+++ b/'): |
| row = '+++ b/456' |
| npatch.append(row) |
| patch = '\n'.join(npatch) |
| |
| self.assertEqual(patch, exp) |
| |
| def test_update_ticket_from_git(self): |
| """ Test the update_ticket_from_git method from pagure.lib.git. """ |
| tests.create_projects(self.session) |
| |
| repo = pagure.lib.get_project(self.session, 'test') |
| |
| |
| self.assertEqual(len(repo.issues), 0) |
| self.assertEqual(repo.issues, []) |
| |
| data = { |
| "status": "Open", "title": "foo", "comments": [], |
| "content": "bar", "date_created": "1426500263", |
| "user": { |
| "name": "pingou", "emails": ["pingou@fedoraproject.org"]}, |
| } |
| |
| self.assertRaises( |
| pagure.exceptions.PagureException, |
| pagure.lib.git.update_ticket_from_git, |
| self.session, |
| reponame='foobar', |
| username=None, |
| issue_uid='foobar', |
| json_data=data |
| ) |
| |
| pagure.lib.git.update_ticket_from_git( |
| self.session, reponame='test', username=None, |
| issue_uid='foobar', json_data=data |
| ) |
| self.session.commit() |
| |
| |
| self.assertEqual(len(repo.issues), 1) |
| self.assertEqual(repo.issues[0].id, 1) |
| self.assertEqual(repo.issues[0].uid, 'foobar') |
| self.assertEqual(repo.issues[0].title, 'foo') |
| self.assertEqual(repo.issues[0].depends_text, []) |
| self.assertEqual(repo.issues[0].blocks_text, []) |
| |
| data["title"] = "fake issue for tests" |
| pagure.lib.git.update_ticket_from_git( |
| self.session, reponame='test', username=None, |
| issue_uid='foobar', json_data=data |
| ) |
| self.session.commit() |
| |
| |
| self.assertEqual(len(repo.issues), 1) |
| self.assertEqual(repo.issues[0].id, 1) |
| self.assertEqual(repo.issues[0].uid, 'foobar') |
| self.assertEqual(repo.issues[0].title, 'fake issue for tests') |
| self.assertEqual(repo.issues[0].depends_text, []) |
| self.assertEqual(repo.issues[0].blocks_text, []) |
| |
| data = { |
| "status": "Open", "title": "Rename pagure", "private": False, |
| "content": "This is too much of a conflict with the book", |
| "user": { |
| "fullname": "Pierre-YvesChibon", |
| "name": "pingou", |
| "default_email": "pingou@fedoraproject.org", |
| "emails": ["pingou@fedoraproject.org"] |
| }, |
| "id": 20, |
| "blocks": [1], |
| "depends": [3, 4], |
| "date_created": "1426595224", |
| "comments": [ |
| { |
| "comment": "Nirik:\r\n\r\n- sourceforge++ \r\n- " |
| "gitmaker\r\n- mastergit \r\n- hostomatic\r\n- " |
| "gitcorp\r\n- git-keiretsu \r\n- gitbuffet\r\n- " |
| "cogitator\r\n- cogitate\r\n\r\nrandomuser:\r\n\r\n- " |
| "COLLABORATRON5000\r\n- git-sm\u00f6rg\u00e5sbord\r\n- " |
| "thislittlegittywenttomarket\r\n- git-o-rama\r\n- " |
| "gitsundheit", |
| "date_created": "1426595224", "id": 250, "parent": None, |
| "user": { |
| "fullname": "Pierre-YvesChibon", |
| "name": "pingou", |
| "default_email": "pingou@fedoraproject.org", |
| "emails": ["pingou@fedoraproject.org"] |
| } |
| }, |
| { |
| "comment": "Nirik:\r\n\r\n- sourceforge++ \r\n- " |
| "gitmaker\r\n- mastergit \r\n- hostomatic\r\n- " |
| "gitcorp\r\n- git-keiretsu \r\n- gitbuffet\r\n- " |
| "cogitator\r\n- cogitate\r\n\r\nrandomuser:\r\n\r\n- " |
| "COLLABORATRON5000\r\n- git-sm\u00f6rg\u00e5sbord\r\n- " |
| "thislittlegittywenttomarket\r\n- git-o-rama\r\n- " |
| "gitsundheit", |
| "date_created": "1426595340", "id": 324, "parent": None, |
| "user": { |
| "fullname": "Ralph Bean", |
| "name": "ralph", |
| "default_email": "ralph@fedoraproject.org", |
| "emails": ["ralph@fedoraproject.org"] |
| } |
| } |
| ] |
| } |
| |
| pagure.lib.git.update_ticket_from_git( |
| self.session, reponame='test', username=None, |
| issue_uid='foobar2', json_data=data |
| ) |
| |
| |
| self.assertEqual(len(repo.issues), 2) |
| self.assertEqual(repo.issues[0].uid, 'foobar') |
| self.assertEqual(repo.issues[0].title, 'fake issue for tests') |
| self.assertEqual(repo.issues[0].depends_text, [20]) |
| self.assertEqual(repo.issues[0].blocks_text, []) |
| |
| self.assertEqual(repo.issues[1].uid, 'foobar2') |
| self.assertEqual(repo.issues[1].title, 'Rename pagure') |
| self.assertEqual(repo.issues[1].depends_text, []) |
| self.assertEqual(repo.issues[1].blocks_text, [1]) |
| |
| def test_update_request_from_git(self): |
| """ Test the update_request_from_git method from pagure.lib.git. """ |
| tests.create_projects(self.session) |
| |
| repo = pagure.lib.get_project(self.session, 'test') |
| |
| |
| self.assertEqual(len(repo.requests), 0) |
| self.assertEqual(repo.requests, []) |
| |
| data = { |
| "status": True, |
| "uid": "d4182a2ac2d541d884742d3037c26e56", |
| "project": { |
| "parent": None, |
| "settings": { |
| "issue_tracker": True, |
| "project_documentation": True, |
| "pull_requests": True, |
| }, |
| "name": "test", |
| "date_created": "1426500194", |
| "user": { |
| "fullname": "fake user", |
| "name": "fake", |
| "default_email": "fake@fedoraproject.org", |
| "emails": ["fake@fedoraproject.org"] |
| }, |
| "id": 1, |
| "description": "test project" |
| }, |
| "commit_stop": "eface8e13bc2a08a3fb22af9a72a8c90e36b8b89", |
| "user": { |
| "fullname": "Pierre-YvesChibon", |
| "name": "pingou", |
| "default_email": "pingou@fedoraproject.org", |
| "emails": ["pingou@fedoraproject.org"] |
| }, |
| "id": 7, |
| "comments": [ |
| { |
| "comment": "really?", |
| "user": { |
| "fullname": "Pierre-YvesChibon", |
| "name": "pingou", |
| "default_email": "pingou@fedoraproject.org", |
| "emails": ["pingou@fedoraproject.org"] |
| }, |
| "parent": None, |
| "date_created": "1426843778", |
| "commit": "fa72f315373ec5f98f2b08c8ffae3645c97aaad2", |
| "line": 5, |
| "id": 1, |
| "filename": "test" |
| }, |
| { |
| "comment": "Again ?", |
| "user": { |
| "fullname": "Pierre-YvesChibon", |
| "name": "pingou", |
| "default_email": "pingou@fedoraproject.org", |
| "emails": [ |
| "pingou@fedoraproject.org" |
| ] |
| }, |
| "parent": None, |
| "date_created": "1426866781", |
| "commit": "94ebaf900161394059478fd88aec30e59092a1d7", |
| "line": 5, |
| "id": 2, |
| "filename": "test2" |
| }, |
| { |
| "comment": "Should be fine in fact", |
| "user": { |
| "fullname": "Pierre-YvesChibon", |
| "name": "pingou", |
| "default_email": "pingou@fedoraproject.org", |
| "emails": [ |
| "pingou@fedoraproject.org" |
| ] |
| }, |
| "parent": None, |
| "date_created": "1426866950", |
| "commit": "94ebaf900161394059478fd88aec30e59092a1d7", |
| "line": 5, |
| "id": 3, |
| "filename": "test2" |
| } |
| ], |
| "branch_from": "master", |
| "title": "test request", |
| "commit_start": "788efeaaf86bde8618f594a8181abb402e1dd904", |
| "repo_from": { |
| "parent": { |
| "parent": None, |
| "name": "test", |
| "date_created": "1426500194", |
| "user": { |
| "fullname": "fake user", |
| "name": "fake", |
| "default_email": "fake@fedoraproject.org", |
| "emails": [ |
| "fake@fedoraproject.org" |
| ] |
| }, |
| "settings": { |
| "issue_tracker": True, |
| "project_documentation": True, |
| "pull_requests": True, |
| }, |
| "id": 1, |
| "description": "test project" |
| }, |
| "settings": { |
| "issue_tracker": True, |
| "project_documentation": True, |
| "pull_requests": True, |
| }, |
| "name": "test", |
| "date_created": "1426843440", |
| "user": { |
| "fullname": "Pierre-YvesChibon", |
| "name": "pingou", |
| "default_email": "pingou@fedoraproject.org", |
| "emails": [ |
| "pingou@fedoraproject.org" |
| ] |
| }, |
| "id": 6, |
| "description": "test project" |
| }, |
| "branch": "master", |
| "date_created": "1426843732" |
| } |
| |
| self.assertRaises( |
| pagure.exceptions.PagureException, |
| pagure.lib.git.update_request_from_git, |
| self.session, |
| reponame='foobar', |
| username=None, |
| request_uid='d4182a2ac2d541d884742d3037c26e56', |
| json_data=data, |
| gitfolder=tests.HERE, |
| forkfolder=os.path.join(tests.HERE, 'forks'), |
| docfolder=os.path.join(tests.HERE, 'docs'), |
| ticketfolder=os.path.join(tests.HERE, 'tickets'), |
| requestfolder=os.path.join(tests.HERE, 'requests') |
| ) |
| |
| pagure.lib.git.update_request_from_git( |
| self.session, |
| reponame='test', |
| username=None, |
| request_uid='d4182a2ac2d541d884742d3037c26e56', |
| json_data=data, |
| gitfolder=tests.HERE, |
| forkfolder=os.path.join(tests.HERE, 'forks'), |
| docfolder=os.path.join(tests.HERE, 'docs'), |
| ticketfolder=os.path.join(tests.HERE, 'tickets'), |
| requestfolder=os.path.join(tests.HERE, 'requests') |
| ) |
| self.session.commit() |
| |
| |
| self.assertEqual(len(repo.requests), 1) |
| self.assertEqual(repo.requests[0].id, 7) |
| self.assertEqual( |
| repo.requests[0].uid, 'd4182a2ac2d541d884742d3037c26e56') |
| self.assertEqual(repo.requests[0].title, 'test request') |
| self.assertEqual(len(repo.requests[0].comments), 3) |
| |
| data = { |
| "status": True, |
| "uid": "d4182a2ac2d541d884742d3037c26e57", |
| "project": { |
| "parent": None, |
| "name": "test", |
| "date_created": "1426500194", |
| "user": { |
| "fullname": "fake user", |
| "name": "fake", |
| "default_email": "fake@fedoraproject.org", |
| "emails": ["fake@fedoraproject.org"] |
| }, |
| "settings": { |
| "issue_tracker": True, |
| "project_documentation": True, |
| "pull_requests": True, |
| }, |
| "id": 1, |
| "description": "test project" |
| }, |
| "commit_stop": "eface8e13bc2a08a3fb22af9a72a8c90e36b8b89", |
| "user": { |
| "fullname": "Pierre-YvesChibon", |
| "name": "pingou", |
| "default_email": "pingou@fedoraproject.org", |
| "emails": ["pingou@fedoraproject.org"] |
| }, |
| "id": 4, |
| "comments": [], |
| "branch_from": "master", |
| "title": "test request #2", |
| "commit_start": "788efeaaf86bde8618f594a8181abb402e1dd904", |
| "repo_from": { |
| "parent": { |
| "parent": None, |
| "name": "test", |
| "date_created": "1426500194", |
| "user": { |
| "fullname": "fake user", |
| "name": "fake", |
| "default_email": "fake@fedoraproject.org", |
| "emails": [ |
| "fake@fedoraproject.org" |
| ] |
| }, |
| "settings": { |
| "issue_tracker": True, |
| "project_documentation": True, |
| "pull_requests": True, |
| }, |
| "id": 1, |
| "description": "test project" |
| }, |
| "settings": { |
| "issue_tracker": True, |
| "project_documentation": True, |
| "pull_requests": True, |
| }, |
| "name": "test", |
| "date_created": "1426843440", |
| "user": { |
| "fullname": "Pierre-YvesChibon", |
| "name": "pingou", |
| "default_email": "pingou@fedoraproject.org", |
| "emails": [ |
| "pingou@fedoraproject.org" |
| ] |
| }, |
| "project_docs": True, |
| "id": 6, |
| "description": "test project" |
| }, |
| "branch": "master", |
| "date_created": "1426843745" |
| } |
| |
| pagure.lib.git.update_request_from_git( |
| self.session, |
| reponame='test', |
| username=None, |
| request_uid='d4182a2ac2d541d884742d3037c26e57', |
| json_data=data, |
| gitfolder=tests.HERE, |
| forkfolder=os.path.join(tests.HERE, 'forks'), |
| docfolder=os.path.join(tests.HERE, 'docs'), |
| ticketfolder=os.path.join(tests.HERE, 'tickets'), |
| requestfolder=os.path.join(tests.HERE, 'requests') |
| ) |
| self.session.commit() |
| |
| |
| self.assertEqual(len(repo.requests), 2) |
| self.assertEqual(repo.requests[0].id, 7) |
| self.assertEqual( |
| repo.requests[0].uid, 'd4182a2ac2d541d884742d3037c26e56') |
| self.assertEqual(repo.requests[0].title, 'test request') |
| self.assertEqual(len(repo.requests[0].comments), 3) |
| |
| self.assertEqual(repo.requests[1].id, 4) |
| self.assertEqual( |
| repo.requests[1].uid, 'd4182a2ac2d541d884742d3037c26e57') |
| self.assertEqual(repo.requests[1].title, 'test request #2') |
| self.assertEqual(len(repo.requests[1].comments), 0) |
| |
| def test_read_git_lines(self): |
| """ Test the read_git_lines method of pagure.lib.git. """ |
| self.test_update_git() |
| |
| gitrepo = os.path.join(tests.HERE, 'test_ticket_repo.git') |
| output = pagure.lib.git.read_git_lines( |
| ['log', '-1', "--pretty='%s'"], gitrepo) |
| self.assertEqual(len(output), 1) |
| self.assertTrue( |
| output[0].startswith("'Updated ticket ") |
| ) |
| self.assertTrue( |
| output[0].endswith(": Test issue'") |
| ) |
| |
| |
| output = pagure.lib.git.read_git_lines( |
| ['log', '-1', "--pretty='%s'"], gitrepo, keepends=True) |
| self.assertEqual(len(output), 1) |
| self.assertTrue( |
| output[0].endswith(": Test issue'\n") |
| ) |
| |
| def test_get_revs_between(self): |
| """ Test the get_revs_between method of pagure.lib.git. """ |
| |
| self.test_update_git() |
| |
| gitrepo = os.path.join(tests.HERE, 'test_ticket_repo.git') |
| output = pagure.lib.git.read_git_lines( |
| ['log', '-3', "--pretty='%H'"], gitrepo) |
| self.assertEqual(len(output), 2) |
| to_hash = output[0].replace("'", '') |
| from_hash = output[1].replace("'", '') |
| |
| output1 = pagure.lib.git.get_revs_between( |
| to_hash, from_hash, gitrepo) |
| self.assertEqual(output1, [to_hash]) |
| |
| output2 = pagure.lib.git.get_revs_between( |
| from_hash, to_hash, gitrepo) |
| self.assertEqual(output2, [to_hash]) |
| |
| def test_get_pusher(self): |
| """ Test the get_pusher method of pagure.lib.git. """ |
| |
| self.test_update_git() |
| |
| gitrepo = os.path.join(tests.HERE, 'test_ticket_repo.git') |
| output = pagure.lib.git.read_git_lines( |
| ['log', '-3', "--pretty='%H'"], gitrepo) |
| self.assertEqual(len(output), 2) |
| for githash in output: |
| githash = githash.replace("'", '') |
| output = pagure.lib.git.get_pusher(githash, gitrepo) |
| self.assertEqual(output, 'pagure') |
| |
| def test_get_pusher_email(self): |
| """ Test the get_pusher_email method of pagure.lib.git. """ |
| |
| self.test_update_git() |
| |
| gitrepo = os.path.join(tests.HERE, 'test_ticket_repo.git') |
| output = pagure.lib.git.read_git_lines( |
| ['log', '-3', "--pretty='%H'"], gitrepo) |
| self.assertEqual(len(output), 2) |
| for githash in output: |
| githash = githash.replace("'", '') |
| output = pagure.lib.git.get_pusher_email(githash, gitrepo) |
| self.assertEqual(output, 'pagure') |
| |
| def test_get_repo_name(self): |
| """ Test the get_repo_name method of pagure.lib.git. """ |
| gitrepo = os.path.join(tests.HERE, 'test_ticket_repo.git') |
| repo_name = pagure.lib.git.get_repo_name(gitrepo) |
| self.assertEqual(repo_name, 'test_ticket_repo') |
| |
| repo_name = pagure.lib.git.get_repo_name('foo/bar/baz/test.git') |
| self.assertEqual(repo_name, 'test') |
| |
| repo_name = pagure.lib.git.get_repo_name('foo.test.git') |
| self.assertEqual(repo_name, 'foo.test') |
| |
| def test_get_username(self): |
| """ Test the get_username method of pagure.lib.git. """ |
| gitrepo = os.path.join(tests.HERE, 'test_ticket_repo.git') |
| repo_name = pagure.lib.git.get_username(gitrepo) |
| self.assertEqual(repo_name, None) |
| |
| repo_name = pagure.lib.git.get_username('foo/bar/baz/test.git') |
| self.assertEqual(repo_name, None) |
| |
| repo_name = pagure.lib.git.get_username('foo.test.git') |
| self.assertEqual(repo_name, None) |
| |
| repo_name = pagure.lib.git.get_username( |
| os.path.join(tests.HERE, 'forks', 'pingou', 'foo.test.git')) |
| self.assertEqual(repo_name, 'pingou') |
| |
| |
| if __name__ == '__main__': |
| SUITE = unittest.TestLoader().loadTestsFromTestCase(PagureLibGittests) |
| unittest.TextTestRunner(verbosity=2).run(SUITE) |