Fix download_url when requested file is known but does not exist in the tree anymore (#11368)
This commit is contained in:
Родитель
0d4f6d0722
Коммит
1dabe26160
|
@ -159,7 +159,7 @@ This endpoint allows you to compare two Add-on versions with each other.
|
|||
.. http:get:: /api/v4/reviewers/addon/(int:addon_id)/versions/(int:version_id)/compare_to/(int:version_id)/
|
||||
|
||||
Inherits most properties from :ref:`browse detail <reviewers-versions-browse-detail>`, except that most of the `file.entries[]` properties
|
||||
can be `null` in case of a deleted file.
|
||||
and `file.download_url` can be `null` in case of a deleted file.
|
||||
|
||||
Properties specific to this endpoint:
|
||||
|
||||
|
|
|
@ -203,7 +203,12 @@ class FileEntriesSerializer(FileSerializer):
|
|||
commit = self._get_commit(obj)
|
||||
tree = self.repo.get_root_tree(commit)
|
||||
selected_file = self.get_selected_file(obj)
|
||||
blob_or_tree = tree[selected_file]
|
||||
|
||||
try:
|
||||
blob_or_tree = tree[selected_file]
|
||||
except KeyError:
|
||||
# This can happen when the file has been deleted.
|
||||
return None
|
||||
|
||||
if blob_or_tree.type == 'tree':
|
||||
return None
|
||||
|
|
|
@ -286,6 +286,23 @@ class TestFileEntriesDiffSerializer(TestCase):
|
|||
assert readme_data['size'] is None
|
||||
assert readme_data['modified'] is None
|
||||
|
||||
def test_serialize_deleted_file(self):
|
||||
parent_version = self.addon.current_version
|
||||
new_version = version_factory(
|
||||
addon=self.addon, file_kw={
|
||||
'filename': 'webextension_no_id.xpi',
|
||||
'is_webextension': True,
|
||||
}
|
||||
)
|
||||
|
||||
repo = AddonGitRepository.extract_and_commit_from_version(new_version)
|
||||
apply_changes(repo, new_version, '', 'manifest.json', delete=True)
|
||||
|
||||
file = self.addon.current_version.current_file
|
||||
data = self.serialize(file, parent_version=parent_version)
|
||||
|
||||
assert data['download_url'] is None
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
'entry, filename, expected_category, expected_mimetype',
|
||||
|
|
|
@ -5726,6 +5726,29 @@ class TestReviewAddonVersionCompareViewSet(
|
|||
}
|
||||
]
|
||||
|
||||
def test_get_deleted_file(self):
|
||||
new_version = version_factory(
|
||||
addon=self.addon, file_kw={'filename': 'webextension_no_id.xpi'})
|
||||
|
||||
repo = AddonGitRepository.extract_and_commit_from_version(new_version)
|
||||
|
||||
deleted_file = 'README.md'
|
||||
apply_changes(repo, new_version, '', deleted_file, delete=True)
|
||||
|
||||
user = UserProfile.objects.create(username='reviewer')
|
||||
self.grant_permission(user, 'Addons:Review')
|
||||
self.client.login_api(user)
|
||||
|
||||
self.url = reverse_ns('reviewers-versions-compare-detail', kwargs={
|
||||
'addon_pk': self.addon.pk,
|
||||
'version_pk': self.version.pk,
|
||||
'pk': new_version.pk})
|
||||
|
||||
response = self.client.get(self.url + '?file=' + deleted_file)
|
||||
assert response.status_code == 200
|
||||
result = json.loads(response.content)
|
||||
assert result['file']['download_url'] is None
|
||||
|
||||
|
||||
class TestDownloadGitFileView(TestCase):
|
||||
def setUp(self):
|
||||
|
|
Загрузка…
Ссылка в новой задаче