Невозможно поймать ошибку GraphQL при тестировании django
Я тестирую свой резольвер в graphQl, я работаю с django и библиотекой ariadne. вот тест, который я написал:
def test_check_trigger(self):
query = """
query GetTrigeer($id: ID!) {
trigger(id:$id){
uuid
agent
threshold
}
}
"""
agent = Agent.objects.create(
user=self.user,
user_address=self.user_address,
agent_address=self.agent_address1
)
trigger = Trigger.objects.create(
user=self.user,
agent=agent,
pool=self.pool1,
token=Trigger.TOKEN0,
threshold=50,
state=Trigger.ARMED
)
trigger_id = agent.uuid #passing wrong value to get error
variables = {"id": str(trigger_id)}
with self.assertRaises(GraphQLError,msg="Trigger not found"):
self.run_graphql_query(
query=query, variables=variables, token=self.token)
Вот функция, которую я использую для получения ответа от graphql:
def run_graphql_query(self, query, token, variables):
c = Client(raise_request_exception=True)
access_token = token["access"]
AUTHORIZATION_HEADER = "HTTP_AUTHORIZATION"
AUTHORIZATION_TYPE = "Bearer"
headers = {AUTHORIZATION_HEADER: f"{AUTHORIZATION_TYPE} {access_token}"}
r = c.post("/graphql/", data={
"operations": json.dumps(
{"query": query, "variables": variables}
)
}, **headers)
return r
и это мой резольвер:
@query.field("trigger")
@convert_kwargs_to_snake_case
def resolve_trigger(_, info, id):
try:
return Trigger.objects.get(
uuid=id,
agent__user=info.context.get('user'),
deleted_at__isnull=True,
agent__deleted_at__isnull=True
)
except Trigger.DoesNotExist:
raise GraphQLError(message="Trigger not found")
Но я не могу поймать ошибку, возможно, я использую неправильный подход, но все, что я хочу сделать, это передать неправильное значение в запрос и сопоставить сообщения об ошибках, как ожидалось, вот сообщение об ошибке, которое я получаю в терминале:
617, in resolve_field
result = resolve_fn(source, info, **args)
File "/home/welcome/agents-platform/services/api/api/auth.py", line 12, in resolve_is_authenticated
result = original_resolver(obj, info, **kwargs)
File "/home/welcome/.local/share/virtualenvs/api-_WI5du6j/lib/python3.8/site-packages/ariadne/utils.py", line 75, in wrapper
return func(*args, **convert_to_snake_case(kwargs))
File "/home/welcome/agents-platform/services/api/stoploss/resolvers.py", line 76, in resolve_trigger
raise GraphQLError(message="Trigger not found")
File "/home/welcome/agents-platform/services/api/stoploss/resolvers.py", line 69, in resolve_trigger
return Trigger.objects.get(
File "/home/welcome/.local/share/virtualenvs/api-_WI5du6j/lib/python3.8/site-packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/home/welcome/.local/share/virtualenvs/api-_WI5du6j/lib/python3.8/site-packages/django/db/models/query.py", line 439, in get
raise self.model.DoesNotExist(
graphql.error.graphql_error.GraphQLError: Trigger not found
GraphQL request:3:17
2 | query GetTrigeer($id: ID!) {
3 | trigger(id:$id){
| ^
4 | uuid
F........................
======================================================================
FAIL: test_check_trigger (stoploss.tests.ResolverTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/welcome/agents-platform/services/api/stoploss/tests.py", line 1010, in test_check_trigger
self.run_graphql_query(
AssertionError: GraphQLError not raised : Trigger not found