Changeset View
Changeset View
Standalone View
Standalone View
swh/graphql/tests/functional/test_visit_status.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 . import utils | |||||
from ..data import get_origins, get_visit_status, get_visits | from ..data import get_origins, get_visit_status, get_visits | ||||
from .utils import get_query_response | |||||
@pytest.mark.parametrize( | @pytest.mark.parametrize( | ||||
"visit, visit_status", list(zip(get_visits(), get_visit_status())) | "visit, visit_status", list(zip(get_visits(), get_visit_status())) | ||||
) | ) | ||||
def test_get_visit_status(client, visit, visit_status): | def test_get_visit_status(client, visit, visit_status): | ||||
query_str = """ | query_str = """ | ||||
{ | query getVisit($origin: String!, $visitId: Int!) { | ||||
visit(originUrl: "%s", visitId: %s) { | visit(originUrl: $origin, visitId: $visitId) { | ||||
statuses(first: 3) { | statuses(first: 3) { | ||||
nodes { | nodes { | ||||
status | status | ||||
date | date | ||||
type | type | ||||
snapshot { | snapshot { | ||||
swhid | swhid | ||||
} | } | ||||
} | } | ||||
} | } | ||||
} | } | ||||
} | } | ||||
""" % ( | """ | ||||
visit.origin, | data, _ = utils.get_query_response( | ||||
visit.visit, | client, query_str, origin=visit.origin, visitId=visit.visit | ||||
) | ) | ||||
data, _ = get_query_response(client, query_str) | |||||
assert data["visit"]["statuses"]["nodes"][0] == { | assert data["visit"]["statuses"]["nodes"][0] == { | ||||
"date": visit_status.date.isoformat(), | "date": visit_status.date.isoformat(), | ||||
"snapshot": {"swhid": f"swh:1:snp:{visit_status.snapshot.hex()}"} | "snapshot": {"swhid": f"swh:1:snp:{visit_status.snapshot.hex()}"} | ||||
if visit_status.snapshot is not None | if visit_status.snapshot is not None | ||||
else None, | else None, | ||||
"status": visit_status.status, | "status": visit_status.status, | ||||
"type": visit_status.type, | "type": visit_status.type, | ||||
} | } | ||||
def test_visit_status_pagination(client): | def test_visit_status_pagination(client): | ||||
# visit status is using a different cursor, hence separate test | # visit status is using a different cursor, hence separate test | ||||
query_str = """ | query_str = """ | ||||
{ | query getVisit($origin: String!, $visitId: Int!) { | ||||
visit(originUrl: "%s", visitId: %s) { | visit(originUrl: $origin, visitId: $visitId) { | ||||
statuses(first: 1) { | statuses(first: 1) { | ||||
pageInfo { | pageInfo { | ||||
hasNextPage | hasNextPage | ||||
endCursor | endCursor | ||||
} | } | ||||
edges { | edges { | ||||
cursor | cursor | ||||
node { | node { | ||||
status | status | ||||
} | } | ||||
} | } | ||||
} | } | ||||
} | } | ||||
} | } | ||||
""" % ( | """ | ||||
get_origins()[0].url, | data, _ = utils.get_query_response( | ||||
1, | client, query_str, origin=get_origins()[0].url, visitId=1 | ||||
) | ) | ||||
data, _ = get_query_response(client, query_str) | |||||
# request again with the endcursor | # request again with the endcursor | ||||
end_cursor = data["visit"]["statuses"]["pageInfo"]["endCursor"] | end_cursor = data["visit"]["statuses"]["pageInfo"]["endCursor"] | ||||
query_str = """ | query_str = """ | ||||
{ | query getVisit($origin: String!, $visitId: Int!, $after: String) { | ||||
visit(originUrl: "%s", visitId: %s) { | visit(originUrl: $origin, visitId: $visitId) { | ||||
statuses(first: 1, after: "%s") { | statuses(first: 1, after: $after) { | ||||
pageInfo { | pageInfo { | ||||
hasNextPage | hasNextPage | ||||
endCursor | endCursor | ||||
} | } | ||||
edges { | edges { | ||||
cursor | cursor | ||||
node { | node { | ||||
status | status | ||||
} | } | ||||
} | } | ||||
} | } | ||||
} | } | ||||
} | } | ||||
""" % ( | """ | ||||
get_origins()[0].url, | data, _ = utils.get_query_response( | ||||
1, | client, | ||||
end_cursor, | query_str, | ||||
origin=get_origins()[0].url, | |||||
visitId=1, | |||||
after=end_cursor, | |||||
) | ) | ||||
data, _ = get_query_response(client, query_str) | |||||
assert data["visit"]["statuses"] == { | assert data["visit"]["statuses"] == { | ||||
"edges": [ | "edges": [ | ||||
{ | { | ||||
"cursor": "MjAxNC0wNS0wN1QwNDoyMDozOS40MzIyMjIrMDA6MDA=", | "cursor": "MjAxNC0wNS0wN1QwNDoyMDozOS40MzIyMjIrMDA6MDA=", | ||||
"node": {"status": "ongoing"}, | "node": {"status": "ongoing"}, | ||||
} | } | ||||
], | ], | ||||
"pageInfo": {"endCursor": None, "hasNextPage": False}, | "pageInfo": {"endCursor": None, "hasNextPage": False}, | ||||
} | } |