Changeset View
Changeset View
Standalone View
Standalone View
swh/web/tests/browse/views/test_revision.py
# Copyright (C) 2017-2020 The Software Heritage developers | # Copyright (C) 2017-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 | ||||
from hypothesis import given | from hypothesis import given | ||||
from django.utils.html import escape | from django.utils.html import escape | ||||
from swh.model.identifiers import DIRECTORY, REVISION, SNAPSHOT | from swh.model.identifiers import DIRECTORY, REVISION, SNAPSHOT | ||||
from swh.web.common.identifiers import gen_swhid | from swh.web.common.identifiers import gen_swhid | ||||
from swh.web.common.utils import format_utc_iso_date, parse_iso8601_date_to_utc, reverse | from swh.web.common.utils import format_utc_iso_date, parse_iso8601_date_to_utc, reverse | ||||
from swh.web.tests.django_asserts import assert_contains, assert_template_used | from swh.web.tests.django_asserts import assert_contains | ||||
from swh.web.tests.strategies import new_origin, origin, revision, unknown_revision | from swh.web.tests.strategies import new_origin, origin, revision, unknown_revision | ||||
from swh.web.tests.utils import check_html_get_response | |||||
@given(revision()) | @given(revision()) | ||||
def test_revision_browse(client, archive_data, revision): | def test_revision_browse(client, archive_data, revision): | ||||
_revision_browse_checks(client, archive_data, revision) | _revision_browse_checks(client, archive_data, revision) | ||||
@given(origin()) | @given(origin()) | ||||
Show All 23 Lines | def test_revision_log_browse(client, archive_data, revision): | ||||
) | ) | ||||
url = reverse( | url = reverse( | ||||
"browse-revision-log", | "browse-revision-log", | ||||
url_args={"sha1_git": revision}, | url_args={"sha1_git": revision}, | ||||
query_params={"per_page": per_page}, | query_params={"per_page": per_page}, | ||||
) | ) | ||||
resp = client.get(url) | |||||
next_page_url = reverse( | next_page_url = reverse( | ||||
"browse-revision-log", | "browse-revision-log", | ||||
url_args={"sha1_git": revision}, | url_args={"sha1_git": revision}, | ||||
query_params={"offset": per_page, "per_page": per_page,}, | query_params={"offset": per_page, "per_page": per_page,}, | ||||
) | ) | ||||
nb_log_entries = per_page | nb_log_entries = per_page | ||||
if len(revision_log_sorted) < per_page: | if len(revision_log_sorted) < per_page: | ||||
nb_log_entries = len(revision_log_sorted) | nb_log_entries = len(revision_log_sorted) | ||||
assert resp.status_code == 200 | resp = check_html_get_response( | ||||
assert_template_used(resp, "browse/revision-log.html") | client, url, status_code=200, template_used="browse/revision-log.html" | ||||
) | |||||
assert_contains(resp, '<tr class="swh-revision-log-entry', count=nb_log_entries) | assert_contains(resp, '<tr class="swh-revision-log-entry', count=nb_log_entries) | ||||
assert_contains(resp, '<a class="page-link">Newer</a>') | assert_contains(resp, '<a class="page-link">Newer</a>') | ||||
if len(revision_log_sorted) > per_page: | if len(revision_log_sorted) > per_page: | ||||
assert_contains( | assert_contains( | ||||
resp, '<a class="page-link" href="%s">Older</a>' % escape(next_page_url), | resp, '<a class="page-link" href="%s">Older</a>' % escape(next_page_url), | ||||
) | ) | ||||
for log in revision_log_sorted[:per_page]: | for log in revision_log_sorted[:per_page]: | ||||
revision_url = reverse("browse-revision", url_args={"sha1_git": log["id"]}) | revision_url = reverse("browse-revision", url_args={"sha1_git": log["id"]}) | ||||
assert_contains(resp, log["id"][:7]) | assert_contains(resp, log["id"][:7]) | ||||
assert_contains(resp, log["author"]["name"]) | assert_contains(resp, log["author"]["name"]) | ||||
assert_contains(resp, format_utc_iso_date(log["date"])) | assert_contains(resp, format_utc_iso_date(log["date"])) | ||||
assert_contains(resp, escape(log["message"])) | assert_contains(resp, escape(log["message"])) | ||||
assert_contains(resp, format_utc_iso_date(log["committer_date"])) | assert_contains(resp, format_utc_iso_date(log["committer_date"])) | ||||
assert_contains(resp, revision_url) | assert_contains(resp, revision_url) | ||||
if len(revision_log_sorted) <= per_page: | if len(revision_log_sorted) <= per_page: | ||||
return | return | ||||
resp = client.get(next_page_url) | resp = check_html_get_response( | ||||
client, next_page_url, status_code=200, template_used="browse/revision-log.html" | |||||
) | |||||
prev_page_url = reverse( | prev_page_url = reverse( | ||||
"browse-revision-log", | "browse-revision-log", | ||||
url_args={"sha1_git": revision}, | url_args={"sha1_git": revision}, | ||||
query_params={"offset": 0, "per_page": per_page}, | query_params={"offset": 0, "per_page": per_page}, | ||||
) | ) | ||||
next_page_url = reverse( | next_page_url = reverse( | ||||
"browse-revision-log", | "browse-revision-log", | ||||
url_args={"sha1_git": revision}, | url_args={"sha1_git": revision}, | ||||
query_params={"offset": 2 * per_page, "per_page": per_page}, | query_params={"offset": 2 * per_page, "per_page": per_page}, | ||||
) | ) | ||||
nb_log_entries = len(revision_log_sorted) - per_page | nb_log_entries = len(revision_log_sorted) - per_page | ||||
if nb_log_entries > per_page: | if nb_log_entries > per_page: | ||||
nb_log_entries = per_page | nb_log_entries = per_page | ||||
assert resp.status_code == 200 | |||||
assert_template_used(resp, "browse/revision-log.html") | |||||
assert_contains(resp, '<tr class="swh-revision-log-entry', count=nb_log_entries) | assert_contains(resp, '<tr class="swh-revision-log-entry', count=nb_log_entries) | ||||
assert_contains( | assert_contains( | ||||
resp, '<a class="page-link" href="%s">Newer</a>' % escape(prev_page_url) | resp, '<a class="page-link" href="%s">Newer</a>' % escape(prev_page_url) | ||||
) | ) | ||||
if len(revision_log_sorted) > 2 * per_page: | if len(revision_log_sorted) > 2 * per_page: | ||||
assert_contains( | assert_contains( | ||||
resp, '<a class="page-link" href="%s">Older</a>' % escape(next_page_url), | resp, '<a class="page-link" href="%s">Older</a>' % escape(next_page_url), | ||||
) | ) | ||||
if len(revision_log_sorted) <= 2 * per_page: | if len(revision_log_sorted) <= 2 * per_page: | ||||
return | return | ||||
resp = client.get(next_page_url) | resp = check_html_get_response( | ||||
client, next_page_url, status_code=200, template_used="browse/revision-log.html" | |||||
) | |||||
prev_page_url = reverse( | prev_page_url = reverse( | ||||
"browse-revision-log", | "browse-revision-log", | ||||
url_args={"sha1_git": revision}, | url_args={"sha1_git": revision}, | ||||
query_params={"offset": per_page, "per_page": per_page}, | query_params={"offset": per_page, "per_page": per_page}, | ||||
) | ) | ||||
next_page_url = reverse( | next_page_url = reverse( | ||||
"browse-revision-log", | "browse-revision-log", | ||||
url_args={"sha1_git": revision}, | url_args={"sha1_git": revision}, | ||||
query_params={"offset": 3 * per_page, "per_page": per_page}, | query_params={"offset": 3 * per_page, "per_page": per_page}, | ||||
) | ) | ||||
nb_log_entries = len(revision_log_sorted) - 2 * per_page | nb_log_entries = len(revision_log_sorted) - 2 * per_page | ||||
if nb_log_entries > per_page: | if nb_log_entries > per_page: | ||||
nb_log_entries = per_page | nb_log_entries = per_page | ||||
assert resp.status_code == 200 | |||||
assert_template_used(resp, "browse/revision-log.html") | |||||
assert_contains(resp, '<tr class="swh-revision-log-entry', count=nb_log_entries) | assert_contains(resp, '<tr class="swh-revision-log-entry', count=nb_log_entries) | ||||
assert_contains( | assert_contains( | ||||
resp, '<a class="page-link" href="%s">Newer</a>' % escape(prev_page_url) | resp, '<a class="page-link" href="%s">Newer</a>' % escape(prev_page_url) | ||||
) | ) | ||||
if len(revision_log_sorted) > 3 * per_page: | if len(revision_log_sorted) > 3 * per_page: | ||||
assert_contains( | assert_contains( | ||||
resp, '<a class="page-link" href="%s">Older</a>' % escape(next_page_url), | resp, '<a class="page-link" href="%s">Older</a>' % escape(next_page_url), | ||||
) | ) | ||||
@given(revision(), unknown_revision(), new_origin()) | @given(revision(), unknown_revision(), new_origin()) | ||||
def test_revision_request_errors(client, revision, unknown_revision, new_origin): | def test_revision_request_errors(client, revision, unknown_revision, new_origin): | ||||
url = reverse("browse-revision", url_args={"sha1_git": unknown_revision}) | url = reverse("browse-revision", url_args={"sha1_git": unknown_revision}) | ||||
resp = client.get(url) | |||||
assert resp.status_code == 404 | resp = check_html_get_response( | ||||
assert_template_used(resp, "error.html") | client, url, status_code=404, template_used="error.html" | ||||
) | |||||
assert_contains( | assert_contains( | ||||
resp, "Revision with sha1_git %s not found" % unknown_revision, status_code=404 | resp, "Revision with sha1_git %s not found" % unknown_revision, status_code=404 | ||||
) | ) | ||||
url = reverse( | url = reverse( | ||||
"browse-revision", | "browse-revision", | ||||
url_args={"sha1_git": revision}, | url_args={"sha1_git": revision}, | ||||
query_params={"origin_url": new_origin.url}, | query_params={"origin_url": new_origin.url}, | ||||
) | ) | ||||
resp = client.get(url) | resp = check_html_get_response( | ||||
assert resp.status_code == 404 | client, url, status_code=404, template_used="error.html" | ||||
assert_template_used(resp, "error.html") | ) | ||||
assert_contains( | assert_contains( | ||||
resp, "the origin mentioned in your request" " appears broken", status_code=404 | resp, "the origin mentioned in your request" " appears broken", status_code=404 | ||||
) | ) | ||||
@given(revision()) | @given(revision()) | ||||
def test_revision_uppercase(client, revision): | def test_revision_uppercase(client, revision): | ||||
url = reverse( | url = reverse( | ||||
"browse-revision-uppercase-checksum", url_args={"sha1_git": revision.upper()} | "browse-revision-uppercase-checksum", url_args={"sha1_git": revision.upper()} | ||||
) | ) | ||||
resp = client.get(url) | resp = check_html_get_response(client, url, status_code=302) | ||||
assert resp.status_code == 302 | |||||
redirect_url = reverse("browse-revision", url_args={"sha1_git": revision}) | redirect_url = reverse("browse-revision", url_args={"sha1_git": revision}) | ||||
assert resp["location"] == redirect_url | assert resp["location"] == redirect_url | ||||
def _revision_browse_checks( | def _revision_browse_checks( | ||||
client, archive_data, revision, origin_url=None, snapshot=None | client, archive_data, revision, origin_url=None, snapshot=None | ||||
Show All 24 Lines | elif snapshot: | ||||
history_url = reverse( | history_url = reverse( | ||||
"browse-snapshot-log", | "browse-snapshot-log", | ||||
url_args={"snapshot_id": snapshot["id"]}, | url_args={"snapshot_id": snapshot["id"]}, | ||||
query_params={"revision": revision}, | query_params={"revision": revision}, | ||||
) | ) | ||||
else: | else: | ||||
history_url = reverse("browse-revision-log", url_args={"sha1_git": revision}) | history_url = reverse("browse-revision-log", url_args={"sha1_git": revision}) | ||||
resp = client.get(url) | resp = check_html_get_response( | ||||
client, url, status_code=200, template_used="browse/revision.html" | |||||
assert resp.status_code == 200 | ) | ||||
assert_template_used(resp, "browse/revision.html") | |||||
assert_contains(resp, author_name) | assert_contains(resp, author_name) | ||||
assert_contains(resp, committer_name) | assert_contains(resp, committer_name) | ||||
assert_contains(resp, history_url) | assert_contains(resp, history_url) | ||||
for parent in revision_data["parents"]: | for parent in revision_data["parents"]: | ||||
parent_url = reverse( | parent_url = reverse( | ||||
"browse-revision", url_args={"sha1_git": parent}, query_params=query_params | "browse-revision", url_args={"sha1_git": parent}, query_params=query_params | ||||
) | ) | ||||
▲ Show 20 Lines • Show All 58 Lines • Show Last 20 Lines |