graphene-django/graphene_django/tests/test_middlewares.py
2021-02-20 12:41:18 -05:00

108 lines
2.6 KiB
Python

import json
import logging
import graphene
import mock
from django.http.response import HttpResponse
from django.test import RequestFactory
from graphene.test import Client
from .models import Reporter
from .. import DjangoObjectType
from ..middlewares import ClientErrorLogMiddleware
class ReporterType(DjangoObjectType):
class Meta:
model = Reporter
fields = "__all__"
class Query(graphene.ObjectType):
reporter = graphene.Field(ReporterType)
def resolve_reporter(self, info, **args):
return Reporter.objects.first()
def test_should_log_error(caplog):
Reporter.objects.create(last_name="ABA")
invalid_query = """
query ReporterQuery {
reporter {
invalidAttrName
}
}
"""
schema = graphene.Schema(query=Query)
client = Client(schema)
response = client.execute(invalid_query)
factory = RequestFactory()
request = factory.post(
"/graphql", data=json.dumps(invalid_query), content_type="application/json"
)
http_res = HttpResponse(json.dumps(response).encode(), status=400)
get_response = mock.MagicMock()
get_response.return_value = http_res
middleware = ClientErrorLogMiddleware(get_response)
middleware(request)
assert len(caplog.records) == 1
assert caplog.records[0] != "WARNING"
assert str(response["errors"]) in caplog.text
assert invalid_query in caplog.text
def test_should_not_log_success(caplog):
Reporter.objects.create(last_name="ABA")
valid_query = """
query ReporterQuery {
reporter {
lastName
}
}
"""
schema = graphene.Schema(query=Query)
client = Client(schema)
response = client.execute(valid_query)
factory = RequestFactory()
request = factory.post(
"/graphql", data=json.dumps(valid_query), content_type="application/json"
)
http_res = HttpResponse(json.dumps(response).encode(), status=200)
get_response = mock.MagicMock()
get_response.return_value = http_res
middleware = ClientErrorLogMiddleware(get_response)
middleware(request)
assert len(caplog.records) == 0
def test_should_not_log_non_graphql_error(caplog):
factory = RequestFactory()
request = factory.post(
"/users", data=json.dumps({"name": "Mario"}), content_type="application/json"
)
http_res = HttpResponse(
json.dumps({"errors": ["Got to be Luigi"]}).encode(), status=400
)
get_response = mock.MagicMock()
get_response.return_value = http_res
middleware = ClientErrorLogMiddleware(get_response)
middleware(request)
assert len(caplog.records) == 0