def METHOD_NAME(self, grant_target_name, user_name, node=None):
    """Check that user is able to execute to grant roles if and only if they have role with `ADMIN OPTION`.
    """
    exitcode, message = errors.not_enough_privileges(name=user_name)
    if node is None:
        node = self.context.node
    with Scenario("Grant role without privilege"):
        grant_role_name = f"grant_role_{getuid()}"
        target_user_name = f"target_user_{getuid()}"
        with user(node, target_user_name), role(node, grant_role_name):
            with When("I grant the user NONE privilege"):
                node.query(f"GRANT NONE TO {grant_target_name}")
            with And("I grant the user USAGE privilege"):
                node.query(f"GRANT USAGE ON *.* TO {grant_target_name}")
            with Then("I check the user can't grant a role"):
                node.query(f"GRANT {grant_role_name} TO {target_user_name}", settings=[("user",user_name)],
                    exitcode=exitcode, message=message)
    with Scenario("Grant role with privilege"):
        grant_role_name = f"grant_role_{getuid()}"
        target_user_name = f"target_user_{getuid()}"
        with user(node, target_user_name), role(node, grant_role_name):
            with When(f"I grant ADMIN OPTION"):
                node.query(f"GRANT {grant_role_name} TO {grant_target_name} WITH ADMIN OPTION")
            with Then("I check the user can grant a role"):
                node.query(f"GRANT {grant_role_name} TO {target_user_name}", settings = [("user", f"{user_name}")])
    with Scenario("Grant role on cluster"):
        grant_role_name = f"grant_role_{getuid()}"
        target_user_name = f"target_user_{getuid()}"
        try:
            with Given("I have a role on a cluster"):
                node.query(f"CREATE ROLE {grant_role_name} ON CLUSTER sharded_cluster")
            with And("I have a user on a cluster"):
                node.query(f"CREATE USER {target_user_name} ON CLUSTER sharded_cluster")
            with When("I grant ADMIN OPTION privilege"):
                node.query(f"GRANT {grant_role_name} TO {grant_target_name} WITH ADMIN OPTION")
            with Then("I check the user can grant a role"):
                node.query(f"GRANT {grant_role_name} TO {target_user_name} ON CLUSTER sharded_cluster", settings = [("user", f"{user_name}")])
        finally:
            with Finally("I drop the user"):
                node.query(f"DROP ROLE IF EXISTS {grant_role_name} ON CLUSTER sharded_cluster")
    with Scenario("Grant role with revoked privilege"):
        grant_role_name = f"grant_role_{getuid()}"
        target_user_name = f"target_user_{getuid()}"
        with user(node, target_user_name), role(node, grant_role_name):
            with When(f"I grant ADMIN OPTION"):
                node.query(f"GRANT {grant_role_name} TO {grant_target_name} WITH ADMIN OPTION")
            with And(f"I revoke ADMIN OPTION"):
                node.query(f"REVOKE {grant_role_name} FROM {grant_target_name}")
            with Then("I check the user cannot grant a role"):
                node.query(f"GRANT {grant_role_name} TO {target_user_name}", settings=[("user",user_name)],
                    exitcode=exitcode, message=message)