diff --git a/.gitignore b/.gitignore index 8e9070b..43fa7b9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,17 +1,18 @@ *.egg-info/ *.pyc *.sw? *~ .coverage .eggs/ .mypy_cache .tox __pycache__ build/ dist/ version.txt .mypy_cache/ .vscode/ demo.txt \#* -.\#* \ No newline at end of file +.\#* +.projectile \ No newline at end of file diff --git a/swh/graphql/tests/unit/resolvers/test_resolve_factory.py b/swh/graphql/tests/unit/resolvers/test_resolver_factory.py similarity index 100% rename from swh/graphql/tests/unit/resolvers/test_resolve_factory.py rename to swh/graphql/tests/unit/resolvers/test_resolver_factory.py diff --git a/swh/graphql/tests/unit/resolvers/test_resolvers.py b/swh/graphql/tests/unit/resolvers/test_resolvers.py index 42b5db2..5e2acaf 100644 --- a/swh/graphql/tests/unit/resolvers/test_resolvers.py +++ b/swh/graphql/tests/unit/resolvers/test_resolvers.py @@ -1,2 +1,107 @@ +import pytest + +from swh.graphql import resolvers +from swh.graphql.resolvers import resolvers as rs + + class TestResolvers: """ """ + + @pytest.fixture + def dummy_node(self): + return {"test": "test"} + + @pytest.mark.parametrize( + "resolver_func, node_cls", + [ + (rs.origin_resolver, resolvers.origin.OriginNode), + (rs.visit_resolver, resolvers.visit.OriginVisitNode), + (rs.snapshot_resolver, resolvers.snapshot.SnapshotNode), + (rs.visit_snapshot_resolver, resolvers.snapshot.VisitSnapshotNode), + (rs.revision_resolver, resolvers.revision.RevisionNode), + (rs.release_resolver, resolvers.release.ReleaseNode), + (rs.directory_resolver, resolvers.directory.DirectoryNode), + (rs.content_resolver, resolvers.content.ContentNode), + ], + ) + def test_node_resolver(self, mocker, dummy_node, resolver_func, node_cls): + mock_get = mocker.patch.object(node_cls, "_get_node", return_value=dummy_node) + node_obj = resolver_func(None, None) + # assert the _get_node method is called on the right object + assert isinstance(node_obj, node_cls) + assert mock_get.assert_called + + @pytest.mark.parametrize( + "resolver_func, connection_cls", + [ + (rs.origins_resolver, resolvers.origin.OriginConnection), + (rs.visits_resolver, resolvers.visit.OriginVisitConnection), + (rs.visitstatus_resolver, resolvers.visit_status.VisitStatusConnection), + ( + rs.snapshot_branches_resolver, + resolvers.snapshot_branch.SnapshotBranchConnection, + ), + (rs.revision_parent_resolver, resolvers.revision.ParentRevisionConnection), + ( + rs.directory_entry_resolver, + resolvers.directory_entry.DirectoryEntryConnection, + ), + ], + ) + def test_connection_resolver(self, resolver_func, connection_cls): + connection_obj = resolver_func(None, None) + # assert the right object is returned + assert isinstance(connection_obj, connection_cls) + + @pytest.mark.parametrize( + "branch_type, node_cls", + [ + ("revision", resolvers.revision.TargetRevisionNode), + ("release", resolvers.release.TargetReleaseNode), + ], + ) + def test_snapshot_branch_target_resolver( + self, mocker, dummy_node, branch_type, node_cls + ): + obj = mocker.Mock(type=branch_type) + mock_get = mocker.patch.object(node_cls, "_get_node", return_value=dummy_node) + node_obj = rs.snapshot_branch_target_resolver(obj, None) + assert isinstance(node_obj, node_cls) + assert mock_get.assert_called + + @pytest.mark.parametrize( + "target_type, node_cls", + [ + ("revision", resolvers.revision.TargetRevisionNode), + ("release", resolvers.release.TargetReleaseNode), + ("directory", resolvers.directory.TargetDirectoryNode), + ("content", resolvers.content.TargetContentNode), + ], + ) + def test_release_target_resolver(self, mocker, dummy_node, target_type, node_cls): + obj = mocker.Mock(target_type=(mocker.Mock(value=target_type))) + mock_get = mocker.patch.object(node_cls, "_get_node", return_value=dummy_node) + node_obj = rs.release_target_resolver(obj, None) + assert isinstance(node_obj, node_cls) + assert mock_get.assert_called + + @pytest.mark.parametrize( + "target_type, node_cls", + [ + ("dir", resolvers.directory.TargetDirectoryNode), + ("file", resolvers.content.TargetContentNode), + ], + ) + def test_directory_entry_target_resolver( + self, mocker, dummy_node, target_type, node_cls + ): + obj = mocker.Mock(type=target_type) + mock_get = mocker.patch.object(node_cls, "_get_node", return_value=dummy_node) + node_obj = rs.directory_entry_target_resolver(obj, None) + assert isinstance(node_obj, node_cls) + assert mock_get.assert_called + + def test_unit_resolver(self, mocker): + obj = mocker.Mock() + obj.is_type_of.return_value = "test" + assert rs.union_resolver(obj) == "test"