Changeset View
Changeset View
Standalone View
Standalone View
swh/web/tests/browse/views/test_directory.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 | ||||
import textwrap | import textwrap | ||||
from hypothesis import given | from hypothesis import given | ||||
from swh.model.identifiers import DIRECTORY | |||||
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 gen_path_info, reverse | from swh.web.common.utils import gen_path_info, reverse | ||||
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 ( | from swh.web.tests.strategies import ( | ||||
directory, | directory, | ||||
directory_with_subdirs, | directory_with_subdirs, | ||||
invalid_sha1, | invalid_sha1, | ||||
unknown_directory, | unknown_directory, | ||||
) | ) | ||||
@given(directory()) | @given(directory()) | ||||
def test_root_directory_view(client, archive_data, directory): | def test_root_directory_view_checks(client, archive_data, directory): | ||||
_directory_view(client, directory, archive_data.directory_ls(directory)) | _directory_view_checks(client, directory, archive_data.directory_ls(directory)) | ||||
@given(directory_with_subdirs()) | @given(directory_with_subdirs()) | ||||
def test_sub_directory_view(client, archive_data, directory): | def test_sub_directory_view_checks(client, archive_data, directory): | ||||
dir_content = archive_data.directory_ls(directory) | dir_content = archive_data.directory_ls(directory) | ||||
subdir = random.choice([e for e in dir_content if e["type"] == "dir"]) | subdir = random.choice([e for e in dir_content if e["type"] == "dir"]) | ||||
subdir_content = archive_data.directory_ls(subdir["target"]) | subdir_content = archive_data.directory_ls(subdir["target"]) | ||||
_directory_view(client, directory, subdir_content, subdir["name"]) | _directory_view_checks(client, directory, subdir_content, subdir["name"]) | ||||
@given(invalid_sha1(), unknown_directory()) | @given(invalid_sha1(), unknown_directory()) | ||||
def test_directory_request_errors(client, invalid_sha1, unknown_directory): | def test_directory_request_errors(client, invalid_sha1, unknown_directory): | ||||
dir_url = reverse("browse-directory", url_args={"sha1_git": invalid_sha1}) | dir_url = reverse("browse-directory", url_args={"sha1_git": invalid_sha1}) | ||||
resp = client.get(dir_url) | resp = client.get(dir_url) | ||||
assert resp.status_code == 400 | assert resp.status_code == 400 | ||||
Show All 27 Lines | url = reverse( | ||||
"browse-directory", | "browse-directory", | ||||
url_args={"sha1_git": directory}, | url_args={"sha1_git": directory}, | ||||
query_params={"origin_url": origin_url}, | query_params={"origin_url": origin_url}, | ||||
) | ) | ||||
resp = client.get(url) | resp = client.get(url) | ||||
assert resp.status_code == 200 | assert resp.status_code == 200 | ||||
assert_contains(resp, 'id="swh-id-option-origin-directory"') | assert_contains(resp, 'id="swh-id-context-option-directory"') | ||||
def _directory_view(client, root_directory_sha1, directory_entries, path=None): | def _directory_view_checks(client, root_directory_sha1, directory_entries, path=None): | ||||
dirs = [e for e in directory_entries if e["type"] in ("dir", "rev")] | dirs = [e for e in directory_entries if e["type"] in ("dir", "rev")] | ||||
files = [e for e in directory_entries if e["type"] == "file"] | files = [e for e in directory_entries if e["type"] == "file"] | ||||
url_args = {"sha1_git": root_directory_sha1} | url_args = {"sha1_git": root_directory_sha1} | ||||
query_params = {} | query_params = {} | ||||
if path: | if path: | ||||
query_params["path"] = path | query_params["path"] = path | ||||
▲ Show 20 Lines • Show All 51 Lines • ▼ Show 20 Lines | for p in path_info: | ||||
"browse-directory", | "browse-directory", | ||||
url_args={"sha1_git": root_directory_sha1}, | url_args={"sha1_git": root_directory_sha1}, | ||||
query_params={"path": p["path"]}, | query_params={"path": p["path"]}, | ||||
) | ) | ||||
assert_contains(resp, '<a href="%s">%s</a>' % (dir_url, p["name"])) | assert_contains(resp, '<a href="%s">%s</a>' % (dir_url, p["name"])) | ||||
assert_contains(resp, "vault-cook-directory") | assert_contains(resp, "vault-cook-directory") | ||||
swh_dir_id = get_swh_persistent_id("directory", directory_entries[0]["dir_id"]) | swh_dir_id = get_swh_persistent_id(DIRECTORY, directory_entries[0]["dir_id"]) | ||||
swh_dir_id_url = reverse("browse-swh-id", url_args={"swh_id": swh_dir_id}) | swh_dir_id_url = reverse("browse-swh-id", url_args={"swh_id": swh_dir_id}) | ||||
assert_contains(resp, swh_dir_id) | |||||
assert_contains(resp, swh_dir_id_url) | |||||
assert_contains( | assert_contains( | ||||
resp, | resp, | ||||
textwrap.indent( | textwrap.indent( | ||||
( | ( | ||||
f"Browse archived directory\n" | f"Browse archived directory\n" | ||||
f'<a href="{swh_dir_id_url}">\n' | f'<a href="{swh_dir_id_url}">\n' | ||||
f" {swh_dir_id}\n" | f" {swh_dir_id}\n" | ||||
f"</a>" | f"</a>" | ||||
), | ), | ||||
" " * 4, | " " * 4, | ||||
), | ), | ||||
) | ) | ||||
swhid_context = {} | |||||
if root_directory_sha1 != directory_entries[0]["dir_id"]: | |||||
swhid_context["anchor"] = get_swh_persistent_id(DIRECTORY, root_directory_sha1) | |||||
swhid_context["path"] = f"/{path}/" if path else "/" | |||||
if root_directory_sha1 != directory_entries[0]["dir_id"]: | |||||
swhid_context["anchor"] = get_swh_persistent_id(DIRECTORY, root_directory_sha1) | |||||
swh_dir_id = get_swh_persistent_id( | |||||
DIRECTORY, directory_entries[0]["dir_id"], metadata=swhid_context | |||||
) | |||||
swh_dir_id_url = reverse("browse-swh-id", url_args={"swh_id": swh_dir_id}) | |||||
assert_contains(resp, swh_dir_id) | |||||
assert_contains(resp, swh_dir_id_url) |