Changeset View
Changeset View
Standalone View
Standalone View
swh/web/tests/misc/test_badges.py
# Copyright (C) 2019-2020 The Software Heritage developers | # Copyright (C) 2019-2020 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 corsheaders.middleware import ACCESS_CONTROL_ALLOW_ORIGIN | from corsheaders.middleware import ACCESS_CONTROL_ALLOW_ORIGIN | ||||
from hypothesis import given | from hypothesis import given | ||||
from swh.model.identifiers import ( | from swh.model.identifiers import ( | ||||
persistent_identifier, | swhid, | ||||
CONTENT, | CONTENT, | ||||
DIRECTORY, | DIRECTORY, | ||||
ORIGIN, | ORIGIN, | ||||
RELEASE, | RELEASE, | ||||
REVISION, | REVISION, | ||||
SNAPSHOT, | SNAPSHOT, | ||||
) | ) | ||||
from swh.web.common import service | from swh.web.common import service | ||||
from swh.web.common.identifiers import resolve_swh_persistent_id | from swh.web.common.identifiers import resolve_swhid | ||||
from swh.web.common.utils import reverse | from swh.web.common.utils import reverse | ||||
from swh.web.misc.badges import _badge_config, _get_logo_data | from swh.web.misc.badges import _badge_config, _get_logo_data | ||||
from swh.web.tests.django_asserts import assert_contains | from swh.web.tests.django_asserts import assert_contains | ||||
from swh.web.tests.strategies import ( | from swh.web.tests.strategies import ( | ||||
content, | content, | ||||
directory, | directory, | ||||
origin, | origin, | ||||
release, | release, | ||||
▲ Show 20 Lines • Show All 67 Lines • ▼ Show 20 Lines | for object_type, object_id in ( | ||||
(SNAPSHOT, unknown_snapshot), | (SNAPSHOT, unknown_snapshot), | ||||
): | ): | ||||
url_args = {"object_type": object_type, "object_id": object_id} | url_args = {"object_type": object_type, "object_id": object_id} | ||||
url = reverse("swh-badge", url_args=url_args) | url = reverse("swh-badge", url_args=url_args) | ||||
resp = client.get(url) | resp = client.get(url) | ||||
_check_generated_badge(resp, **url_args, error="not found") | _check_generated_badge(resp, **url_args, error="not found") | ||||
if object_type != ORIGIN: | if object_type != ORIGIN: | ||||
object_pid = persistent_identifier(object_type, object_id) | object_swhid = swhid(object_type, object_id) | ||||
url = reverse("swh-badge-pid", url_args={"object_pid": object_pid}) | url = reverse("swh-badge-swhid", url_args={"object_swhid": object_swhid}) | ||||
resp = client.get(url) | resp = client.get(url) | ||||
_check_generated_badge(resp, **url_args, error="not found") | _check_generated_badge(resp, **url_args, error="not found") | ||||
for object_type, object_id in ( | for object_type, object_id in ( | ||||
(CONTENT, invalid_sha1), | (CONTENT, invalid_sha1), | ||||
(DIRECTORY, invalid_sha1), | (DIRECTORY, invalid_sha1), | ||||
(RELEASE, invalid_sha1), | (RELEASE, invalid_sha1), | ||||
(REVISION, invalid_sha1), | (REVISION, invalid_sha1), | ||||
(SNAPSHOT, invalid_sha1), | (SNAPSHOT, invalid_sha1), | ||||
): | ): | ||||
url_args = {"object_type": object_type, "object_id": object_id} | url_args = {"object_type": object_type, "object_id": object_id} | ||||
url = reverse("swh-badge", url_args=url_args) | url = reverse("swh-badge", url_args=url_args) | ||||
resp = client.get(url) | resp = client.get(url) | ||||
_check_generated_badge(resp, **url_args, error="invalid id") | _check_generated_badge(resp, **url_args, error="invalid id") | ||||
object_pid = f"swh:1:{object_type[:3]}:{object_id}" | object_swhid = f"swh:1:{object_type[:3]}:{object_id}" | ||||
url = reverse("swh-badge-pid", url_args={"object_pid": object_pid}) | url = reverse("swh-badge-swhid", url_args={"object_swhid": object_swhid}) | ||||
resp = client.get(url) | resp = client.get(url) | ||||
_check_generated_badge(resp, "", "", error="invalid id") | _check_generated_badge(resp, "", "", error="invalid id") | ||||
@given(origin(), release()) | @given(origin(), release()) | ||||
def test_badge_endpoints_have_cors_header(client, origin, release): | def test_badge_endpoints_have_cors_header(client, origin, release): | ||||
url = reverse( | url = reverse( | ||||
"swh-badge", url_args={"object_type": ORIGIN, "object_id": origin["url"]} | "swh-badge", url_args={"object_type": ORIGIN, "object_id": origin["url"]} | ||||
) | ) | ||||
resp = client.get(url, HTTP_ORIGIN="https://example.org") | resp = client.get(url, HTTP_ORIGIN="https://example.org") | ||||
assert resp.status_code == 200, resp.content | assert resp.status_code == 200, resp.content | ||||
assert ACCESS_CONTROL_ALLOW_ORIGIN in resp | assert ACCESS_CONTROL_ALLOW_ORIGIN in resp | ||||
release_pid = persistent_identifier(RELEASE, release) | release_swhid = swhid(RELEASE, release) | ||||
url = reverse("swh-badge-pid", url_args={"object_pid": release_pid}) | url = reverse("swh-badge-swhid", url_args={"object_swhid": release_swhid}) | ||||
resp = client.get(url, HTTP_ORIGIN="https://example.org") | resp = client.get(url, HTTP_ORIGIN="https://example.org") | ||||
assert resp.status_code == 200, resp.content | assert resp.status_code == 200, resp.content | ||||
assert ACCESS_CONTROL_ALLOW_ORIGIN in resp | assert ACCESS_CONTROL_ALLOW_ORIGIN in resp | ||||
def _test_badge_endpoints(client, object_type, object_id): | def _test_badge_endpoints(client, object_type, object_id): | ||||
url_args = {"object_type": object_type, "object_id": object_id} | url_args = {"object_type": object_type, "object_id": object_id} | ||||
url = reverse("swh-badge", url_args=url_args) | url = reverse("swh-badge", url_args=url_args) | ||||
resp = client.get(url) | resp = client.get(url) | ||||
_check_generated_badge(resp, **url_args) | _check_generated_badge(resp, **url_args) | ||||
if object_type != ORIGIN: | if object_type != ORIGIN: | ||||
pid = persistent_identifier(object_type, object_id) | obj_swhid = swhid(object_type, object_id) | ||||
url = reverse("swh-badge-pid", url_args={"object_pid": pid}) | url = reverse("swh-badge-swhid", url_args={"object_swhid": obj_swhid}) | ||||
resp = client.get(url) | resp = client.get(url) | ||||
_check_generated_badge(resp, **url_args) | _check_generated_badge(resp, **url_args) | ||||
def _check_generated_badge(response, object_type, object_id, error=None): | def _check_generated_badge(response, object_type, object_id, error=None): | ||||
assert response.status_code == 200, response.content | assert response.status_code == 200, response.content | ||||
assert response["Content-Type"] == "image/svg+xml" | assert response["Content-Type"] == "image/svg+xml" | ||||
if not object_type: | if not object_type: | ||||
object_type = "object" | object_type = "object" | ||||
if object_type == ORIGIN and error is None: | if object_type == ORIGIN and error is None: | ||||
link = reverse("browse-origin", query_params={"origin_url": object_id}) | link = reverse("browse-origin", query_params={"origin_url": object_id}) | ||||
text = "repository" | text = "repository" | ||||
elif error is None: | elif error is None: | ||||
text = persistent_identifier(object_type, object_id) | text = swhid(object_type, object_id) | ||||
link = resolve_swh_persistent_id(text)["browse_url"] | link = resolve_swhid(text)["browse_url"] | ||||
if object_type == RELEASE: | if object_type == RELEASE: | ||||
release = service.lookup_release(object_id) | release = service.lookup_release(object_id) | ||||
text = release["name"] | text = release["name"] | ||||
elif error == "invalid id": | elif error == "invalid id": | ||||
text = "error" | text = "error" | ||||
link = f"invalid {object_type} id" | link = f"invalid {object_type} id" | ||||
object_type = "error" | object_type = "error" | ||||
elif error == "not found": | elif error == "not found": | ||||
Show All 11 Lines |