Changeset View
Changeset View
Standalone View
Standalone View
swh/web/tests/browse/views/test_release.py
# Copyright (C) 2018-2020 The Software Heritage developers | # Copyright (C) 2018-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 | ||||
import random | import random | ||||
import textwrap | import textwrap | ||||
from django.utils.html import escape | |||||
from hypothesis import given | from hypothesis import given | ||||
from swh.web.common.identifiers import get_swh_persistent_id | from swh.web.common.identifiers import get_swh_persistent_id | ||||
from swh.web.common.utils import reverse, format_utc_iso_date | from swh.web.common.utils import reverse, format_utc_iso_date | ||||
from swh.web.tests.django_asserts import assert_contains, assert_template_used | from swh.web.tests.django_asserts import assert_contains, assert_template_used | ||||
from swh.web.tests.strategies import release, origin_with_releases, unknown_release | from swh.web.tests.strategies import release, origin_with_releases, unknown_release | ||||
@given(release()) | @given(release()) | ||||
def test_release_browse(client, archive_data, release): | def test_release_browse(client, archive_data, release): | ||||
url = reverse("browse-release", url_args={"sha1_git": release}) | _release_browse_checks(client, release, archive_data) | ||||
release_data = archive_data.release_get(release) | |||||
resp = client.get(url) | |||||
_release_browse_checks(resp, release_data, archive_data) | |||||
@given(origin_with_releases()) | @given(origin_with_releases()) | ||||
def test_release_browse_with_origin(client, archive_data, origin): | def test_release_browse_with_origin_snapshot(client, archive_data, origin): | ||||
snapshot = archive_data.snapshot_get_latest(origin["url"]) | snapshot = archive_data.snapshot_get_latest(origin["url"]) | ||||
release = random.choice( | release = random.choice( | ||||
[b for b in snapshot["branches"].values() if b["target_type"] == "release"] | [ | ||||
) | b["target"] | ||||
url = reverse( | for b in snapshot["branches"].values() | ||||
"browse-release", | if b["target_type"] == "release" | ||||
url_args={"sha1_git": release["target"]}, | ] | ||||
query_params={"origin_url": origin["url"]}, | |||||
) | ) | ||||
release_data = archive_data.release_get(release["target"]) | _release_browse_checks(client, release, archive_data, origin_url=origin["url"]) | ||||
_release_browse_checks(client, release, archive_data, snapshot_id=snapshot["id"]) | |||||
resp = client.get(url) | _release_browse_checks( | ||||
client, | |||||
_release_browse_checks(resp, release_data, archive_data, origin) | release, | ||||
archive_data, | |||||
origin_url=origin["url"], | |||||
snapshot_id=snapshot["id"], | |||||
) | |||||
@given(unknown_release()) | @given(unknown_release()) | ||||
def test_release_browse_not_found(client, archive_data, unknown_release): | def test_release_browse_not_found(client, archive_data, unknown_release): | ||||
url = reverse("browse-release", url_args={"sha1_git": unknown_release}) | url = reverse("browse-release", url_args={"sha1_git": unknown_release}) | ||||
resp = client.get(url) | resp = client.get(url) | ||||
assert resp.status_code == 404 | assert resp.status_code == 404 | ||||
assert_template_used(resp, "error.html") | assert_template_used(resp, "error.html") | ||||
Show All 10 Lines | def test_release_uppercase(client, release): | ||||
resp = client.get(url) | resp = client.get(url) | ||||
assert resp.status_code == 302 | assert resp.status_code == 302 | ||||
redirect_url = reverse("browse-release", url_args={"sha1_git": release}) | redirect_url = reverse("browse-release", url_args={"sha1_git": release}) | ||||
assert resp["location"] == redirect_url | assert resp["location"] == redirect_url | ||||
def _release_browse_checks(resp, release_data, archive_data, origin_info=None): | def _release_browse_checks( | ||||
query_params = {} | client, release, archive_data, origin_url=None, snapshot_id=None | ||||
if origin_info: | ): | ||||
query_params["origin_url"] = origin_info["url"] | query_params = {"origin_url": origin_url, "snapshot": snapshot_id} | ||||
url = reverse( | |||||
"browse-release", url_args={"sha1_git": release}, query_params=query_params | |||||
) | |||||
release_data = archive_data.release_get(release) | |||||
resp = client.get(url) | |||||
release_id = release_data["id"] | release_id = release_data["id"] | ||||
release_name = release_data["name"] | release_name = release_data["name"] | ||||
author_name = release_data["author"]["name"] | author_name = release_data["author"]["name"] | ||||
release_date = release_data["date"] | release_date = release_data["date"] | ||||
message = release_data["message"] | message = release_data["message"] | ||||
target_type = release_data["target_type"] | target_type = release_data["target_type"] | ||||
Show All 10 Lines | ): | ||||
assert_contains(resp, format_utc_iso_date(release_date)) | assert_contains(resp, format_utc_iso_date(release_date)) | ||||
assert_contains( | assert_contains( | ||||
resp, | resp, | ||||
"<h6>%s</h6>%s" % (message_lines[0] or "None", "\n".join(message_lines[1:])), | "<h6>%s</h6>%s" % (message_lines[0] or "None", "\n".join(message_lines[1:])), | ||||
) | ) | ||||
assert_contains(resp, release_id) | assert_contains(resp, release_id) | ||||
assert_contains(resp, release_name) | assert_contains(resp, release_name) | ||||
assert_contains(resp, target_type) | assert_contains(resp, target_type) | ||||
assert_contains(resp, '<a href="%s">%s</a>' % (target_url, target)) | assert_contains(resp, '<a href="%s">%s</a>' % (escape(target_url), target)) | ||||
swh_rel_id = get_swh_persistent_id("release", release_id) | swh_rel_id = get_swh_persistent_id("release", release_id) | ||||
swh_rel_id_url = reverse("browse-swh-id", url_args={"swh_id": swh_rel_id}) | swh_rel_id_url = reverse("browse-swh-id", url_args={"swh_id": swh_rel_id}) | ||||
assert_contains(resp, swh_rel_id) | assert_contains(resp, swh_rel_id) | ||||
assert_contains(resp, swh_rel_id_url) | assert_contains(resp, swh_rel_id_url) | ||||
if origin_info: | if origin_url: | ||||
browse_origin_url = reverse( | browse_origin_url = reverse( | ||||
"browse-origin", query_params={"origin_url": origin_info["url"]} | "browse-origin", query_params={"origin_url": origin_url} | ||||
) | ) | ||||
title = ( | title = ( | ||||
f"Browse archived release for origin\n" | f"Browse archived release for origin\n" | ||||
f'<a href="{browse_origin_url}">\n' | f'<a href="{browse_origin_url}">\n' | ||||
f' {origin_info["url"]}\n' | f" {origin_url}\n" | ||||
f"</a>" | |||||
) | |||||
indent = " " * 6 | |||||
elif snapshot_id: | |||||
swh_snp_id = get_swh_persistent_id("snapshot", snapshot_id) | |||||
swh_snp_id_url = reverse("browse-swh-id", url_args={"swh_id": swh_snp_id}) | |||||
title = ( | |||||
f"Browse archived release for snapshot\n" | |||||
f'<a href="{swh_snp_id_url}">\n' | |||||
f" {swh_snp_id}\n" | |||||
f"</a>" | f"</a>" | ||||
) | ) | ||||
indent = " " * 6 | indent = " " * 6 | ||||
else: | else: | ||||
title = ( | title = ( | ||||
f"Browse archived release\n" | f"Browse archived release\n" | ||||
f'<a href="{swh_rel_id_url}">\n' | f'<a href="{swh_rel_id_url}">\n' | ||||
f" {swh_rel_id}\n" | f" {swh_rel_id}\n" | ||||
f"</a>" | f"</a>" | ||||
) | ) | ||||
indent = " " * 4 | indent = " " * 4 | ||||
assert_contains( | assert_contains( | ||||
resp, textwrap.indent(title, indent), | resp, textwrap.indent(title, indent), | ||||
) | ) | ||||
if release_data["target_type"] == "revision": | if release_data["target_type"] == "revision": | ||||
if origin_info: | if origin_url: | ||||
directory_url = reverse( | directory_url = reverse( | ||||
"browse-origin-directory", | "browse-origin-directory", | ||||
query_params={ | query_params={ | ||||
"origin_url": origin_info["url"], | "origin_url": origin_url, | ||||
"release": release_data["name"], | "release": release_data["name"], | ||||
"snapshot": snapshot_id, | |||||
}, | }, | ||||
) | ) | ||||
elif snapshot_id: | |||||
directory_url = reverse( | |||||
"browse-snapshot-directory", | |||||
url_args={"snapshot_id": snapshot_id}, | |||||
query_params={"release": release_data["name"],}, | |||||
) | |||||
else: | else: | ||||
rev = archive_data.revision_get(release_data["target"]) | rev = archive_data.revision_get(release_data["target"]) | ||||
directory_url = reverse( | directory_url = reverse( | ||||
"browse-directory", url_args={"sha1_git": rev["directory"]} | "browse-directory", url_args={"sha1_git": rev["directory"]} | ||||
) | ) | ||||
assert_contains(resp, directory_url) | assert_contains(resp, escape(directory_url)) |