Changeset View
Changeset View
Standalone View
Standalone View
swh/graphql/tests/functional/test_visit_node.py
# Copyright (C) 2022 The Software Heritage developers | # Copyright (C) 2022 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 General Public License version 3, or any later version | # License: GNU 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 pytest | import pytest | ||||
from ..data import get_origins | from ..data import get_origins | ||||
from .utils import get_query_response | from .utils import assert_missing_object, get_query_response | ||||
@pytest.mark.parametrize("origin", get_origins()) | @pytest.mark.parametrize("origin", get_origins()) | ||||
def test_get_visit(client, storage, origin): | def test_get_visit(client, storage, origin): | ||||
query_str = """ | query_str = """ | ||||
{ | {{ | ||||
visit(originUrl: "%s", visitId: %s) { | visit(originUrl: "{origin_url}", visitId: {visit_id}) {{ | ||||
visitId | visitId | ||||
date | date | ||||
type | type | ||||
latestStatus { | latestStatus {{ | ||||
status | status | ||||
date | date | ||||
type | type | ||||
snapshot { | snapshot {{ | ||||
swhid | swhid | ||||
} | }} | ||||
} | }} | ||||
status { | status {{ | ||||
nodes { | nodes {{ | ||||
status | status | ||||
} | }} | ||||
} | }} | ||||
} | }} | ||||
} | }} | ||||
""" | """ | ||||
visits_and_statuses = storage.origin_visit_get_with_statuses(origin.url).results | visits_and_statuses = storage.origin_visit_get_with_statuses(origin.url).results | ||||
for vws in visits_and_statuses: | for vws in visits_and_statuses: | ||||
visit = vws.visit | visit = vws.visit | ||||
statuses = vws.statuses | statuses = vws.statuses | ||||
data, _ = get_query_response(client, query_str % (origin.url, visit.visit)) | data, _ = get_query_response( | ||||
client, query_str.format(origin_url=origin.url, visit_id=visit.visit) | |||||
) | |||||
assert data["visit"] == { | assert data["visit"] == { | ||||
"visitId": visit.visit, | "visitId": visit.visit, | ||||
"type": visit.type, | "type": visit.type, | ||||
"date": visit.date.isoformat(), | "date": visit.date.isoformat(), | ||||
"latestStatus": { | "latestStatus": { | ||||
"date": statuses[-1].date.isoformat(), | "date": statuses[-1].date.isoformat(), | ||||
"type": statuses[-1].type, | "type": statuses[-1].type, | ||||
"status": statuses[-1].status, | "status": statuses[-1].status, | ||||
"snapshot": ({"swhid": f"swh:1:snp:{statuses[-1].snapshot.hex()}"}) | "snapshot": ({"swhid": f"swh:1:snp:{statuses[-1].snapshot.hex()}"}) | ||||
if statuses[-1].snapshot | if statuses[-1].snapshot | ||||
else None, | else None, | ||||
}, | }, | ||||
"status": {"nodes": [{"status": status.status} for status in statuses]}, | "status": {"nodes": [{"status": status.status} for status in statuses]}, | ||||
} | } | ||||
def test_invalid_get_visit(client): | def test_invalid_get_visit(client): | ||||
query_str = """ | query_str = """ | ||||
{ | { | ||||
visit(originUrl: "http://example.com/forge1", visitId: 3) { | visit(originUrl: "http://example.com/forge1", visitId: 3) { | ||||
type | type | ||||
} | } | ||||
} | } | ||||
""" | """ | ||||
data, errors = get_query_response(client, query_str) | assert_missing_object(client, query_str, "visit") | ||||
assert data["visit"] is None | |||||
assert len(errors) == 1 | |||||
assert errors[0]["message"] == "Requested object is not available" |