Changeset View
Changeset View
Standalone View
Standalone View
swh/web/tests/api/views/test_origin.py
Show All 26 Lines | from swh.web.tests.data import ( | ||||
ORIGIN_MASTER_REVISION, | ORIGIN_MASTER_REVISION, | ||||
ORIGIN_METADATA_KEY, | ORIGIN_METADATA_KEY, | ||||
ORIGIN_METADATA_VALUE, | ORIGIN_METADATA_VALUE, | ||||
) | ) | ||||
from swh.web.tests.strategies import new_origin, new_snapshots, visit_dates | from swh.web.tests.strategies import new_origin, new_snapshots, visit_dates | ||||
from swh.web.tests.utils import check_api_get_responses | from swh.web.tests.utils import check_api_get_responses | ||||
def test_api_lookup_origin_visits_raise_error(api_client, mocker): | def test_api_lookup_origin_visits_raise_error(api_client, origin, mocker): | ||||
mock_get_origin_visits = mocker.patch("swh.web.api.views.origin.get_origin_visits") | mock_get_origin_visits = mocker.patch("swh.web.api.views.origin.get_origin_visits") | ||||
err_msg = "voluntary error to check the bad request middleware." | err_msg = "voluntary error to check the bad request middleware." | ||||
mock_get_origin_visits.side_effect = BadInputExc(err_msg) | mock_get_origin_visits.side_effect = BadInputExc(err_msg) | ||||
url = reverse("api-1-origin-visits", url_args={"origin_url": "http://foo"}) | url = reverse("api-1-origin-visits", url_args={"origin_url": origin["url"]}) | ||||
rv = check_api_get_responses(api_client, url, status_code=400) | rv = check_api_get_responses(api_client, url, status_code=400) | ||||
assert rv.data == {"exception": "BadInputExc", "reason": err_msg} | assert rv.data == {"exception": "BadInputExc", "reason": err_msg} | ||||
def test_api_lookup_origin_visits_raise_swh_storage_error_db(api_client, mocker): | def test_api_lookup_origin_visits_raise_swh_storage_error_db( | ||||
api_client, origin, mocker | |||||
): | |||||
mock_get_origin_visits = mocker.patch("swh.web.api.views.origin.get_origin_visits") | mock_get_origin_visits = mocker.patch("swh.web.api.views.origin.get_origin_visits") | ||||
err_msg = "Storage exploded! Will be back online shortly!" | err_msg = "Storage exploded! Will be back online shortly!" | ||||
mock_get_origin_visits.side_effect = StorageDBError(err_msg) | mock_get_origin_visits.side_effect = StorageDBError(err_msg) | ||||
url = reverse("api-1-origin-visits", url_args={"origin_url": "http://foo"}) | url = reverse("api-1-origin-visits", url_args={"origin_url": origin["url"]}) | ||||
rv = check_api_get_responses(api_client, url, status_code=503) | rv = check_api_get_responses(api_client, url, status_code=503) | ||||
assert rv.data == { | assert rv.data == { | ||||
"exception": "StorageDBError", | "exception": "StorageDBError", | ||||
"reason": "An unexpected error occurred in the backend: %s" % err_msg, | "reason": "An unexpected error occurred in the backend: %s" % err_msg, | ||||
} | } | ||||
def test_api_lookup_origin_visits_raise_swh_storage_error_api(api_client, mocker): | def test_api_lookup_origin_visits_raise_swh_storage_error_api( | ||||
api_client, origin, mocker | |||||
): | |||||
mock_get_origin_visits = mocker.patch("swh.web.api.views.origin.get_origin_visits") | mock_get_origin_visits = mocker.patch("swh.web.api.views.origin.get_origin_visits") | ||||
err_msg = "Storage API dropped dead! Will resurrect asap!" | err_msg = "Storage API dropped dead! Will resurrect asap!" | ||||
mock_get_origin_visits.side_effect = StorageAPIError(err_msg) | mock_get_origin_visits.side_effect = StorageAPIError(err_msg) | ||||
url = reverse("api-1-origin-visits", url_args={"origin_url": "http://foo"}) | url = reverse("api-1-origin-visits", url_args={"origin_url": origin["url"]}) | ||||
rv = check_api_get_responses(api_client, url, status_code=503) | rv = check_api_get_responses(api_client, url, status_code=503) | ||||
assert rv.data == { | assert rv.data == { | ||||
"exception": "StorageAPIError", | "exception": "StorageAPIError", | ||||
"reason": "An unexpected error occurred in the api backend: %s" % err_msg, | "reason": "An unexpected error occurred in the api backend: %s" % err_msg, | ||||
} | } | ||||
@given(new_origin(), visit_dates(3), new_snapshots(3)) | @given(new_origin(), visit_dates(3), new_snapshots(3)) | ||||
▲ Show 20 Lines • Show All 757 Lines • ▼ Show 20 Lines | for visit_type in visit_types: | ||||
query_params={"visit_type": visit_type, "limit": 10000}, | query_params={"visit_type": visit_type, "limit": 10000}, | ||||
) | ) | ||||
rv = check_api_get_responses(api_client, url, status_code=200) | rv = check_api_get_responses(api_client, url, status_code=200) | ||||
assert {o["url"] for o in rv.data} == { | assert {o["url"] for o in rv.data} == { | ||||
o["url"] for o in archived_origins if o["type"] == visit_type | o["url"] for o in archived_origins if o["type"] == visit_type | ||||
} | } | ||||
@pytest.mark.parametrize( | |||||
"view_name, extra_args", | |||||
[ | |||||
("api-1-origin", {}), | |||||
("api-1-origin-visits", {}), | |||||
("api-1-origin-visit", {"visit_id": 1}), | |||||
("api-1-origin-visit-latest", {}), | |||||
("api-origin-intrinsic-metadata", {}), | |||||
], | |||||
) | |||||
def test_api_origin_by_url_with_extra_trailing_slash( | |||||
api_client, origin, view_name, extra_args | |||||
): | |||||
origin_url = origin["url"] | |||||
assert not origin_url.endswith("/") | |||||
origin_url = origin_url + "/" | |||||
url = reverse(view_name, url_args={"origin_url": origin_url, **extra_args}) | |||||
rv = check_api_get_responses(api_client, url, status_code=404) | |||||
assert rv.data == { | |||||
"exception": "NotFoundExc", | |||||
"reason": f"Origin with url {origin_url} not found!", | |||||
} |