Changeset View
Changeset View
Standalone View
Standalone View
swh/web/tests/api/views/test_content.py
# Copyright (C) 2015-2018 The Software Heritage developers | # Copyright (C) 2015-2018 The Software Heritage developers | ||||
# See the AUTHORS file at the top-level directory of this distribution | # See the AUTHORS file at the top-level directory of this distribution | ||||
# License: GNU Affero General Public License version 3, or any later version | # License: GNU Affero General Public License version 3, or any later version | ||||
# See top-level LICENSE file for more information | # See top-level LICENSE file for more information | ||||
from nose.tools import istest | |||||
from rest_framework.test import APITestCase | from rest_framework.test import APITestCase | ||||
from unittest.mock import patch, MagicMock | from unittest.mock import patch, MagicMock | ||||
from swh.web.tests.testcase import SWHWebTestCase | from swh.web.tests.testcase import SWHWebTestCase | ||||
class ContentApiTestCase(SWHWebTestCase, APITestCase): | class ContentApiTestCase(SWHWebTestCase, APITestCase): | ||||
@patch('swh.web.api.views.content.service') | @patch('swh.web.api.views.content.service') | ||||
@istest | def test_api_content_filetype(self, mock_service): | ||||
def api_content_filetype(self, mock_service): | |||||
stub_filetype = { | stub_filetype = { | ||||
'accepted_media_type': 'application/xml', | 'accepted_media_type': 'application/xml', | ||||
'encoding': 'ascii', | 'encoding': 'ascii', | ||||
'id': '34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03', | 'id': '34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03', | ||||
} | } | ||||
mock_service.lookup_content_filetype.return_value = stub_filetype | mock_service.lookup_content_filetype.return_value = stub_filetype | ||||
# when | # when | ||||
Show All 11 Lines | def test_api_content_filetype(self, mock_service): | ||||
'content_url': '/api/1/content/' | 'content_url': '/api/1/content/' | ||||
'sha1:34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03/', | 'sha1:34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03/', | ||||
}) | }) | ||||
mock_service.lookup_content_filetype.assert_called_once_with( | mock_service.lookup_content_filetype.assert_called_once_with( | ||||
'sha1_git:b04caf10e9535160d90e874b45aa426de762f19f') | 'sha1_git:b04caf10e9535160d90e874b45aa426de762f19f') | ||||
@patch('swh.web.api.views.content.service') | @patch('swh.web.api.views.content.service') | ||||
@istest | def test_api_content_filetype_sha_not_found(self, mock_service): | ||||
def api_content_filetype_sha_not_found(self, mock_service): | |||||
# given | # given | ||||
mock_service.lookup_content_filetype.return_value = None | mock_service.lookup_content_filetype.return_value = None | ||||
# when | # when | ||||
rv = self.client.get( | rv = self.client.get( | ||||
'/api/1/content/sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03/' | '/api/1/content/sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03/' | ||||
'filetype/') | 'filetype/') | ||||
# then | # then | ||||
self.assertEquals(rv.status_code, 404) | self.assertEquals(rv.status_code, 404) | ||||
self.assertEquals(rv['Content-Type'], 'application/json') | self.assertEquals(rv['Content-Type'], 'application/json') | ||||
self.assertEquals(rv.data, { | self.assertEquals(rv.data, { | ||||
'exception': 'NotFoundExc', | 'exception': 'NotFoundExc', | ||||
'reason': 'No filetype information found for content ' | 'reason': 'No filetype information found for content ' | ||||
'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03.' | 'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03.' | ||||
}) | }) | ||||
mock_service.lookup_content_filetype.assert_called_once_with( | mock_service.lookup_content_filetype.assert_called_once_with( | ||||
'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03') | 'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03') | ||||
@patch('swh.web.api.views.content.service') | @patch('swh.web.api.views.content.service') | ||||
@istest | def test_api_content_language(self, mock_service): | ||||
def api_content_language(self, mock_service): | |||||
stub_language = { | stub_language = { | ||||
'lang': 'lisp', | 'lang': 'lisp', | ||||
'id': '34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03', | 'id': '34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03', | ||||
} | } | ||||
mock_service.lookup_content_language.return_value = stub_language | mock_service.lookup_content_language.return_value = stub_language | ||||
# when | # when | ||||
rv = self.client.get( | rv = self.client.get( | ||||
Show All 9 Lines | def test_api_content_language(self, mock_service): | ||||
'content_url': '/api/1/content/' | 'content_url': '/api/1/content/' | ||||
'sha1:34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03/', | 'sha1:34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03/', | ||||
}) | }) | ||||
mock_service.lookup_content_language.assert_called_once_with( | mock_service.lookup_content_language.assert_called_once_with( | ||||
'sha1_git:b04caf10e9535160d90e874b45aa426de762f19f') | 'sha1_git:b04caf10e9535160d90e874b45aa426de762f19f') | ||||
@patch('swh.web.api.views.content.service') | @patch('swh.web.api.views.content.service') | ||||
@istest | def test_api_content_language_sha_not_found(self, mock_service): | ||||
def api_content_language_sha_not_found(self, mock_service): | |||||
# given | # given | ||||
mock_service.lookup_content_language.return_value = None | mock_service.lookup_content_language.return_value = None | ||||
# when | # when | ||||
rv = self.client.get( | rv = self.client.get( | ||||
'/api/1/content/sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03' | '/api/1/content/sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03' | ||||
'/language/') | '/language/') | ||||
# then | # then | ||||
self.assertEquals(rv.status_code, 404) | self.assertEquals(rv.status_code, 404) | ||||
self.assertEquals(rv['Content-Type'], 'application/json') | self.assertEquals(rv['Content-Type'], 'application/json') | ||||
self.assertEquals(rv.data, { | self.assertEquals(rv.data, { | ||||
'exception': 'NotFoundExc', | 'exception': 'NotFoundExc', | ||||
'reason': 'No language information found for content ' | 'reason': 'No language information found for content ' | ||||
'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03.' | 'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03.' | ||||
}) | }) | ||||
mock_service.lookup_content_language.assert_called_once_with( | mock_service.lookup_content_language.assert_called_once_with( | ||||
'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03') | 'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03') | ||||
@patch('swh.web.api.views.content.service') | @patch('swh.web.api.views.content.service') | ||||
@istest | def test_api_content_symbol(self, mock_service): | ||||
def api_content_symbol(self, mock_service): | |||||
stub_ctag = [{ | stub_ctag = [{ | ||||
'sha1': '34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03', | 'sha1': '34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03', | ||||
'name': 'foobar', | 'name': 'foobar', | ||||
'kind': 'Haskell', | 'kind': 'Haskell', | ||||
'line': 10, | 'line': 10, | ||||
}] | }] | ||||
mock_service.lookup_expression.return_value = stub_ctag | mock_service.lookup_expression.return_value = stub_ctag | ||||
Show All 20 Lines | def test_api_content_symbol(self, mock_service): | ||||
'sha1:34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03/filetype/', | 'sha1:34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03/filetype/', | ||||
}]) | }]) | ||||
self.assertFalse('Link' in rv) | self.assertFalse('Link' in rv) | ||||
mock_service.lookup_expression.assert_called_once_with( | mock_service.lookup_expression.assert_called_once_with( | ||||
'foo', 'sha1', 10) | 'foo', 'sha1', 10) | ||||
@patch('swh.web.api.views.content.service') | @patch('swh.web.api.views.content.service') | ||||
@istest | def test_api_content_symbol_2(self, mock_service): | ||||
def api_content_symbol_2(self, mock_service): | |||||
stub_ctag = [{ | stub_ctag = [{ | ||||
'sha1': '12371b8614fcd89ccd17ca2b1d9e66c5b00a6456', | 'sha1': '12371b8614fcd89ccd17ca2b1d9e66c5b00a6456', | ||||
'name': 'foobar', | 'name': 'foobar', | ||||
'kind': 'Haskell', | 'kind': 'Haskell', | ||||
'line': 10, | 'line': 10, | ||||
}, { | }, { | ||||
'sha1': '34571b8614fcd89ccd17ca2b1d9e66c5b00a6678', | 'sha1': '34571b8614fcd89ccd17ca2b1d9e66c5b00a6678', | ||||
'name': 'foo', | 'name': 'foo', | ||||
Show All 13 Lines | def test_api_content_symbol_2(self, mock_service): | ||||
self.assertTrue( | self.assertTrue( | ||||
rv['Link'] == '</api/1/content/symbol/foo/?last_sha1=34571b8614fcd89ccd17ca2b1d9e66c5b00a6678&per_page=2>; rel="next"' or # noqa | rv['Link'] == '</api/1/content/symbol/foo/?last_sha1=34571b8614fcd89ccd17ca2b1d9e66c5b00a6678&per_page=2>; rel="next"' or # noqa | ||||
rv['Link'] == '</api/1/content/symbol/foo/?per_page=2&last_sha1=34571b8614fcd89ccd17ca2b1d9e66c5b00a6678>; rel="next"' # noqa | rv['Link'] == '</api/1/content/symbol/foo/?per_page=2&last_sha1=34571b8614fcd89ccd17ca2b1d9e66c5b00a6678>; rel="next"' # noqa | ||||
) | ) | ||||
mock_service.lookup_expression.assert_called_once_with( | mock_service.lookup_expression.assert_called_once_with( | ||||
'foo', 'prev-sha1', 2) | 'foo', 'prev-sha1', 2) | ||||
@patch('swh.web.api.views.content.service') | @patch('swh.web.api.views.content.service') | ||||
# @istest | def test_api_content_symbol_3(self, mock_service): | ||||
def api_content_symbol_3(self, mock_service): | |||||
stub_ctag = [{ | stub_ctag = [{ | ||||
'sha1': '67891b8614fcd89ccd17ca2b1d9e66c5b00a6d03', | 'sha1': '67891b8614fcd89ccd17ca2b1d9e66c5b00a6d03', | ||||
'name': 'foo', | 'name': 'foo', | ||||
'kind': 'variable', | 'kind': 'variable', | ||||
'line': 100, | 'line': 100, | ||||
}] | }] | ||||
mock_service.lookup_expression.return_value = stub_ctag | mock_service.lookup_expression.return_value = stub_ctag | ||||
Show All 19 Lines | def test_api_content_symbol_3(self, mock_service): | ||||
'filetype_url': '/api/1/content/' | 'filetype_url': '/api/1/content/' | ||||
'sha1:67891b8614fcd89ccd17ca2b1d9e66c5b00a6d03/filetype/', | 'sha1:67891b8614fcd89ccd17ca2b1d9e66c5b00a6d03/filetype/', | ||||
}]) | }]) | ||||
self.assertFalse(rv.has_header('Link')) | self.assertFalse(rv.has_header('Link')) | ||||
mock_service.lookup_expression.assert_called_once_with('foo', None, 10) | mock_service.lookup_expression.assert_called_once_with('foo', None, 10) | ||||
@patch('swh.web.api.views.content.service') | @patch('swh.web.api.views.content.service') | ||||
@istest | def test_api_content_symbol_not_found(self, mock_service): | ||||
def api_content_symbol_not_found(self, mock_service): | |||||
# given | # given | ||||
mock_service.lookup_expression.return_value = [] | mock_service.lookup_expression.return_value = [] | ||||
# when | # when | ||||
rv = self.client.get('/api/1/content/symbol/bar/?last_sha1=hash') | rv = self.client.get('/api/1/content/symbol/bar/?last_sha1=hash') | ||||
# then | # then | ||||
self.assertEquals(rv.status_code, 404) | self.assertEquals(rv.status_code, 404) | ||||
self.assertEquals(rv['Content-Type'], 'application/json') | self.assertEquals(rv['Content-Type'], 'application/json') | ||||
self.assertEquals(rv.data, { | self.assertEquals(rv.data, { | ||||
'exception': 'NotFoundExc', | 'exception': 'NotFoundExc', | ||||
'reason': 'No indexed raw content match expression \'bar\'.' | 'reason': 'No indexed raw content match expression \'bar\'.' | ||||
}) | }) | ||||
self.assertFalse('Link' in rv) | self.assertFalse('Link' in rv) | ||||
mock_service.lookup_expression.assert_called_once_with( | mock_service.lookup_expression.assert_called_once_with( | ||||
'bar', 'hash', 10) | 'bar', 'hash', 10) | ||||
@patch('swh.web.api.views.content.service') | @patch('swh.web.api.views.content.service') | ||||
@istest | def test_api_content_ctags(self, mock_service): | ||||
def api_content_ctags(self, mock_service): | |||||
stub_ctags = { | stub_ctags = { | ||||
'id': '34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03', | 'id': '34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03', | ||||
'ctags': [] | 'ctags': [] | ||||
} | } | ||||
mock_service.lookup_content_ctags.return_value = stub_ctags | mock_service.lookup_content_ctags.return_value = stub_ctags | ||||
# when | # when | ||||
rv = self.client.get( | rv = self.client.get( | ||||
Show All 9 Lines | def test_api_content_ctags(self, mock_service): | ||||
'content_url': '/api/1/content/' | 'content_url': '/api/1/content/' | ||||
'sha1:34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03/', | 'sha1:34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03/', | ||||
}) | }) | ||||
mock_service.lookup_content_ctags.assert_called_once_with( | mock_service.lookup_content_ctags.assert_called_once_with( | ||||
'sha1_git:b04caf10e9535160d90e874b45aa426de762f19f') | 'sha1_git:b04caf10e9535160d90e874b45aa426de762f19f') | ||||
@patch('swh.web.api.views.content.service') | @patch('swh.web.api.views.content.service') | ||||
@istest | def test_api_content_license(self, mock_service): | ||||
def api_content_license(self, mock_service): | |||||
stub_license = { | stub_license = { | ||||
'licenses': ['No_license_found', 'Apache-2.0'], | 'licenses': ['No_license_found', 'Apache-2.0'], | ||||
'id': '34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03', | 'id': '34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03', | ||||
'tool_name': 'nomos', | 'tool_name': 'nomos', | ||||
} | } | ||||
mock_service.lookup_content_license.return_value = stub_license | mock_service.lookup_content_license.return_value = stub_license | ||||
# when | # when | ||||
Show All 11 Lines | def test_api_content_license(self, mock_service): | ||||
'content_url': '/api/1/content/' | 'content_url': '/api/1/content/' | ||||
'sha1:34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03/', | 'sha1:34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03/', | ||||
}) | }) | ||||
mock_service.lookup_content_license.assert_called_once_with( | mock_service.lookup_content_license.assert_called_once_with( | ||||
'sha1_git:b04caf10e9535160d90e874b45aa426de762f19f') | 'sha1_git:b04caf10e9535160d90e874b45aa426de762f19f') | ||||
@patch('swh.web.api.views.content.service') | @patch('swh.web.api.views.content.service') | ||||
@istest | def test_api_content_license_sha_not_found(self, mock_service): | ||||
def api_content_license_sha_not_found(self, mock_service): | |||||
# given | # given | ||||
mock_service.lookup_content_license.return_value = None | mock_service.lookup_content_license.return_value = None | ||||
# when | # when | ||||
rv = self.client.get( | rv = self.client.get( | ||||
'/api/1/content/sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03/' | '/api/1/content/sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03/' | ||||
'license/') | 'license/') | ||||
# then | # then | ||||
self.assertEquals(rv.status_code, 404) | self.assertEquals(rv.status_code, 404) | ||||
self.assertEquals(rv['Content-Type'], 'application/json') | self.assertEquals(rv['Content-Type'], 'application/json') | ||||
self.assertEquals(rv.data, { | self.assertEquals(rv.data, { | ||||
'exception': 'NotFoundExc', | 'exception': 'NotFoundExc', | ||||
'reason': 'No license information found for content ' | 'reason': 'No license information found for content ' | ||||
'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03.' | 'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03.' | ||||
}) | }) | ||||
mock_service.lookup_content_license.assert_called_once_with( | mock_service.lookup_content_license.assert_called_once_with( | ||||
'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03') | 'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03') | ||||
@patch('swh.web.api.views.content.service') | @patch('swh.web.api.views.content.service') | ||||
@istest | def test_api_content_provenance(self, mock_service): | ||||
def api_content_provenance(self, mock_service): | |||||
stub_provenances = [{ | stub_provenances = [{ | ||||
'origin': 1, | 'origin': 1, | ||||
'visit': 2, | 'visit': 2, | ||||
'revision': 'b04caf10e9535160d90e874b45aa426de762f19f', | 'revision': 'b04caf10e9535160d90e874b45aa426de762f19f', | ||||
'content': '34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03', | 'content': '34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03', | ||||
'path': 'octavio-3.4.0/octave.html/doc_002dS_005fISREG.html' | 'path': 'octavio-3.4.0/octave.html/doc_002dS_005fISREG.html' | ||||
}] | }] | ||||
mock_service.lookup_content_provenance.return_value = stub_provenances | mock_service.lookup_content_provenance.return_value = stub_provenances | ||||
Show All 20 Lines | def test_api_content_provenance(self, mock_service): | ||||
'sha1_git:34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03/', | 'sha1_git:34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03/', | ||||
'path': 'octavio-3.4.0/octave.html/doc_002dS_005fISREG.html' | 'path': 'octavio-3.4.0/octave.html/doc_002dS_005fISREG.html' | ||||
}]) | }]) | ||||
mock_service.lookup_content_provenance.assert_called_once_with( | mock_service.lookup_content_provenance.assert_called_once_with( | ||||
'sha1_git:34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03') | 'sha1_git:34571b8614fcd89ccd17ca2b1d9e66c5b00a6d03') | ||||
@patch('swh.web.api.views.content.service') | @patch('swh.web.api.views.content.service') | ||||
@istest | def test_api_content_provenance_sha_not_found(self, mock_service): | ||||
def api_content_provenance_sha_not_found(self, mock_service): | |||||
# given | # given | ||||
mock_service.lookup_content_provenance.return_value = None | mock_service.lookup_content_provenance.return_value = None | ||||
# when | # when | ||||
rv = self.client.get( | rv = self.client.get( | ||||
'/api/1/content/sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03/' | '/api/1/content/sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03/' | ||||
'provenance/') | 'provenance/') | ||||
# then | # then | ||||
self.assertEquals(rv.status_code, 404) | self.assertEquals(rv.status_code, 404) | ||||
self.assertEquals(rv['Content-Type'], 'application/json') | self.assertEquals(rv['Content-Type'], 'application/json') | ||||
self.assertEquals(rv.data, { | self.assertEquals(rv.data, { | ||||
'exception': 'NotFoundExc', | 'exception': 'NotFoundExc', | ||||
'reason': 'Content with sha1:40e71b8614fcd89ccd17ca2b1d9e6' | 'reason': 'Content with sha1:40e71b8614fcd89ccd17ca2b1d9e6' | ||||
'6c5b00a6d03 not found.' | '6c5b00a6d03 not found.' | ||||
}) | }) | ||||
mock_service.lookup_content_provenance.assert_called_once_with( | mock_service.lookup_content_provenance.assert_called_once_with( | ||||
'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03') | 'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03') | ||||
@patch('swh.web.api.views.content.service') | @patch('swh.web.api.views.content.service') | ||||
@istest | def test_api_content_metadata(self, mock_service): | ||||
def api_content_metadata(self, mock_service): | |||||
# given | # given | ||||
mock_service.lookup_content.return_value = { | mock_service.lookup_content.return_value = { | ||||
'checksums': { | 'checksums': { | ||||
'blake2s256': '685395c5dc57cada459364f0946d3dd45bad5f' | 'blake2s256': '685395c5dc57cada459364f0946d3dd45bad5f' | ||||
'cbabc1048edb44380f1d31d0aa', | 'cbabc1048edb44380f1d31d0aa', | ||||
'sha1': '40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03', | 'sha1': '40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03', | ||||
'sha1_git': 'b4e8f472ffcb01a03875b26e462eb568739f6882', | 'sha1_git': 'b4e8f472ffcb01a03875b26e462eb568739f6882', | ||||
'sha256': '83c0e67cc80f60caf1fcbec2d84b0ccd7968b3be47' | 'sha256': '83c0e67cc80f60caf1fcbec2d84b0ccd7968b3be47' | ||||
Show All 29 Lines | def test_api_content_metadata(self, mock_service): | ||||
'length': 17, | 'length': 17, | ||||
'status': 'visible' | 'status': 'visible' | ||||
}) | }) | ||||
mock_service.lookup_content.assert_called_once_with( | mock_service.lookup_content.assert_called_once_with( | ||||
'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03') | 'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03') | ||||
@patch('swh.web.api.views.content.service') | @patch('swh.web.api.views.content.service') | ||||
@istest | def test_api_content_not_found_as_json(self, mock_service): | ||||
def api_content_not_found_as_json(self, mock_service): | |||||
# given | # given | ||||
mock_service.lookup_content.return_value = None | mock_service.lookup_content.return_value = None | ||||
mock_service.lookup_content_provenance = MagicMock() | mock_service.lookup_content_provenance = MagicMock() | ||||
# when | # when | ||||
rv = self.client.get( | rv = self.client.get( | ||||
'/api/1/content/sha256:83c0e67cc80f60caf1fcbec2d84b0ccd7968b3' | '/api/1/content/sha256:83c0e67cc80f60caf1fcbec2d84b0ccd7968b3' | ||||
'be4735637006560c/') | 'be4735637006560c/') | ||||
self.assertEquals(rv.status_code, 404) | self.assertEquals(rv.status_code, 404) | ||||
self.assertEquals(rv['Content-Type'], 'application/json') | self.assertEquals(rv['Content-Type'], 'application/json') | ||||
self.assertEquals(rv.data, { | self.assertEquals(rv.data, { | ||||
'exception': 'NotFoundExc', | 'exception': 'NotFoundExc', | ||||
'reason': 'Content with sha256:83c0e67cc80f60caf1fcbec2d84b0ccd79' | 'reason': 'Content with sha256:83c0e67cc80f60caf1fcbec2d84b0ccd79' | ||||
'68b3be4735637006560c not found.' | '68b3be4735637006560c not found.' | ||||
}) | }) | ||||
mock_service.lookup_content.assert_called_once_with( | mock_service.lookup_content.assert_called_once_with( | ||||
'sha256:83c0e67cc80f60caf1fcbec2d84b0ccd7968b3' | 'sha256:83c0e67cc80f60caf1fcbec2d84b0ccd7968b3' | ||||
'be4735637006560c') | 'be4735637006560c') | ||||
mock_service.lookup_content_provenance.called = False | mock_service.lookup_content_provenance.called = False | ||||
@patch('swh.web.api.views.content.service') | @patch('swh.web.api.views.content.service') | ||||
@istest | def test_api_content_not_found_as_yaml(self, mock_service): | ||||
def api_content_not_found_as_yaml(self, mock_service): | |||||
# given | # given | ||||
mock_service.lookup_content.return_value = None | mock_service.lookup_content.return_value = None | ||||
mock_service.lookup_content_provenance = MagicMock() | mock_service.lookup_content_provenance = MagicMock() | ||||
# when | # when | ||||
rv = self.client.get( | rv = self.client.get( | ||||
'/api/1/content/sha256:83c0e67cc80f60caf1fcbec2d84b0ccd7968b3' | '/api/1/content/sha256:83c0e67cc80f60caf1fcbec2d84b0ccd7968b3' | ||||
'be4735637006560c/', | 'be4735637006560c/', | ||||
Show All 9 Lines | def test_api_content_not_found_as_yaml(self, mock_service): | ||||
}) | }) | ||||
mock_service.lookup_content.assert_called_once_with( | mock_service.lookup_content.assert_called_once_with( | ||||
'sha256:83c0e67cc80f60caf1fcbec2d84b0ccd7968b3' | 'sha256:83c0e67cc80f60caf1fcbec2d84b0ccd7968b3' | ||||
'be4735637006560c') | 'be4735637006560c') | ||||
mock_service.lookup_content_provenance.called = False | mock_service.lookup_content_provenance.called = False | ||||
@patch('swh.web.api.views.content.service') | @patch('swh.web.api.views.content.service') | ||||
@istest | def test_api_content_raw_ko_not_found(self, mock_service): | ||||
def api_content_raw_ko_not_found(self, mock_service): | |||||
# given | # given | ||||
mock_service.lookup_content_raw.return_value = None | mock_service.lookup_content_raw.return_value = None | ||||
# when | # when | ||||
rv = self.client.get( | rv = self.client.get( | ||||
'/api/1/content/sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03' | '/api/1/content/sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03' | ||||
'/raw/') | '/raw/') | ||||
self.assertEquals(rv.status_code, 404) | self.assertEquals(rv.status_code, 404) | ||||
self.assertEquals(rv['Content-Type'], 'application/json') | self.assertEquals(rv['Content-Type'], 'application/json') | ||||
self.assertEquals(rv.data, { | self.assertEquals(rv.data, { | ||||
'exception': 'NotFoundExc', | 'exception': 'NotFoundExc', | ||||
'reason': 'Content sha1:40e71b8614fcd89ccd17ca2b1d9e6' | 'reason': 'Content sha1:40e71b8614fcd89ccd17ca2b1d9e6' | ||||
'6c5b00a6d03 is not found.' | '6c5b00a6d03 is not found.' | ||||
}) | }) | ||||
mock_service.lookup_content_raw.assert_called_once_with( | mock_service.lookup_content_raw.assert_called_once_with( | ||||
'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03') | 'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03') | ||||
@patch('swh.web.api.views.content.service') | @patch('swh.web.api.views.content.service') | ||||
@istest | def test_api_content_raw_text(self, mock_service): | ||||
def api_content_raw_text(self, mock_service): | |||||
# given | # given | ||||
stub_content = {'data': b'some content data'} | stub_content = {'data': b'some content data'} | ||||
mock_service.lookup_content_raw.return_value = stub_content | mock_service.lookup_content_raw.return_value = stub_content | ||||
mock_service.lookup_content_filetype.return_value = { | mock_service.lookup_content_filetype.return_value = { | ||||
'mimetype': 'text/html' | 'mimetype': 'text/html' | ||||
} | } | ||||
# when | # when | ||||
Show All 12 Lines | def test_api_content_raw_text(self, mock_service): | ||||
self.assertEquals(rv.content, stub_content['data']) | self.assertEquals(rv.content, stub_content['data']) | ||||
mock_service.lookup_content_raw.assert_called_once_with( | mock_service.lookup_content_raw.assert_called_once_with( | ||||
'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03') | 'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03') | ||||
mock_service.lookup_content_filetype.assert_called_once_with( | mock_service.lookup_content_filetype.assert_called_once_with( | ||||
'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03') | 'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03') | ||||
@patch('swh.web.api.views.content.service') | @patch('swh.web.api.views.content.service') | ||||
@istest | def test_api_content_raw_text_with_filename(self, mock_service): | ||||
def api_content_raw_text_with_filename(self, mock_service): | |||||
# given | # given | ||||
stub_content = {'data': b'some content data'} | stub_content = {'data': b'some content data'} | ||||
mock_service.lookup_content_raw.return_value = stub_content | mock_service.lookup_content_raw.return_value = stub_content | ||||
mock_service.lookup_content_filetype.return_value = { | mock_service.lookup_content_filetype.return_value = { | ||||
'mimetype': 'text/html' | 'mimetype': 'text/html' | ||||
} | } | ||||
# when | # when | ||||
Show All 11 Lines | def test_api_content_raw_text_with_filename(self, mock_service): | ||||
self.assertEquals(rv.content, stub_content['data']) | self.assertEquals(rv.content, stub_content['data']) | ||||
mock_service.lookup_content_raw.assert_called_once_with( | mock_service.lookup_content_raw.assert_called_once_with( | ||||
'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03') | 'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03') | ||||
mock_service.lookup_content_filetype.assert_called_once_with( | mock_service.lookup_content_filetype.assert_called_once_with( | ||||
'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03') | 'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03') | ||||
@patch('swh.web.api.views.content.service') | @patch('swh.web.api.views.content.service') | ||||
@istest | def test_api_content_raw_no_accepted_media_type_text_is_not_available_for_download( # noqa | ||||
def api_content_raw_no_accepted_media_type_text_is_not_available_for_download( # noqa | |||||
self, mock_service): | self, mock_service): | ||||
# given | # given | ||||
stub_content = {'data': b'some content data'} | stub_content = {'data': b'some content data'} | ||||
mock_service.lookup_content_raw.return_value = stub_content | mock_service.lookup_content_raw.return_value = stub_content | ||||
mock_service.lookup_content_filetype.return_value = { | mock_service.lookup_content_filetype.return_value = { | ||||
'mimetype': 'application/octet-stream' | 'mimetype': 'application/octet-stream' | ||||
} | } | ||||
Show All 11 Lines | def test_api_content_raw_no_accepted_media_type_text_is_not_available_for_download( # noqa | ||||
}) | }) | ||||
mock_service.lookup_content_raw.assert_called_once_with( | mock_service.lookup_content_raw.assert_called_once_with( | ||||
'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03') | 'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03') | ||||
mock_service.lookup_content_filetype.assert_called_once_with( | mock_service.lookup_content_filetype.assert_called_once_with( | ||||
'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03') | 'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03') | ||||
@patch('swh.web.api.views.content.service') | @patch('swh.web.api.views.content.service') | ||||
@istest | def test_api_content_raw_no_accepted_media_type_found_so_not_available_for_download( # noqa | ||||
def api_content_raw_no_accepted_media_type_found_so_not_available_for_download( # noqa | |||||
self, mock_service): | self, mock_service): | ||||
# given | # given | ||||
stub_content = {'data': b'some content data'} | stub_content = {'data': b'some content data'} | ||||
mock_service.lookup_content_raw.return_value = stub_content | mock_service.lookup_content_raw.return_value = stub_content | ||||
mock_service.lookup_content_filetype.return_value = None | mock_service.lookup_content_filetype.return_value = None | ||||
# when | # when | ||||
rv = self.client.get( | rv = self.client.get( | ||||
Show All 9 Lines | def test_api_content_raw_no_accepted_media_type_found_so_not_available_for_download( # noqa | ||||
}) | }) | ||||
mock_service.lookup_content_raw.assert_called_once_with( | mock_service.lookup_content_raw.assert_called_once_with( | ||||
'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03') | 'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03') | ||||
mock_service.lookup_content_filetype.assert_called_once_with( | mock_service.lookup_content_filetype.assert_called_once_with( | ||||
'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03') | 'sha1:40e71b8614fcd89ccd17ca2b1d9e66c5b00a6d03') | ||||
@patch('swh.web.api.views.content.service') | @patch('swh.web.api.views.content.service') | ||||
@istest | def test_api_check_content_known(self, mock_service): | ||||
def api_check_content_known(self, mock_service): | |||||
# given | # given | ||||
mock_service.lookup_multiple_hashes.return_value = [ | mock_service.lookup_multiple_hashes.return_value = [ | ||||
{'found': True, | {'found': True, | ||||
'filename': None, | 'filename': None, | ||||
'sha1': 'sha1:blah'} | 'sha1': 'sha1:blah'} | ||||
] | ] | ||||
expected_result = { | expected_result = { | ||||
'search_stats': {'nbfiles': 1, 'pct': 100}, | 'search_stats': {'nbfiles': 1, 'pct': 100}, | ||||
'search_res': [{'sha1': 'sha1:blah', | 'search_res': [{'sha1': 'sha1:blah', | ||||
'found': True}] | 'found': True}] | ||||
} | } | ||||
# when | # when | ||||
rv = self.client.get('/api/1/content/known/sha1:blah/') | rv = self.client.get('/api/1/content/known/sha1:blah/') | ||||
self.assertEquals(rv.status_code, 200) | self.assertEquals(rv.status_code, 200) | ||||
self.assertEquals(rv['Content-Type'], 'application/json') | self.assertEquals(rv['Content-Type'], 'application/json') | ||||
self.assertEquals(rv.data, expected_result) | self.assertEquals(rv.data, expected_result) | ||||
mock_service.lookup_multiple_hashes.assert_called_once_with( | mock_service.lookup_multiple_hashes.assert_called_once_with( | ||||
[{'filename': None, 'sha1': 'sha1:blah'}]) | [{'filename': None, 'sha1': 'sha1:blah'}]) | ||||
@patch('swh.web.api.views.content.service') | @patch('swh.web.api.views.content.service') | ||||
@istest | def test_api_check_content_known_as_yaml(self, mock_service): | ||||
def api_check_content_known_as_yaml(self, mock_service): | |||||
# given | # given | ||||
mock_service.lookup_multiple_hashes.return_value = [ | mock_service.lookup_multiple_hashes.return_value = [ | ||||
{'found': True, | {'found': True, | ||||
'filename': None, | 'filename': None, | ||||
'sha1': 'sha1:halb'}, | 'sha1': 'sha1:halb'}, | ||||
{'found': False, | {'found': False, | ||||
'filename': None, | 'filename': None, | ||||
'sha1': 'sha1_git:hello'} | 'sha1': 'sha1_git:hello'} | ||||
Show All 15 Lines | def test_api_check_content_known_as_yaml(self, mock_service): | ||||
self.assertTrue('application/yaml' in rv['Content-Type']) | self.assertTrue('application/yaml' in rv['Content-Type']) | ||||
self.assertEquals(rv.data, expected_result) | self.assertEquals(rv.data, expected_result) | ||||
mock_service.lookup_multiple_hashes.assert_called_once_with( | mock_service.lookup_multiple_hashes.assert_called_once_with( | ||||
[{'filename': None, 'sha1': 'sha1:halb'}, | [{'filename': None, 'sha1': 'sha1:halb'}, | ||||
{'filename': None, 'sha1': 'sha1_git:hello'}]) | {'filename': None, 'sha1': 'sha1_git:hello'}]) | ||||
@patch('swh.web.api.views.content.service') | @patch('swh.web.api.views.content.service') | ||||
@istest | def test_api_check_content_known_post_as_yaml(self, mock_service): | ||||
def api_check_content_known_post_as_yaml(self, mock_service): | |||||
# given | # given | ||||
stub_result = [{'sha1': '7e62b1fe10c88a3eddbba930b156bee2956b2435', | stub_result = [{'sha1': '7e62b1fe10c88a3eddbba930b156bee2956b2435', | ||||
'found': True}, | 'found': True}, | ||||
{'filename': 'filepath', | {'filename': 'filepath', | ||||
'sha1': '8e62b1fe10c88a3eddbba930b156bee2956b2435', | 'sha1': '8e62b1fe10c88a3eddbba930b156bee2956b2435', | ||||
'found': True}, | 'found': True}, | ||||
{'filename': 'filename', | {'filename': 'filename', | ||||
'sha1': '64025b5d1520c615061842a6ce6a456cad962a3f', | 'sha1': '64025b5d1520c615061842a6ce6a456cad962a3f', | ||||
Show All 15 Lines | def test_api_check_content_known_post_as_yaml(self, mock_service): | ||||
HTTP_ACCEPT='application/yaml' | HTTP_ACCEPT='application/yaml' | ||||
) | ) | ||||
self.assertEquals(rv.status_code, 200) | self.assertEquals(rv.status_code, 200) | ||||
self.assertTrue('application/yaml' in rv['Content-Type']) | self.assertTrue('application/yaml' in rv['Content-Type']) | ||||
self.assertEquals(rv.data, expected_result) | self.assertEquals(rv.data, expected_result) | ||||
@patch('swh.web.api.views.content.service') | @patch('swh.web.api.views.content.service') | ||||
@istest | def test_api_check_content_known_not_found(self, mock_service): | ||||
def api_check_content_known_not_found(self, mock_service): | |||||
# given | # given | ||||
stub_result = [{'sha1': 'sha1:halb', | stub_result = [{'sha1': 'sha1:halb', | ||||
'found': False}] | 'found': False}] | ||||
mock_service.lookup_multiple_hashes.return_value = stub_result | mock_service.lookup_multiple_hashes.return_value = stub_result | ||||
expected_result = { | expected_result = { | ||||
'search_stats': {'nbfiles': 1, 'pct': 0.0}, | 'search_stats': {'nbfiles': 1, 'pct': 0.0}, | ||||
'search_res': stub_result | 'search_res': stub_result | ||||
Show All 11 Lines |