Index: appengine/findit/common/test/git_repository_test.py |
diff --git a/appengine/findit/common/test/git_repository_test.py b/appengine/findit/common/test/git_repository_test.py |
deleted file mode 100644 |
index 8cf1d0cd9a1c3c5e0721061eb2ceda95b8d5dcbf..0000000000000000000000000000000000000000 |
--- a/appengine/findit/common/test/git_repository_test.py |
+++ /dev/null |
@@ -1,582 +0,0 @@ |
-# Copyright 2014 The Chromium Authors. All rights reserved. |
-# Use of this source code is governed by a BSD-style license that can be |
-# found in the LICENSE file. |
- |
-import base64 |
-from datetime import datetime |
-import json |
-import re |
- |
-from testing_utils import testing |
- |
-from common import git_repository |
-from common import retry_http_client |
-from common.change_log import ChangeLog |
- |
- |
-COMMIT_MESSAGE = ('Add popover for snapshot canvas log.\n\n' |
- 'Review URL: https://codereview.chromium.org/320423004\n\n' |
- 'Review URL: https://codereview.chromium.org/328113005\n\n' |
- 'Cr-Commit-Position: refs/heads/master@{#175976}') |
- |
-COMMIT_LOG = """)]}' |
-{ |
- "commit": "bcfd5a12eea05588aee98b7cf7e032d8cb5b58bb", |
- "tree": "481fd0f3bdf6eda5ca29ec6cbc6aa476b3684143", |
- "parents": [ |
- "42a94bb5e2ef8525d7dadbd8eae37fe7cb8d77d0" |
- ], |
- "author": { |
- "name": "test1@chromium.org", |
- "email": "test1@chromium.org@bbb929c8-8fbe-4397-9dbb-9b2b20218538", |
- "time": "Wed Jun 11 19:35:32 2014 -0400" |
- }, |
- "committer": { |
- "name": "test1@chromium.org", |
- "email": "test1@chromium.org", |
- "time": "Wed Jun 11 19:35:32 2014" |
- }, |
- "message": %s, |
- "tree_diff": [ |
- { |
- "type": "add", |
- "old_id": "f71f1167c2204626057d26912b8a2ff096fe4bd2", |
- "old_mode": 33188, |
- "old_path": "/dev/null", |
- "new_id": "165fb11e0658f41d66038199056a53bcfab5dda0", |
- "new_mode": 33188, |
- "new_path": "Source/devtools/front_end/layers/added_file.js" |
- }, |
- { |
- "type": "delete", |
- "old_id": "f71f1167c2204626057d26912b8a2ff096fe4bd3", |
- "old_mode": 33188, |
- "old_path": "Source/devtools/front_end/layers/deleted_file.js", |
- "new_id": "165fb11e0658f41d66038199056a53bcfab5dda1", |
- "new_mode": 33188, |
- "new_path": "/dev/null" |
- }, |
- { |
- "type": "modify", |
- "old_id": "f71f1167c2204626057d26912b8a2ff096fe4bd1", |
- "old_mode": 33188, |
- "old_path": "Source/devtools/front_end/layers/modified_file.js", |
- "new_id": "165fb11e0658f41d66038199056a53bcfab5dda9", |
- "new_mode": 33188, |
- "new_path": "Source/devtools/front_end/layers/modified_file.js" |
- }, |
- { |
- "type": "copy", |
- "old_id": "f71f1167c2204626057d26912b8a2ff096fe4bd4", |
- "old_mode": 33188, |
- "old_path": "Source/devtools/front_end/layers/file.js", |
- "new_id": "165fb11e0658f41d66038199056a53bcfab5dda2", |
- "new_mode": 33188, |
- "new_path": "Source/devtools/front_end/layers/copied_file.js" |
- }, |
- { |
- "type": "rename", |
- "old_id": "f71f1167c2204626057d26912b8a2ff096fe4bd5", |
- "old_mode": 33188, |
- "old_path": "Source/devtools/front_end/layers/file.js", |
- "new_id": "165fb11e0658f41d66038199056a53bcfab5dda3", |
- "new_mode": 33188, |
- "new_path": "Source/devtools/front_end/layers/renamed_file.js" |
- } |
- ] |
-}""" % json.JSONEncoder().encode(COMMIT_MESSAGE) |
- |
-EXPECTED_CHANGE_LOG_JSON = { |
- 'author_name': 'test1@chromium.org', |
- 'message': COMMIT_MESSAGE, |
- 'committer_email': 'test1@chromium.org', |
- 'commit_position': 175976, |
- 'author_email': 'test1@chromium.org', |
- 'touched_files': [ |
- { |
- 'change_type': 'add', |
- 'new_path': 'Source/devtools/front_end/layers/added_file.js', |
- 'old_path': '/dev/null' |
- }, |
- { |
- 'change_type': 'delete', |
- 'new_path': '/dev/null', |
- 'old_path': 'Source/devtools/front_end/layers/deleted_file.js' |
- }, |
- { |
- 'change_type': 'modify', |
- 'new_path': 'Source/devtools/front_end/layers/modified_file.js', |
- 'old_path': 'Source/devtools/front_end/layers/modified_file.js' |
- }, |
- { |
- 'change_type': 'copy', |
- 'new_path': 'Source/devtools/front_end/layers/copied_file.js', |
- 'old_path': 'Source/devtools/front_end/layers/file.js' |
- }, |
- { |
- 'change_type': 'rename', |
- 'new_path': 'Source/devtools/front_end/layers/renamed_file.js', |
- 'old_path': 'Source/devtools/front_end/layers/file.js' |
- } |
- ], |
- 'author_time': datetime(2014, 06, 11, 23, 35, 32), |
- 'committer_time': datetime(2014, 06, 11, 19, 35, 32), |
- 'commit_url': |
- 'https://repo.test/+/bcfd5a12eea05588aee98b7cf7e032d8cb5b58bb', |
- 'code_review_url': 'https://codereview.chromium.org/328113005', |
- 'committer_name': 'test1@chromium.org', |
- 'revision': 'bcfd5a12eea05588aee98b7cf7e032d8cb5b58bb', |
- 'reverted_revision': None |
-} |
- |
-COMMIT_LOG_WITH_UNKNOWN_FILE_CHANGE_TYPE = """)]}' |
-{ |
- "commit": "bcfd5a12eea05588aee98b7cf7e032d8cb5b58bb", |
- "tree": "481fd0f3bdf6eda5ca29ec6cbc6aa476b3684143", |
- "parents": [ |
- "42a94bb5e2ef8525d7dadbd8eae37fe7cb8d77d0" |
- ], |
- "author": { |
- "name": "test1@chromium.org", |
- "email": "test1@chromium.org@bbb929c8-8fbe-4397-9dbb-9b2b20218538", |
- "time": "Wed Jun 11 19:35:32 2014" |
- }, |
- "committer": { |
- "name": "test1@chromium.org", |
- "email": "test1@chromium.org@bbb929c8-8fbe-4397-9dbb-9b2b20218538", |
- "time": "Wed Jun 11 19:35:32 2014" |
- }, |
- "message": "message", |
- "tree_diff": [ |
- { |
- "type": "unknown_change_type", |
- "old_id": "f71f1167c2204626057d26912b8a2ff096fe4bd2", |
- "old_mode": 33188, |
- "old_path": "/dev/null", |
- "new_id": "165fb11e0658f41d66038199056a53bcfab5dda0", |
- "new_mode": 33188, |
- "new_path": "Source/devtools/front_end/layers/added_file.js" |
- } |
- ] |
-}""" |
- |
-GITILES_FILE_BLAME_RESULT = """)]}' |
-{ |
- "regions": [ |
- { |
- "start": 1, |
- "count": 6, |
- "path": "chrome/test/chromedriver/element_commands.cc", |
- "commit": "584ae1f26b070150f65a03dba75fc8af6b6f6ece", |
- "author": { |
- "name": "test2@chromium.org", |
- "email": "test2@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98", |
- "time": "2013-02-11 20:18:51" |
- } |
- }, |
- { |
- "start": 7, |
- "count": 1, |
- "path": "chrome/test/chromedriver/element_commands.cc", |
- "commit": "030b5d9bb7d6c9f673cd8f0c86d8f1e921de7076", |
- "author": { |
- "name": "test3@chromium.org", |
- "email": "test3@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98", |
- "time": "2014-02-06 10:02:10 +0400" |
- } |
- }, |
- { |
- "start": 8, |
- "count": 1, |
- "path": "chrome/test/chromedriver/element_commands.cc", |
- "commit": "584ae1f26b070150f65a03dba75fc8af6b6f6ece", |
- "author": { |
- "name": "test2@chromium.org", |
- "email": "test2@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98", |
- "time": "2013-02-11 20:18:51" |
- } |
- } |
- ] |
-}""" |
- |
-EXPECTED_FILE_BLAME_JSON = { |
- 'regions': [ |
- { |
- 'count': 6, |
- 'author_email': u'test2@chromium.org', |
- 'author_time': datetime(2013, 02, 11, 20, 18, 51), |
- 'author_name': u'test2@chromium.org', |
- 'start': 1, |
- 'revision': u'584ae1f26b070150f65a03dba75fc8af6b6f6ece' |
- }, |
- { |
- 'count': 1, |
- 'author_email': u'test3@chromium.org', |
- 'author_time': datetime(2014, 02, 06, 06, 02, 10), |
- 'author_name': u'test3@chromium.org', |
- 'start': 7, |
- 'revision': u'030b5d9bb7d6c9f673cd8f0c86d8f1e921de7076' |
- }, |
- { |
- 'count': 1, |
- 'author_email': u'test2@chromium.org', |
- 'author_time': datetime(2013, 02, 11, 20, 18, 51), |
- 'author_name': u'test2@chromium.org', |
- 'start': 8, |
- 'revision': u'584ae1f26b070150f65a03dba75fc8af6b6f6ece' |
- } |
- ], |
- 'path': 'a/b/c.cc', |
- 'revision': 'dummy_abcd1234' |
-} |
- |
-DUMMY_CHANGELOG_JSON = { |
- 'author_name': 'test@chromium.org', |
- 'message': 'dummy', |
- 'committer_email': 'test@chromium.org', |
- 'commit_position': 175976, |
- 'author_email': 'test1@chromium.org', |
- 'touched_files': [ |
- { |
- 'change_type': 'add', |
- 'new_path': 'Source/devtools/added_file.js', |
- 'old_path': '/dev/null' |
- } |
- ], |
- 'author_time': datetime(2016, 01, 11, 23, 35, 32), |
- 'committer_time': datetime(2016, 01, 11, 19, 35, 32), |
- 'commit_url': |
- 'https://repo.test/+/bcfd', |
- 'code_review_url': 'https://codereview.chromium.org/328113005', |
- 'committer_name': 'test1@chromium.org', |
- 'revision': 'bcfd', |
- 'reverted_revision': None |
-} |
- |
- |
-class HttpClientForGit(retry_http_client.RetryHttpClient): |
- |
- def __init__(self): |
- super(HttpClientForGit, self).__init__() |
- self.response_for_url = {} |
- |
- def SetResponseForUrl(self, url, response): |
- self.response_for_url[url] = response |
- |
- def GetBackoff(self, *_): # pragma: no cover |
- """Override to avoid sleep.""" |
- return 0 |
- |
- def _Get(self, url, *_): |
- response = self.response_for_url.get(url) |
- if response is None: |
- return 404, 'Not Found' |
- else: |
- return 200, response |
- |
- def _Post(self, *_): # pragma: no cover |
- pass |
- |
- def _Put(self, *_): # pragma: no cover |
- pass |
- |
- |
-class GitRepositoryTest(testing.AppengineTestCase): |
- |
- def setUp(self): |
- super(GitRepositoryTest, self).setUp() |
- self.http_client_for_git = HttpClientForGit() |
- self.repo_url = 'https://repo.test' |
- self.git_repo = git_repository.GitRepository(self.repo_url, |
- self.http_client_for_git) |
- |
- def testGitRepositoryPropertySetters(self): |
- http_client_for_git = HttpClientForGit() |
- git_repo = git_repository.GitRepository(http_client=http_client_for_git) |
- git_repo.repo_url = 'https://repo' |
- self.assertEqual(git_repo.repo_url, 'https://repo') |
- |
- self.assertEqual(git_repo. http_client, http_client_for_git) |
- |
- def testExtractCommitPositionAndCodeReviewUrl(self): |
- testcases = [ |
- { |
- 'message': |
- 'balabala...\n' |
- '\n' |
- 'BUG=604502\n' |
- '\n' |
- 'Review-Url: https://codereview.chromium.org/1927593004\n' |
- 'Cr-Commit-Position: refs/heads/master@{#390254}\n', |
- 'commit_position': 390254, |
- 'code_review_url': 'https://codereview.chromium.org/1927593004', |
- }, |
- { |
- 'message': |
- 'balabala...\n' |
- '\n' |
- 'BUG=409934\n' |
- '\n' |
- 'Review URL: https://codereview.chromium.org/547753003\n' |
- '\n' |
- 'Cr-Commit-Position: refs/heads/master@{#293661}', |
- 'commit_position': 293661, |
- 'code_review_url': 'https://codereview.chromium.org/547753003', |
- }, |
- { |
- 'message': |
- 'balabala...\n' |
- '\n' |
- 'balabala...\n' |
- '\n' |
- 'R=test4@chromium.org\n' |
- '\n' |
- 'Review URL: https://codereview.chromium.org/469523002\n' |
- '\n' |
- 'Cr-Commit-Position: refs/heads/master@{#289120}', |
- 'commit_position': 289120, |
- 'code_review_url': 'https://codereview.chromium.org/469523002', |
- }, |
- { |
- 'message': None, |
- 'commit_position': None, |
- 'code_review_url': None |
- } |
- ] |
- |
- for testcase in testcases: |
- (commit_position, |
- code_review_url) = self.git_repo.ExtractCommitPositionAndCodeReviewUrl( |
- testcase['message']) |
- self.assertEqual(commit_position, testcase['commit_position']) |
- self.assertEqual(code_review_url, testcase['code_review_url']) |
- |
- def testEndingSlashInRepoUrl(self): |
- git_repo1 = git_repository.GitRepository(self.repo_url, |
- self.http_client_for_git) |
- self.assertEqual(self.repo_url, git_repo1.repo_url) |
- |
- git_repo2 = git_repository.GitRepository('%s/' % self.repo_url, |
- self.http_client_for_git) |
- self.assertEqual(self.repo_url, git_repo2.repo_url) |
- |
- def testMalformattedJsonReponse(self): |
- self.http_client_for_git.SetResponseForUrl( |
- '%s/+/%s?format=json' % (self.repo_url, 'aaa'), 'abcde{"a": 1}') |
- self.assertRaisesRegexp( |
- Exception, re.escape('Response does not begin with )]}\'\n'), |
- self.git_repo.GetChangeLog, 'aaa') |
- |
- def testGetChangeLog(self): |
- self.http_client_for_git.SetResponseForUrl( |
- '%s/+/%s?format=json' % ( |
- self.repo_url, 'bcfd5a12eea05588aee98b7cf7e032d8cb5b58bb'), |
- COMMIT_LOG) |
- |
- self.assertIsNone(self.git_repo.GetChangeLog('not_existing_revision')) |
- |
- change_log = self.git_repo.GetChangeLog( |
- 'bcfd5a12eea05588aee98b7cf7e032d8cb5b58bb') |
- self.assertEqual(EXPECTED_CHANGE_LOG_JSON, change_log.ToDict()) |
- |
- def testUnknownChangeType(self): |
- self.http_client_for_git.SetResponseForUrl( |
- '%s/+/%s?format=json' % ( |
- self.repo_url, 'bcfd5a12eea05588aee98b7cf7e032d8cb5b58bb'), |
- COMMIT_LOG_WITH_UNKNOWN_FILE_CHANGE_TYPE) |
- self.assertRaisesRegexp( |
- Exception, 'Unknown change type "unknown_change_type"', |
- self.git_repo.GetChangeLog, 'bcfd5a12eea05588aee98b7cf7e032d8cb5b58bb') |
- |
- def testGetChangeDiff(self): |
- self.assertIsNone(self.git_repo.GetChangeDiff('not_existing_revision')) |
- |
- git_revision = 'dummy_abcd1234' |
- original_diff = 'dummy diff' |
- self.http_client_for_git.SetResponseForUrl( |
- '%s/+/%s%%5E%%21/?format=text' % (self.repo_url, git_revision), |
- base64.b64encode(original_diff)) |
- diff = self.git_repo.GetChangeDiff(git_revision) |
- self.assertEqual(original_diff, diff) |
- |
- def testGetBlame(self): |
- self.assertIsNone(self.git_repo.GetBlame('path', 'not_existing_revision')) |
- |
- path = 'a/b/c.cc' |
- git_revision = 'dummy_abcd1234' |
- self.http_client_for_git.SetResponseForUrl( |
- '%s/+blame/%s/%s?format=json' % (self.repo_url, git_revision, path), |
- GITILES_FILE_BLAME_RESULT) |
- |
- blame = self.git_repo.GetBlame(path, git_revision) |
- self.assertEqual(EXPECTED_FILE_BLAME_JSON, blame.ToDict()) |
- |
- def testGetSource(self): |
- self.assertIsNone(self.git_repo.GetSource('path', 'not_existing_revision')) |
- |
- path = 'a/b/c.cc' |
- git_revision = 'dummy_abcd1234' |
- original_source = 'dummy source' |
- self.http_client_for_git.SetResponseForUrl( |
- '%s/+/%s/%s?format=text' % (self.repo_url, git_revision, path), |
- base64.b64encode(original_source)) |
- source = self.git_repo.GetSource(path, git_revision) |
- self.assertEqual(original_source, source) |
- |
- def testTimeConversion(self): |
- datetime_with_timezone = 'Wed Jul 22 19:35:32 2014 +0400' |
- expected_datetime = datetime(2014, 7, 22, 15, 35, 32) |
- utc_datetime = self.git_repo._GetDateTimeFromString(datetime_with_timezone) |
- |
- self.assertEqual(expected_datetime, utc_datetime) |
- |
- def testGetRevertedRevision(self): |
- message = ( |
- 'Revert of test1\n\nReason for revert:\nrevert test1\n\n' |
- 'Original issue\'s description:\n> test 1\n>\n' |
- '> description of test 1.\n>\n> BUG=none\n> TEST=none\n' |
- '> R=test@chromium.org\n> TBR=test@chromium.org\n>\n' |
- '> Committed: https://chromium.googlesource.com/chromium/src/+/' |
- 'c9cc182781484f9010f062859cda048afefefefe\n' |
- '> Cr-Commit-Position: refs/heads/master@{#341992}\n\n' |
- 'TBR=test@chromium.org\nNOPRESUBMIT=true\nNOTREECHECKS=true\n' |
- 'NOTRY=true\nBUG=none\n\n' |
- 'Review URL: https://codereview.chromium.org/1278653002\n\n' |
- 'Cr-Commit-Position: refs/heads/master@{#342013}\n') |
- |
- reverted_revision = self.git_repo.GetRevertedRevision(message) |
- self.assertEqual('c9cc182781484f9010f062859cda048afefefefe', |
- reverted_revision) |
- |
- def testGetRevertedRevisionRevertOfRevert(self): |
- message = ( |
- 'Revert of Revert\n\nReason for revert:\nRevert of revert\n\n' |
- 'Original issue\'s description:\n> test case of revert of revert\n>\n' |
- '> Reason for revert:\n> reason\n>\n> Original issue\'s description:\n' |
- '> > base cl\n> >\n> > R=kalman\n> > BUG=424661\n> >\n' |
- '> > Committed: https://crrev.com/34ea66b8ac1d56dadd670431063857ffdd\n' |
- '> > Cr-Commit-Position: refs/heads/master@{#326953}\n>\n' |
- '> TBR=test@chromium.org\n> NOPRESUBMIT=true\n' |
- '> NOTREECHECKS=true\n> NOTRY=true\n> BUG=424661\n>\n' |
- '> Committed: https://crrev.com/76a7e3446188256ca240dc31f78de29511a' |
- '2c322\n' |
- '> Cr-Commit-Position: refs/heads/master@{#327021}\n\n' |
- 'TBR=test@chromium.org\nNOPRESUBMIT=true\n' |
- 'NOTREECHECKS=true\nNOTRY=true\nBUG=424661\n\n' |
- 'Review URL: https://codereview.chromium.org/1161773008\n\n' |
- 'Cr-Commit-Position: refs/heads/master@{#332062}\n') |
- |
- reverted_revision = self.git_repo.GetRevertedRevision(message) |
- self.assertEqual('76a7e3446188256ca240dc31f78de29511a2c322', |
- reverted_revision) |
- |
- def testGetRevertedRevisionNoRevertedCL(self): |
- message = ( |
- 'Test for not revert cl\n\n' |
- 'TBR=test@chromium.org\nNOPRESUBMIT=true\n' |
- 'NOTREECHECKS=true\nNOTRY=true\nBUG=424661\n\n' |
- 'Review URL: https://codereview.chromium.org/1161773008\n\n' |
- 'Cr-Commit-Position: refs/heads/master@{#332062}\n') |
- |
- reverted_revision = self.git_repo.GetRevertedRevision(message) |
- self.assertIsNone(reverted_revision) |
- |
- def testGetCommitsBetweenRevisions(self): |
- def _MockSendRequestForJsonResponse(*_): |
- return { |
- 'log': [ |
- {'commit': '3'}, |
- {'commit': '2'}, |
- {'commit': '1'}] |
- } |
- self.mock(git_repository.GitRepository, '_SendRequestForJsonResponse', |
- _MockSendRequestForJsonResponse) |
- expected_commits = ['3', '2', '1'] |
- actual_commits = self.git_repo.GetCommitsBetweenRevisions('0', '3') |
- self.assertEqual(expected_commits, actual_commits) |
- |
- def testGetCommitsBetweenRevisionsWithEmptyData(self): |
- def _MockSendRequestForJsonResponse(*_): |
- return None |
- self.mock(git_repository.GitRepository, '_SendRequestForJsonResponse', |
- _MockSendRequestForJsonResponse) |
- expected_commits = [] |
- actual_commits = self.git_repo.GetCommitsBetweenRevisions('0', '3') |
- self.assertEqual(expected_commits, actual_commits) |
- |
- def testGetCommitsBetweenRevisionsWithIncompleteData(self): |
- def _MockSendRequestForJsonResponse(*_): |
- return { |
- 'log': [ |
- {'commit': '1'}, |
- {'something_else': '2'} |
- ] |
- } |
- self.mock(git_repository.GitRepository, '_SendRequestForJsonResponse', |
- _MockSendRequestForJsonResponse) |
- expected_commits = ['1'] |
- actual_commits = self.git_repo.GetCommitsBetweenRevisions('0', '3') |
- self.assertEqual(expected_commits, actual_commits) |
- |
- def testGetCommitsBetweenRevisionsWithPaging(self): |
- def _MockSendRequestForJsonResponse(*args, **_): |
- url = args[1] |
- if '0..3' in url: |
- return { |
- 'log': [ |
- {'commit': '3'}, |
- {'commit': '2'} |
- ], |
- 'next': '1' |
- } |
- else: |
- return { |
- 'log': [ |
- {'commit': '1'} |
- ] |
- } |
- |
- self.mock(git_repository.GitRepository, '_SendRequestForJsonResponse', |
- _MockSendRequestForJsonResponse) |
- expected_commits = ['3', '2', '1'] |
- actual_commits = self.git_repo.GetCommitsBetweenRevisions('0', '3', n=2) |
- self.assertEqual(expected_commits, actual_commits) |
- |
- def testGetChangeLogs(self): |
- def _MockSendRequestForJsonResponse(*_, **kargs): |
- self.assertTrue(bool(kargs)) |
- return {'log': [json.loads(COMMIT_LOG[5:])]} |
- |
- self.mock(git_repository.GitRepository, '_SendRequestForJsonResponse', |
- _MockSendRequestForJsonResponse) |
- |
- changelogs = self.git_repo.GetChangeLogs('0', '2') |
- |
- self.assertEqual(len(changelogs), 1) |
- self.assertEqual(changelogs[0].ToDict(), EXPECTED_CHANGE_LOG_JSON) |
- |
- def testGetChangeLogsNextPage(self): |
- log1 = json.loads(COMMIT_LOG[5:]) |
- log1['commit'] = 'first_commit' |
- log2 = log1.copy() |
- log2['commit'] = 'next_page_commit' |
- |
- def _MockSendRequestForJsonResponse(_, url, **kargs): |
- self.assertTrue(bool(kargs)) |
- if 'next' in url: |
- return {'log': [log2]} |
- |
- return {'log': [log1], 'next': 'next_page_commit'} |
- |
- self.mock(git_repository.GitRepository, '_SendRequestForJsonResponse', |
- _MockSendRequestForJsonResponse) |
- |
- changelogs = self.git_repo.GetChangeLogs('0', '2') |
- |
- self.assertEqual(len(changelogs), 2) |
- |
- def testGetWrappedGitRepositoryClass(self): |
- repo = git_repository.GitRepository('http://repo_url', HttpClientForGit()) |
- |
- self.assertEqual(repo.repo_url, 'http://repo_url') |
- self.assertTrue(isinstance(repo.http_client, HttpClientForGit)) |