diff --git a/swh/web/browse/snapshot_context.py b/swh/web/browse/snapshot_context.py --- a/swh/web/browse/snapshot_context.py +++ b/swh/web/browse/snapshot_context.py @@ -948,6 +948,9 @@ revision_id = snapshot_context["revision_id"] + if revision_id is None: + raise NotFoundExc("No revisions history found in the current snapshot context.") + per_page = int(request.GET.get("per_page", PER_PAGE)) offset = int(request.GET.get("offset", 0)) revs_ordering = request.GET.get("revs_ordering", "committer_date") diff --git a/swh/web/tests/browse/views/test_snapshot.py b/swh/web/tests/browse/views/test_snapshot.py --- a/swh/web/tests/browse/views/test_snapshot.py +++ b/swh/web/tests/browse/views/test_snapshot.py @@ -14,7 +14,15 @@ from django.utils.html import escape from swh.model.hashutil import hash_to_bytes -from swh.model.model import OriginVisit, OriginVisitStatus, Snapshot +from swh.model.model import ( + ObjectType, + OriginVisit, + OriginVisitStatus, + Release, + Snapshot, + SnapshotBranch, + TargetType, +) from swh.storage.utils import now from swh.web.browse.snapshot_context import process_snapshot_branches from swh.web.common.utils import reverse @@ -330,3 +338,37 @@ url = reverse("browse-snapshot-content-legacy", url_args=url_args, query_params=qry) resp = check_html_get_response(client, url, status_code=301) assert resp.url == reverse("browse-content", query_params={**url_args, **qry}) + + +def test_browse_snapshot_log_no_revisions(client, archive_data, directory): + release_name = "v1.0.0" + release = Release( + name=release_name.encode(), + message=f"release {release_name}".encode(), + target=hash_to_bytes(directory), + target_type=ObjectType.DIRECTORY, + synthetic=True, + ) + archive_data.release_add([release]) + + snapshot = Snapshot( + branches={ + b"HEAD": SnapshotBranch( + target=release_name.encode(), target_type=TargetType.ALIAS + ), + release_name.encode(): SnapshotBranch( + target=release.id, target_type=TargetType.RELEASE + ), + }, + ) + archive_data.snapshot_add([snapshot]) + + url = reverse("browse-snapshot-log", url_args={"snapshot_id": snapshot.id.hex()}) + resp = check_html_get_response( + client, url, status_code=404, template_used="error.html" + ) + assert_contains( + resp, + "No revisions history found in the current snapshot context.", + status_code=404, + )