11from pathlib import Path
22
3+ import httpx
34import pytest
4- import responses
5- from requests import HTTPError
6- from tests .conftest import NOT_CONFIGURED_INSTRUMENT
5+ from pytest_httpx import HTTPXMock
76
87from blueapi .client .numtracker import (
98 DirectoryPath ,
@@ -18,11 +17,33 @@ def numtracker() -> NumtrackerClient:
1817 return NumtrackerClient ("https://numtracker-example.com/graphql" )
1918
2019
21- def test_create_scan (
22- numtracker : NumtrackerClient ,
23- mock_numtracker_server : responses .RequestsMock ,
20+ URL = "https://numtracker-example.com/graphql"
21+
22+ EMPTY = {}
23+
24+ ERRORS = {
25+ "data" : None ,
26+ "errors" : [
27+ {
28+ "message" : "No configuration available for instrument p46" ,
29+ "locations" : [{"line" : 3 , "column" : 5 }],
30+ "path" : ["scan" ],
31+ }
32+ ],
33+ }
34+
35+
36+ async def test_create_scan (
37+ numtracker : NumtrackerClient , httpx_mock : HTTPXMock , nt_query , nt_response
2438):
25- scan = numtracker .create_scan ("ab123" , "p46" )
39+ httpx_mock .add_response (
40+ method = "POST" ,
41+ url = URL ,
42+ match_json = nt_query ,
43+ status_code = 200 ,
44+ json = nt_response ,
45+ )
46+ scan = await numtracker .create_scan ("ab123" , "p46" )
2647 assert scan == NumtrackerScanMutationResponse (
2748 scan = ScanPaths (
2849 scanFile = "p46-11" ,
@@ -36,42 +57,54 @@ def test_create_scan(
3657 )
3758
3859
39- def test_create_scan_raises_400_error (
40- numtracker : NumtrackerClient ,
41- mock_numtracker_server : responses .RequestsMock ,
60+ async def test_create_scan_raises_400_error (
61+ numtracker : NumtrackerClient , httpx_mock : HTTPXMock , nt_query
4262):
63+ httpx_mock .add_response (
64+ method = "POST" , url = URL , match_json = nt_query , status_code = 400 , json = EMPTY
65+ )
4366 with pytest .raises (
44- HTTPError ,
45- match = "400 Client Error: Bad Request for url: https://numtracker-example.com/graphql" ,
67+ httpx . HTTPStatusError ,
68+ match = "Client error '400 Bad Request' for url ' https://numtracker-example.com/graphql' " ,
4669 ):
47- numtracker .create_scan ("ab123" , "p47 " )
70+ await numtracker .create_scan ("ab123" , "p46 " )
4871
4972
50- def test_create_scan_raises_500_error (
51- numtracker : NumtrackerClient ,
52- mock_numtracker_server : responses .RequestsMock ,
73+ async def test_create_scan_raises_500_error (
74+ numtracker : NumtrackerClient , httpx_mock : HTTPXMock , nt_query
5375):
76+ httpx_mock .add_response (
77+ method = "POST" , url = URL , match_json = nt_query , status_code = 500 , json = EMPTY
78+ )
5479 with pytest .raises (
55- HTTPError ,
56- match = "500 Server Error: Internal Server Error for url: https://numtracker-example.com/graphql" ,
80+ httpx . HTTPStatusError ,
81+ match = "Server error '500 Internal Server Error' for url ' https://numtracker-example.com/graphql' " ,
5782 ):
58- numtracker .create_scan ("ab123" , "p48 " )
83+ await numtracker .create_scan ("ab123" , "p46 " )
5984
6085
61- def test_create_scan_raises_key_error_on_incorrectly_formatted_responses (
62- numtracker : NumtrackerClient ,
63- mock_numtracker_server : responses .RequestsMock ,
86+ async def test_create_scan_raises_key_error_on_incorrectly_formatted_responses (
87+ numtracker : NumtrackerClient , httpx_mock : HTTPXMock , nt_query
6488):
89+ httpx_mock .add_response (
90+ method = "POST" , url = URL , match_json = nt_query , status_code = 200 , json = EMPTY
91+ )
6592 with pytest .raises (
6693 KeyError ,
6794 match = "data" ,
6895 ):
69- numtracker .create_scan ("ab123" , "p49 " )
96+ await numtracker .create_scan ("ab123" , "p46 " )
7097
7198
72- def test_create_scan_raises_runtime_error_on_graphql_error (
73- numtracker : NumtrackerClient ,
74- mock_numtracker_server : responses .RequestsMock ,
99+ async def test_create_scan_raises_runtime_error_on_graphql_error (
100+ numtracker : NumtrackerClient , httpx_mock : HTTPXMock , nt_query
75101):
102+ httpx_mock .add_response (
103+ method = "POST" ,
104+ url = URL ,
105+ match_json = nt_query ,
106+ status_code = 200 ,
107+ json = ERRORS ,
108+ )
76109 with pytest .raises (RuntimeError , match = "Numtracker error:" ):
77- numtracker .create_scan ("ab123" , NOT_CONFIGURED_INSTRUMENT )
110+ await numtracker .create_scan ("ab123" , "p46" )
0 commit comments