Changeset View
Changeset View
Standalone View
Standalone View
swh/web/api/tests/views/test_origin.py
# Copyright (C) 2015-2021 The Software Heritage developers | # Copyright (C) 2015-2022 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 datetime import timedelta | from datetime import timedelta | ||||
import itertools | |||||
import json | import json | ||||
from hypothesis import given | from hypothesis import given | ||||
import pytest | import pytest | ||||
from swh.indexer.storage.model import OriginIntrinsicMetadataRow | from swh.indexer.storage.model import OriginIntrinsicMetadataRow | ||||
from swh.model.hashutil import hash_to_bytes | from swh.model.hashutil import hash_to_bytes | ||||
from swh.model.model import Origin, OriginVisit, OriginVisitStatus | from swh.model.model import Origin, OriginVisit, OriginVisitStatus | ||||
▲ Show 20 Lines • Show All 743 Lines • ▼ Show 20 Lines | expected_data = sorted( | ||||
for origin_url in sorted(ORIGIN_MASTER_REVISION.keys()) | for origin_url in sorted(ORIGIN_MASTER_REVISION.keys()) | ||||
], | ], | ||||
key=lambda d: d["url"], | key=lambda d: d["url"], | ||||
) | ) | ||||
assert expected_data == rv.data | assert expected_data == rv.data | ||||
@pytest.mark.parametrize( | |||||
"backend,fields", | |||||
itertools.product(["swh-search", "swh-indexer-storage"], ["url", "url,foobar"]), | |||||
) | |||||
def test_api_origin_metadata_search_url_only(api_client, mocker, backend, fields): | |||||
"""Checks that idx_storage.origin_intrinsic_metadata_get is not called when | |||||
its results are not needed""" | |||||
mocker.patch( | |||||
"swh.web.utils.archive.idx_storage.origin_intrinsic_metadata_get", | |||||
side_effect=AssertionError("origin_intrinsic_metadata_get was called"), | |||||
) | |||||
mock_config = mocker.patch("swh.web.utils.archive.config") | |||||
mock_config.get_config.return_value = { | |||||
"search_config": {"metadata_backend": backend} | |||||
} | |||||
url = reverse( | |||||
"api-1-origin-metadata-search", | |||||
query_params={"fulltext": ORIGIN_METADATA_VALUE, "fields": fields}, | |||||
) | |||||
rv = check_api_get_responses(api_client, url, status_code=200) | |||||
rv.data = sorted(rv.data, key=lambda d: d["url"]) | |||||
expected_data = sorted( | |||||
[{"url": origin_url} for origin_url in sorted(ORIGIN_MASTER_REVISION.keys())], | |||||
key=lambda d: d["url"], | |||||
) | |||||
assert expected_data == rv.data | |||||
def test_api_origin_metadata_search_limit(api_client, mocker): | def test_api_origin_metadata_search_limit(api_client, mocker): | ||||
mock_idx_storage = mocker.patch("swh.web.utils.archive.idx_storage") | mock_idx_storage = mocker.patch("swh.web.utils.archive.idx_storage") | ||||
oimsft = mock_idx_storage.origin_intrinsic_metadata_search_fulltext | oimsft = mock_idx_storage.origin_intrinsic_metadata_search_fulltext | ||||
oimsft.side_effect = lambda conjunction, limit: [ | oimsft.side_effect = lambda conjunction, limit: [ | ||||
OriginIntrinsicMetadataRow( | OriginIntrinsicMetadataRow( | ||||
id=origin_url, | id=origin_url, | ||||
from_directory=hash_to_bytes(directory), | from_directory=hash_to_bytes(directory), | ||||
▲ Show 20 Lines • Show All 129 Lines • Show Last 20 Lines |