diff --git a/swh/graphql/tests/functional/test_revision.py b/swh/graphql/tests/functional/test_revision.py new file mode 100644 --- /dev/null +++ b/swh/graphql/tests/functional/test_revision.py @@ -0,0 +1,112 @@ +# Copyright (C) 2022 The Software Heritage developers +# See the AUTHORS file at the top-level directory of this distribution +# License: GNU General Public License version 3, or any later version +# See top-level LICENSE file for more information + +import pytest + +from swh.model.swhids import CoreSWHID + +from . import utils +from ..data import get_revisions + + +@pytest.mark.parametrize("revision", get_revisions()) +def test_get_revision(client, revision): + query_str = """ + { + revision(swhid: "%s") { + swhid + message { + text + } + author { + fullname { + text + } + name { + text + } + email { + text + } + } + committer { + fullname { + text + } + name { + text + } + email { + text + } + } + date + type + directory { + swhid + } + } + } + """ + data, _ = utils.get_query_response(client, query_str % revision.swhid()) + assert data["revision"] == { + "swhid": str(revision.swhid()), + "message": {"text": revision.message.decode()}, + "author": { + "fullname": {"text": revision.author.fullname.decode()}, + "name": {"text": revision.author.name.decode()}, + "email": {"text": revision.author.email.decode()}, + }, + "committer": { + "fullname": {"text": revision.committer.fullname.decode()}, + "name": {"text": revision.committer.name.decode()}, + "email": {"text": revision.committer.email.decode()}, + }, + "date": revision.date.to_datetime().isoformat(), + "type": revision.type.value, + "directory": { + "swhid": str(CoreSWHID(object_id=revision.directory, object_type="dir")) + }, + } + + +def test_get_revision_with_invalid_swhid(client): + query_str = """ + { + revision(swhid: "swh:1:cnt:invalid") { + swhid + } + } + """ + errors = utils.get_error_response(client, query_str) + # API will throw an error in case of an invalid SWHID + assert len(errors) == 1 + assert "Invalid SWHID: invalid syntax" in errors[0]["message"] + + +def test_get_revision_as_target(client): + # SWHID of a snapshot with revision as target + snapshot_swhid = "swh:1:snp:9e78d7105c5e0f886487511e2a92377b4ee4c32a" + query_str = """ + { + snapshot(swhid: "%s") { + branches(first: 1, types: [revision]) { + nodes { + type + target { + ...on Revision { + swhid + } + } + } + } + } + } + """ + data, _ = utils.get_query_response(client, query_str % snapshot_swhid) + revision_obj = data["snapshot"]["branches"]["nodes"][0]["target"] + assert revision_obj == { + "swhid": "swh:1:rev:66c7c1cd9673275037140f2abff7b7b11fc9439c" + }