Changeset View
Changeset View
Standalone View
Standalone View
swh/web/tests/api/views/test_content.py
# Copyright (C) 2015-2019 The Software Heritage developers | # Copyright (C) 2015-2019 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 | ||||
import pytest | import pytest | ||||
from hypothesis import given | from hypothesis import given | ||||
from rest_framework.test import APITestCase | |||||
from swh.web.common.utils import reverse | from swh.web.common.utils import reverse | ||||
from swh.web.tests.data import random_content | from swh.web.tests.data import random_content | ||||
from swh.web.tests.strategies import ( | from swh.web.tests.strategies import content, contents_with_ctags | ||||
content, contents_with_ctags | from swh.web.tests.conftest import ctags_json_missing, fossology_missing | ||||
) | |||||
from swh.web.tests.testcase import ( | |||||
WebTestCase, ctags_json_missing, fossology_missing | |||||
) | |||||
class ContentApiTestCase(WebTestCase, APITestCase): | |||||
@given(content()) | @given(content()) | ||||
def test_api_content_filetype(self, content): | def test_api_content_filetype(api_client, indexer_data, content): | ||||
indexer_data.content_add_mimetype(content['sha1']) | |||||
self.content_add_mimetype(content['sha1']) | |||||
url = reverse('api-1-content-filetype', | url = reverse('api-1-content-filetype', | ||||
url_args={'q': 'sha1_git:%s' % content['sha1_git']}) | url_args={'q': 'sha1_git:%s' % content['sha1_git']}) | ||||
rv = self.client.get(url) | rv = api_client.get(url) | ||||
self.assertEqual(rv.status_code, 200, rv.data) | assert rv.status_code == 200, rv.data | ||||
self.assertEqual(rv['Content-Type'], 'application/json') | assert rv['Content-Type'] == 'application/json' | ||||
content_url = reverse('api-1-content', | content_url = reverse('api-1-content', | ||||
url_args={'q': 'sha1:%s' % content['sha1']}) | url_args={'q': 'sha1:%s' % content['sha1']}) | ||||
expected_data = self.content_get_mimetype(content['sha1']) | expected_data = indexer_data.content_get_mimetype(content['sha1']) | ||||
expected_data['content_url'] = content_url | expected_data['content_url'] = content_url | ||||
self.assertEqual(rv.data, expected_data) | assert rv.data == expected_data | ||||
def test_api_content_filetype_sha_not_found(self): | def test_api_content_filetype_sha_not_found(api_client): | ||||
unknown_content_ = random_content() | unknown_content_ = random_content() | ||||
url = reverse('api-1-content-filetype', | url = reverse('api-1-content-filetype', | ||||
url_args={'q': 'sha1:%s' % unknown_content_['sha1']}) | url_args={'q': 'sha1:%s' % unknown_content_['sha1']}) | ||||
rv = self.client.get(url) | rv = api_client.get(url) | ||||
self.assertEqual(rv.status_code, 404, rv.data) | assert rv.status_code == 404, rv.data | ||||
self.assertEqual(rv['Content-Type'], 'application/json') | assert rv['Content-Type'] == 'application/json' | ||||
self.assertEqual(rv.data, { | assert rv.data == { | ||||
'exception': 'NotFoundExc', | 'exception': 'NotFoundExc', | ||||
'reason': 'No filetype information found for content ' | 'reason': 'No filetype information found for content ' | ||||
'sha1:%s.' % unknown_content_['sha1'] | 'sha1:%s.' % unknown_content_['sha1'] | ||||
}) | } | ||||
@pytest.mark.xfail # Language indexer is disabled | |||||
@given(content()) | |||||
def test_api_content_language(self, content): | |||||
self.content_add_language(content['sha1']) | @pytest.mark.skip # Language indexer is disabled | ||||
@given(content()) | |||||
def test_api_content_language(api_client, indexer_data, content): | |||||
indexer_data.content_add_language(content['sha1']) | |||||
url = reverse('api-1-content-language', | url = reverse('api-1-content-language', | ||||
url_args={'q': 'sha1_git:%s' % content['sha1_git']}) | url_args={'q': 'sha1_git:%s' % content['sha1_git']}) | ||||
rv = self.client.get(url) | rv = api_client.get(url) | ||||
self.assertEqual(rv.status_code, 200, rv.data) | assert rv.status_code == 200, rv.data | ||||
self.assertEqual(rv['Content-Type'], 'application/json') | assert rv['Content-Type'] == 'application/json' | ||||
content_url = reverse('api-1-content', | content_url = reverse('api-1-content', | ||||
url_args={'q': 'sha1:%s' % content['sha1']}) | url_args={'q': 'sha1:%s' % content['sha1']}) | ||||
expected_data = self.content_get_language(content['sha1']) | expected_data = indexer_data.content_get_language(content['sha1']) | ||||
expected_data['content_url'] = content_url | expected_data['content_url'] = content_url | ||||
self.assertEqual(rv.data, expected_data) | assert rv.data == expected_data | ||||
def test_api_content_language_sha_not_found(self): | |||||
def test_api_content_language_sha_not_found(api_client): | |||||
unknown_content_ = random_content() | unknown_content_ = random_content() | ||||
url = reverse('api-1-content-language', | url = reverse('api-1-content-language', | ||||
url_args={'q': 'sha1:%s' % unknown_content_['sha1']}) | url_args={'q': 'sha1:%s' % unknown_content_['sha1']}) | ||||
rv = self.client.get(url) | rv = api_client.get(url) | ||||
self.assertEqual(rv.status_code, 404, rv.data) | assert rv.status_code == 404, rv.data | ||||
self.assertEqual(rv['Content-Type'], 'application/json') | assert rv['Content-Type'] == 'application/json' | ||||
self.assertEqual(rv.data, { | assert rv.data == { | ||||
'exception': 'NotFoundExc', | 'exception': 'NotFoundExc', | ||||
'reason': 'No language information found for content ' | 'reason': 'No language information found for content ' | ||||
'sha1:%s.' % unknown_content_['sha1'] | 'sha1:%s.' % unknown_content_['sha1'] | ||||
}) | } | ||||
@pytest.mark.xfail # Language indexer is disabled | @pytest.mark.skip # Language indexer is disabled | ||||
@pytest.mark.skipif(ctags_json_missing, | @pytest.mark.skipif(ctags_json_missing, | ||||
reason="requires ctags with json output support") | reason="requires ctags with json output support") | ||||
@given(contents_with_ctags()) | @given(contents_with_ctags()) | ||||
def test_api_content_symbol(self, contents_with_ctags): | def test_api_content_symbol(api_client, indexer_data, contents_with_ctags): | ||||
expected_data = {} | expected_data = {} | ||||
for content_sha1 in contents_with_ctags['sha1s']: | for content_sha1 in contents_with_ctags['sha1s']: | ||||
self.content_add_ctags(content_sha1) | indexer_data.content_add_ctags(content_sha1) | ||||
for ctag in self.content_get_ctags(content_sha1): | for ctag in indexer_data.content_get_ctags(content_sha1): | ||||
if ctag['name'] == contents_with_ctags['symbol_name']: | if ctag['name'] == contents_with_ctags['symbol_name']: | ||||
expected_data[content_sha1] = ctag | expected_data[content_sha1] = ctag | ||||
break | break | ||||
url = reverse('api-1-content-symbol', | url = reverse('api-1-content-symbol', | ||||
url_args={'q': contents_with_ctags['symbol_name']}, | url_args={'q': contents_with_ctags['symbol_name']}, | ||||
query_params={'per_page': 100}) | query_params={'per_page': 100}) | ||||
rv = self.client.get(url) | rv = api_client.get(url) | ||||
self.assertEqual(rv.status_code, 200, rv.data) | assert rv.status_code == 200, rv.data | ||||
self.assertEqual(rv['Content-Type'], 'application/json') | assert rv['Content-Type'] == 'application/json' | ||||
for entry in rv.data: | for entry in rv.data: | ||||
content_sha1 = entry['sha1'] | content_sha1 = entry['sha1'] | ||||
expected_entry = expected_data[content_sha1] | expected_entry = expected_data[content_sha1] | ||||
for key, view_name in (('content_url', 'api-1-content'), | for key, view_name in (('content_url', 'api-1-content'), | ||||
('data_url', 'api-1-content-raw'), | ('data_url', 'api-1-content-raw'), | ||||
('license_url', 'api-1-content-license'), | ('license_url', 'api-1-content-license'), | ||||
('language_url', 'api-1-content-language'), | ('language_url', 'api-1-content-language'), | ||||
('filetype_url', 'api-1-content-filetype')): | ('filetype_url', 'api-1-content-filetype')): | ||||
expected_entry[key] = reverse(view_name, | expected_entry[key] = reverse( | ||||
url_args={'q': 'sha1:%s' % | view_name, url_args={'q': 'sha1:%s' % content_sha1}) | ||||
content_sha1}) | |||||
expected_entry['sha1'] = content_sha1 | expected_entry['sha1'] = content_sha1 | ||||
del expected_entry['id'] | del expected_entry['id'] | ||||
self.assertEqual(entry, expected_entry) | assert entry == expected_entry | ||||
vlorentz: `assert 'Link' not in rv` | |||||
self.assertFalse('Link' in rv) | assert 'Link' not in rv | ||||
url = reverse('api-1-content-symbol', | url = reverse('api-1-content-symbol', | ||||
url_args={'q': contents_with_ctags['symbol_name']}, | url_args={'q': contents_with_ctags['symbol_name']}, | ||||
query_params={'per_page': 2}) | query_params={'per_page': 2}) | ||||
rv = self.client.get(url) | rv = api_client.get(url) | ||||
next_url = reverse('api-1-content-symbol', | next_url = reverse('api-1-content-symbol', | ||||
url_args={'q': contents_with_ctags['symbol_name']}, | url_args={'q': contents_with_ctags['symbol_name']}, | ||||
query_params={'last_sha1': rv.data[1]['sha1'], | query_params={'last_sha1': rv.data[1]['sha1'], | ||||
'per_page': 2}) | 'per_page': 2}) | ||||
self.assertEqual(rv['Link'], '<%s>; rel="next"' % next_url) | assert rv['Link'] == '<%s>; rel="next"' % next_url | ||||
def test_api_content_symbol_not_found(self): | |||||
def test_api_content_symbol_not_found(api_client): | |||||
url = reverse('api-1-content-symbol', url_args={'q': 'bar'}) | url = reverse('api-1-content-symbol', url_args={'q': 'bar'}) | ||||
rv = self.client.get(url) | rv = api_client.get(url) | ||||
self.assertEqual(rv.status_code, 404, rv.data) | assert rv.status_code == 404, rv.data | ||||
self.assertEqual(rv['Content-Type'], 'application/json') | assert rv['Content-Type'] == 'application/json' | ||||
self.assertEqual(rv.data, { | assert rv.data == { | ||||
'exception': 'NotFoundExc', | 'exception': 'NotFoundExc', | ||||
'reason': 'No indexed raw content match expression \'bar\'.' | 'reason': 'No indexed raw content match expression \'bar\'.' | ||||
}) | } | ||||
Not Done Inline Actionssame vlorentz: same | |||||
self.assertFalse('Link' in rv) | assert 'Link' not in rv | ||||
@pytest.mark.skipif(ctags_json_missing, | @pytest.mark.skipif(ctags_json_missing, | ||||
reason="requires ctags with json output support") | reason="requires ctags with json output support") | ||||
@given(content()) | @given(content()) | ||||
def test_api_content_ctags(self, content): | def test_api_content_ctags(api_client, indexer_data, content): | ||||
indexer_data.content_add_ctags(content['sha1']) | |||||
self.content_add_ctags(content['sha1']) | |||||
url = reverse('api-1-content-ctags', | url = reverse('api-1-content-ctags', | ||||
url_args={'q': 'sha1_git:%s' % content['sha1_git']}) | url_args={'q': 'sha1_git:%s' % content['sha1_git']}) | ||||
rv = self.client.get(url) | rv = api_client.get(url) | ||||
self.assertEqual(rv.status_code, 200, rv.data) | assert rv.status_code == 200, rv.data | ||||
self.assertEqual(rv['Content-Type'], 'application/json') | assert rv['Content-Type'] == 'application/json' | ||||
content_url = reverse('api-1-content', | content_url = reverse('api-1-content', | ||||
url_args={'q': 'sha1:%s' % content['sha1']}) | url_args={'q': 'sha1:%s' % content['sha1']}) | ||||
expected_data = list(self.content_get_ctags(content['sha1'])) | expected_data = list(indexer_data.content_get_ctags(content['sha1'])) | ||||
for e in expected_data: | for e in expected_data: | ||||
e['content_url'] = content_url | e['content_url'] = content_url | ||||
self.assertEqual(rv.data, expected_data) | assert rv.data == expected_data | ||||
@pytest.mark.skipif(fossology_missing, | @pytest.mark.skipif(fossology_missing, | ||||
reason="requires fossology-nomossa installed") | reason="requires fossology-nomossa installed") | ||||
@given(content()) | @given(content()) | ||||
def test_api_content_license(self, content): | def test_api_content_license(api_client, indexer_data, content): | ||||
indexer_data.content_add_license(content['sha1']) | |||||
self.content_add_license(content['sha1']) | |||||
url = reverse('api-1-content-license', | url = reverse('api-1-content-license', | ||||
url_args={'q': 'sha1_git:%s' % content['sha1_git']}) | url_args={'q': 'sha1_git:%s' % content['sha1_git']}) | ||||
rv = self.client.get(url) | rv = api_client.get(url) | ||||
self.assertEqual(rv.status_code, 200, rv.data) | assert rv.status_code == 200, rv.data | ||||
self.assertEqual(rv['Content-Type'], 'application/json') | assert rv['Content-Type'] == 'application/json' | ||||
content_url = reverse('api-1-content', | content_url = reverse('api-1-content', | ||||
url_args={'q': 'sha1:%s' % content['sha1']}) | url_args={'q': 'sha1:%s' % content['sha1']}) | ||||
expected_data = self.content_get_license(content['sha1']) | expected_data = indexer_data.content_get_license(content['sha1']) | ||||
expected_data['content_url'] = content_url | expected_data['content_url'] = content_url | ||||
self.assertEqual(rv.data, expected_data) | assert rv.data == expected_data | ||||
def test_api_content_license_sha_not_found(self): | def test_api_content_license_sha_not_found(api_client): | ||||
unknown_content_ = random_content() | unknown_content_ = random_content() | ||||
url = reverse('api-1-content-license', | url = reverse('api-1-content-license', | ||||
url_args={'q': 'sha1:%s' % unknown_content_['sha1']}) | url_args={'q': 'sha1:%s' % unknown_content_['sha1']}) | ||||
rv = self.client.get(url) | rv = api_client.get(url) | ||||
self.assertEqual(rv.status_code, 404, rv.data) | assert rv.status_code == 404, rv.data | ||||
self.assertEqual(rv['Content-Type'], 'application/json') | assert rv['Content-Type'] == 'application/json' | ||||
self.assertEqual(rv.data, { | assert rv.data == { | ||||
'exception': 'NotFoundExc', | 'exception': 'NotFoundExc', | ||||
'reason': 'No license information found for content ' | 'reason': 'No license information found for content ' | ||||
'sha1:%s.' % unknown_content_['sha1'] | 'sha1:%s.' % unknown_content_['sha1'] | ||||
}) | } | ||||
@given(content()) | |||||
def test_api_content_metadata(self, content): | |||||
@given(content()) | |||||
def test_api_content_metadata(api_client, archive_data, content): | |||||
url = reverse('api-1-content', {'q': 'sha1:%s' % content['sha1']}) | url = reverse('api-1-content', {'q': 'sha1:%s' % content['sha1']}) | ||||
rv = self.client.get(url) | rv = api_client.get(url) | ||||
self.assertEqual(rv.status_code, 200, rv.data) | assert rv.status_code == 200, rv.data | ||||
self.assertEqual(rv['Content-Type'], 'application/json') | assert rv['Content-Type'] == 'application/json' | ||||
expected_data = self.content_get_metadata(content['sha1']) | expected_data = archive_data.content_get_metadata(content['sha1']) | ||||
for key, view_name in (('data_url', 'api-1-content-raw'), | for key, view_name in (('data_url', 'api-1-content-raw'), | ||||
('license_url', 'api-1-content-license'), | ('license_url', 'api-1-content-license'), | ||||
('language_url', 'api-1-content-language'), | ('language_url', 'api-1-content-language'), | ||||
('filetype_url', 'api-1-content-filetype')): | ('filetype_url', 'api-1-content-filetype')): | ||||
expected_data[key] = reverse(view_name, | expected_data[key] = reverse( | ||||
url_args={'q': 'sha1:%s' % | view_name, url_args={'q': 'sha1:%s' % content['sha1']}) | ||||
content['sha1']}) | assert rv.data == expected_data | ||||
self.assertEqual(rv.data, expected_data) | |||||
def test_api_content_not_found_as_json(self): | |||||
def test_api_content_not_found_as_json(api_client): | |||||
unknown_content_ = random_content() | unknown_content_ = random_content() | ||||
url = reverse('api-1-content', | url = reverse('api-1-content', | ||||
url_args={'q': 'sha1:%s' % unknown_content_['sha1']}) | url_args={'q': 'sha1:%s' % unknown_content_['sha1']}) | ||||
rv = self.client.get(url) | rv = api_client.get(url) | ||||
self.assertEqual(rv.status_code, 404, rv.data) | assert rv.status_code == 404, rv.data | ||||
self.assertEqual(rv['Content-Type'], 'application/json') | assert rv['Content-Type'] == 'application/json' | ||||
self.assertEqual(rv.data, { | assert rv.data == { | ||||
'exception': 'NotFoundExc', | 'exception': 'NotFoundExc', | ||||
'reason': 'Content with sha1 checksum equals to %s not found!' | 'reason': 'Content with sha1 checksum equals to %s not found!' | ||||
% unknown_content_['sha1'] | % unknown_content_['sha1'] | ||||
}) | } | ||||
def test_api_content_not_found_as_yaml(self): | |||||
def test_api_content_not_found_as_yaml(api_client): | |||||
unknown_content_ = random_content() | unknown_content_ = random_content() | ||||
url = reverse('api-1-content', | url = reverse('api-1-content', | ||||
url_args={'q': 'sha256:%s' % unknown_content_['sha256']}) | url_args={'q': 'sha256:%s' % unknown_content_['sha256']}) | ||||
rv = self.client.get(url, HTTP_ACCEPT='application/yaml') | rv = api_client.get(url, HTTP_ACCEPT='application/yaml') | ||||
self.assertEqual(rv.status_code, 404, rv.data) | assert rv.status_code == 404, rv.data | ||||
self.assertTrue('application/yaml' in rv['Content-Type']) | assert 'application/yaml' in rv['Content-Type'] | ||||
self.assertEqual(rv.data, { | assert rv.data == { | ||||
'exception': 'NotFoundExc', | 'exception': 'NotFoundExc', | ||||
'reason': 'Content with sha256 checksum equals to %s not found!' % | 'reason': 'Content with sha256 checksum equals to %s not found!' % | ||||
unknown_content_['sha256'] | unknown_content_['sha256'] | ||||
}) | } | ||||
def test_api_content_raw_ko_not_found(self): | def test_api_content_raw_ko_not_found(api_client): | ||||
unknown_content_ = random_content() | unknown_content_ = random_content() | ||||
url = reverse('api-1-content-raw', | url = reverse('api-1-content-raw', | ||||
url_args={'q': 'sha1:%s' % unknown_content_['sha1']}) | url_args={'q': 'sha1:%s' % unknown_content_['sha1']}) | ||||
rv = self.client.get(url) | rv = api_client.get(url) | ||||
self.assertEqual(rv.status_code, 404, rv.data) | assert rv.status_code == 404, rv.data | ||||
self.assertEqual(rv['Content-Type'], 'application/json') | assert rv['Content-Type'] == 'application/json' | ||||
self.assertEqual(rv.data, { | assert rv.data == { | ||||
'exception': 'NotFoundExc', | 'exception': 'NotFoundExc', | ||||
'reason': 'Content with sha1 checksum equals to %s not found!' % | 'reason': 'Content with sha1 checksum equals to %s not found!' % | ||||
unknown_content_['sha1'] | unknown_content_['sha1'] | ||||
}) | } | ||||
@given(content()) | |||||
def test_api_content_raw_text(self, content): | |||||
@given(content()) | |||||
def test_api_content_raw_text(api_client, archive_data, content): | |||||
url = reverse('api-1-content-raw', | url = reverse('api-1-content-raw', | ||||
url_args={'q': 'sha1:%s' % content['sha1']}) | url_args={'q': 'sha1:%s' % content['sha1']}) | ||||
rv = self.client.get(url) | rv = api_client.get(url) | ||||
self.assertEqual(rv.status_code, 200) | assert rv.status_code == 200, rv.data | ||||
self.assertEqual(rv['Content-Type'], 'application/octet-stream') | assert rv['Content-Type'] == 'application/octet-stream' | ||||
self.assertEqual( | assert rv['Content-disposition'] == \ | ||||
rv['Content-disposition'], | 'attachment; filename=content_sha1_%s_raw' % content['sha1'] | ||||
'attachment; filename=content_sha1_%s_raw' % content['sha1']) | assert rv['Content-Type'] == 'application/octet-stream' | ||||
self.assertEqual( | expected_data = archive_data.content_get(content['sha1']) | ||||
rv['Content-Type'], 'application/octet-stream') | assert rv.content == expected_data['data'] | ||||
expected_data = self.content_get(content['sha1']) | |||||
self.assertEqual(rv.content, expected_data['data']) | |||||
@given(content()) | |||||
def test_api_content_raw_text_with_filename(self, content): | |||||
@given(content()) | |||||
def test_api_content_raw_text_with_filename(api_client, archive_data, content): | |||||
url = reverse('api-1-content-raw', | url = reverse('api-1-content-raw', | ||||
url_args={'q': 'sha1:%s' % content['sha1']}, | url_args={'q': 'sha1:%s' % content['sha1']}, | ||||
query_params={'filename': 'filename.txt'}) | query_params={'filename': 'filename.txt'}) | ||||
rv = self.client.get(url) | rv = api_client.get(url) | ||||
self.assertEqual(rv.status_code, 200) | assert rv.status_code == 200, rv.data | ||||
self.assertEqual(rv['Content-Type'], 'application/octet-stream') | assert rv['Content-Type'] == 'application/octet-stream' | ||||
self.assertEqual( | assert rv['Content-disposition'] == \ | ||||
rv['Content-disposition'], | 'attachment; filename=filename.txt' | ||||
'attachment; filename=filename.txt') | assert rv['Content-Type'] == 'application/octet-stream' | ||||
self.assertEqual( | expected_data = archive_data.content_get(content['sha1']) | ||||
rv['Content-Type'], 'application/octet-stream') | assert rv.content == expected_data['data'] | ||||
expected_data = self.content_get(content['sha1']) | |||||
self.assertEqual(rv.content, expected_data['data']) | |||||
@given(content()) | |||||
def test_api_check_content_known(self, content): | |||||
@given(content()) | |||||
def test_api_check_content_known(api_client, content): | |||||
url = reverse('api-1-content-known', | url = reverse('api-1-content-known', | ||||
url_args={'q': content['sha1']}) | url_args={'q': content['sha1']}) | ||||
rv = self.client.get(url) | rv = api_client.get(url) | ||||
self.assertEqual(rv.status_code, 200, rv.data) | assert rv.status_code == 200, rv.data | ||||
self.assertEqual(rv['Content-Type'], 'application/json') | assert rv['Content-Type'] == 'application/json' | ||||
self.assertEqual(rv.data, { | assert rv.data == { | ||||
'search_res': [ | 'search_res': [ | ||||
{ | { | ||||
'found': True, | 'found': True, | ||||
'sha1': content['sha1'] | 'sha1': content['sha1'] | ||||
} | } | ||||
], | ], | ||||
'search_stats': {'nbfiles': 1, 'pct': 100.0} | 'search_stats': {'nbfiles': 1, 'pct': 100.0} | ||||
}) | } | ||||
@given(content()) | |||||
def test_api_check_content_known_as_yaml(self, content): | |||||
@given(content()) | |||||
def test_api_check_content_known_as_yaml(api_client, content): | |||||
url = reverse('api-1-content-known', | url = reverse('api-1-content-known', | ||||
url_args={'q': content['sha1']}) | url_args={'q': content['sha1']}) | ||||
rv = self.client.get(url, HTTP_ACCEPT='application/yaml') | rv = api_client.get(url, HTTP_ACCEPT='application/yaml') | ||||
self.assertEqual(rv.status_code, 200, rv.data) | assert rv.status_code == 200, rv.data | ||||
self.assertEqual(rv['Content-Type'], 'application/yaml') | assert rv['Content-Type'] == 'application/yaml' | ||||
self.assertEqual(rv.data, { | assert rv.data == { | ||||
'search_res': [ | 'search_res': [ | ||||
{ | { | ||||
'found': True, | 'found': True, | ||||
'sha1': content['sha1'] | 'sha1': content['sha1'] | ||||
} | } | ||||
], | ], | ||||
'search_stats': {'nbfiles': 1, 'pct': 100.0} | 'search_stats': {'nbfiles': 1, 'pct': 100.0} | ||||
}) | } | ||||
@given(content()) | |||||
def test_api_check_content_known_post_as_yaml(self, content): | |||||
@given(content()) | |||||
def test_api_check_content_known_post_as_yaml(api_client, content): | |||||
url = reverse('api-1-content-known') | url = reverse('api-1-content-known') | ||||
rv = self.client.post( | rv = api_client.post(url, data={'q': content['sha1']}, | ||||
url, | HTTP_ACCEPT='application/yaml') | ||||
data={ | |||||
'q': content['sha1'] | assert rv.status_code == 200, rv.data | ||||
}, | assert 'application/yaml' in rv['Content-Type'] | ||||
HTTP_ACCEPT='application/yaml' | assert rv.data == { | ||||
) | |||||
self.assertEqual(rv.status_code, 200, rv.data) | |||||
self.assertTrue('application/yaml' in rv['Content-Type']) | |||||
self.assertEqual(rv.data, { | |||||
'search_res': [ | 'search_res': [ | ||||
{ | { | ||||
'found': True, | 'found': True, | ||||
'sha1': content['sha1'] | 'sha1': content['sha1'] | ||||
} | } | ||||
], | ], | ||||
'search_stats': {'nbfiles': 1, 'pct': 100.0} | 'search_stats': {'nbfiles': 1, 'pct': 100.0} | ||||
}) | } | ||||
def test_api_check_content_known_not_found(self): | def test_api_check_content_known_not_found(api_client): | ||||
unknown_content_ = random_content() | unknown_content_ = random_content() | ||||
url = reverse('api-1-content-known', | url = reverse('api-1-content-known', | ||||
url_args={'q': unknown_content_['sha1']}) | url_args={'q': unknown_content_['sha1']}) | ||||
rv = self.client.get(url) | rv = api_client.get(url) | ||||
self.assertEqual(rv.status_code, 200, rv.data) | assert rv.status_code == 200, rv.data | ||||
self.assertEqual(rv['Content-Type'], 'application/json') | assert rv['Content-Type'] == 'application/json' | ||||
self.assertEqual(rv.data, { | assert rv.data == { | ||||
'search_res': [ | 'search_res': [ | ||||
{ | { | ||||
'found': False, | 'found': False, | ||||
'sha1': unknown_content_['sha1'] | 'sha1': unknown_content_['sha1'] | ||||
} | } | ||||
], | ], | ||||
'search_stats': {'nbfiles': 1, 'pct': 0.0} | 'search_stats': {'nbfiles': 1, 'pct': 0.0} | ||||
}) | } | ||||
@given(content()) | @given(content()) | ||||
def test_api_content_uppercase(self, content): | def test_api_content_uppercase(api_client, content): | ||||
url = reverse('api-1-content-uppercase-checksum', | url = reverse('api-1-content-uppercase-checksum', | ||||
url_args={'q': content['sha1'].upper()}) | url_args={'q': content['sha1'].upper()}) | ||||
resp = self.client.get(url) | rv = api_client.get(url) | ||||
self.assertEqual(resp.status_code, 302) | assert rv.status_code == 302, rv.data | ||||
redirect_url = reverse('api-1-content', | redirect_url = reverse('api-1-content', | ||||
url_args={'q': content['sha1']}) | url_args={'q': content['sha1']}) | ||||
self.assertEqual(resp['location'], redirect_url) | assert rv['location'] == redirect_url |
assert 'Link' not in rv