~vcs-imports/reviewboard/trunk

« back to all changes in this revision

Viewing changes to reviewboard/diffviewer/tests/test_diffcommit_manager.py

  • Committer: David Trowbridge
  • Date: 2021-08-17 05:08:34 UTC
  • mfrom: (4677.3.232)
  • Revision ID: git-v1:8d3e7034e141704fb932064aa596548fcea20fea
Merge remote-tracking branch 'origin/release-4.0.x'

Show diffs side-by-side

added added

removed removed

Lines of Context:
5
5
import kgb
6
6
from dateutil.parser import parse as parse_date
7
7
from django.db import IntegrityError
8
 
from kgb import SpyAgency
9
8
 
10
9
from reviewboard.diffviewer.models import DiffCommit, DiffSet
 
10
from reviewboard.diffviewer.parser import DiffParser
11
11
from reviewboard.testing.testcase import TestCase
12
12
 
13
13
 
14
 
class DiffCommitManagerTests(SpyAgency, TestCase):
 
14
class DiffCommitManagerTests(kgb.SpyAgency, TestCase):
15
15
    """Unit tests for DiffCommitManager."""
16
16
 
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)
 
169
 
 
170
    def test_create_from_data_custom_parser_extra_data(self):
 
171
        """Testing DiffSetManager.create_from_data with a custom diff parser
 
172
        that sets extra_data
 
173
        """
 
174
        repository = self.create_repository(tool_name='Test')
 
175
 
 
176
        class CustomParser(DiffParser):
 
177
            def parse(self):
 
178
                result = super(CustomParser, self).parse()
 
179
 
 
180
                self.parsed_diff.extra_data = {
 
181
                    'key1': 'value1',
 
182
                }
 
183
 
 
184
                self.parsed_diff_change.extra_data = {
 
185
                    'key2': 'value2',
 
186
                }
 
187
 
 
188
                return result
 
189
 
 
190
            def parse_diff_header(self, linenum, parsed_file):
 
191
                parsed_file.extra_data = {
 
192
                    'key3': 'value3',
 
193
                }
 
194
 
 
195
                return super(CustomParser, self).parse_diff_header(
 
196
                    linenum, parsed_file)
 
197
 
 
198
        self.spy_on(repository.get_file_exists,
 
199
                    op=kgb.SpyOpReturn(True))
 
200
 
 
201
        tool = repository.get_scmtool()
 
202
 
 
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))
 
207
 
 
208
        diffset = DiffSet.objects.create_empty(
 
209
            repository=repository,
 
210
            basedir='',
 
211
            revision=1)
 
212
 
 
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'',
 
219
            request=None,
 
220
            commit_id='r1',
 
221
            parent_id='r0',
 
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',
 
227
            committer_date=None,
 
228
            commit_message='Description',
 
229
            diffset=diffset,
 
230
            validation_info={})
 
231
 
 
232
        # Test against what's in the database.
 
233
        diffset.refresh_from_db()
 
234
        diffcommit.refresh_from_db()
 
235
 
 
236
        self.assertEqual(diffset.extra_data, {
 
237
            'key1': 'value1',
 
238
        })
 
239
 
 
240
        self.assertEqual(diffcommit.extra_data, {
 
241
            'key2': 'value2',
 
242
        })
 
243
 
 
244
        self.assertEqual(diffset.files.count(), 1)
 
245
 
 
246
        filediff = diffset.files.all()[0]
 
247
        self.assertEqual(filediff.extra_data, {
 
248
            'is_symlink': False,
 
249
            'key3': 'value3',
 
250
            'raw_delete_count': 1,
 
251
            'raw_insert_count': 1,
 
252
        })