6
6
from dateutil.parser import parse as parse_date
7
7
from django.db import IntegrityError
8
from kgb import SpyAgency
10
9
from reviewboard.diffviewer.models import DiffCommit, DiffSet
10
from reviewboard.diffviewer.parser import DiffParser
11
11
from reviewboard.testing.testcase import TestCase
14
class DiffCommitManagerTests(SpyAgency, TestCase):
14
class DiffCommitManagerTests(kgb.SpyAgency, TestCase):
15
15
"""Unit tests for DiffCommitManager."""
17
17
fixtures = ['test_scmtools']
166
166
self.assertIsNone(commit.committer_date)
167
167
self.assertIsNone(commit.committer_date_utc)
168
168
self.assertIsNone(commit.committer_date_offset)
170
def test_create_from_data_custom_parser_extra_data(self):
171
"""Testing DiffSetManager.create_from_data with a custom diff parser
174
repository = self.create_repository(tool_name='Test')
176
class CustomParser(DiffParser):
178
result = super(CustomParser, self).parse()
180
self.parsed_diff.extra_data = {
184
self.parsed_diff_change.extra_data = {
190
def parse_diff_header(self, linenum, parsed_file):
191
parsed_file.extra_data = {
195
return super(CustomParser, self).parse_diff_header(
196
linenum, parsed_file)
198
self.spy_on(repository.get_file_exists,
199
op=kgb.SpyOpReturn(True))
201
tool = repository.get_scmtool()
203
self.spy_on(repository.get_scmtool,
204
op=kgb.SpyOpReturn(tool))
205
self.spy_on(tool.get_parser,
206
call_fake=lambda repo, diff: CustomParser(diff))
208
diffset = DiffSet.objects.create_empty(
209
repository=repository,
213
diffcommit = DiffCommit.objects.create_from_data(
214
repository=repository,
215
diff_file_name='diff',
216
diff_file_contents=self.DEFAULT_FILEDIFF_DATA_DIFF,
217
parent_diff_file_name=None,
218
parent_diff_file_contents=b'',
222
author_name='Author',
223
author_email='author@example.com',
224
author_date=parse_date('2000-01-01 00:00:00-0600'),
225
committer_name='Committer',
226
committer_email='committer@example.com',
228
commit_message='Description',
232
# Test against what's in the database.
233
diffset.refresh_from_db()
234
diffcommit.refresh_from_db()
236
self.assertEqual(diffset.extra_data, {
240
self.assertEqual(diffcommit.extra_data, {
244
self.assertEqual(diffset.files.count(), 1)
246
filediff = diffset.files.all()[0]
247
self.assertEqual(filediff.extra_data, {
250
'raw_delete_count': 1,
251
'raw_insert_count': 1,