11import datetime
2+ from typing import Optional
23
34import pytest
4- from httpx import Client
55from scim2_models import Error
6- from scim2_models import Group
76from scim2_models import Meta
7+ from scim2_models import Resource
88from scim2_models import User
99
1010from scim2_client import RequestNetworkError
1111from scim2_client import RequestPayloadValidationError
1212from scim2_client import SCIMClientError
1313from scim2_client import SCIMRequestError
1414from scim2_client import UnexpectedStatusCode
15- from scim2_client .engines .httpx import SyncSCIMClient
1615
1716
18- def test_create_user (httpserver ):
17+ def test_create_user (httpserver , sync_client ):
1918 """Nominal case for a User creation object."""
2019 httpserver .expect_request ("/Users" , method = "POST" ).respond_with_json (
2120 {
@@ -34,10 +33,7 @@ def test_create_user(httpserver):
3433 )
3534
3635 user_request = User (user_name = "bjensen@example.com" )
37-
38- client = Client (base_url = f"http://localhost:{ httpserver .port } " )
39- scim_client = SyncSCIMClient (client , resource_models = (User ,))
40- response = scim_client .create (user_request )
36+ response = sync_client .create (user_request )
4137
4238 user_created = User (
4339 id = "2819c223-7f76-453a-919d-413861904646" ,
@@ -57,7 +53,7 @@ def test_create_user(httpserver):
5753 assert response == user_created
5854
5955
60- def test_create_dict_user (httpserver ):
56+ def test_create_dict_user (httpserver , sync_client ):
6157 """Nominal case for a User creation object, when passing a dict instead of a resource."""
6258 httpserver .expect_request ("/Users" , method = "POST" ).respond_with_json (
6359 {
@@ -80,9 +76,7 @@ def test_create_dict_user(httpserver):
8076 "userName" : "bjensen@example.com" ,
8177 }
8278
83- client = Client (base_url = f"http://localhost:{ httpserver .port } " )
84- scim_client = SyncSCIMClient (client , resource_models = (User ,))
85- response = scim_client .create (user_request )
79+ response = sync_client .create (user_request )
8680
8781 user_created = User (
8882 id = "2819c223-7f76-453a-919d-413861904646" ,
@@ -102,7 +96,7 @@ def test_create_dict_user(httpserver):
10296 assert response == user_created
10397
10498
105- def test_create_dict_user_bad_schema (httpserver ):
99+ def test_create_dict_user_bad_schema (httpserver , sync_client ):
106100 """Test when passing a resource dict with an unknown or invalid schema."""
107101 httpserver .expect_request ("/Users" , method = "POST" ).respond_with_json (
108102 {
@@ -125,29 +119,25 @@ def test_create_dict_user_bad_schema(httpserver):
125119 "userName" : "bjensen@example.com" ,
126120 }
127121
128- client = Client (base_url = f"http://localhost:{ httpserver .port } " )
129- scim_client = SyncSCIMClient (client , resource_models = (User ,))
130122 with pytest .raises (
131123 SCIMClientError , match = "Cannot guess resource type from the payload"
132124 ):
133- scim_client .create (user_request )
125+ sync_client .create (user_request )
134126
135127
136- def test_dont_check_response_payload (httpserver ):
128+ def test_dont_check_response_payload (httpserver , sync_client ):
137129 """Test the check_response_payload_attribute."""
138130 httpserver .expect_request ("/Users" , method = "POST" ).respond_with_json (
139131 {"foo" : "bar" }, status = 201
140132 )
141133
142134 user_request = User (user_name = "bjensen@example.com" )
143135
144- client = Client (base_url = f"http://localhost:{ httpserver .port } " )
145- scim_client = SyncSCIMClient (client , resource_models = (User ,))
146- response = scim_client .create (resource = user_request , check_response_payload = False )
136+ response = sync_client .create (resource = user_request , check_response_payload = False )
147137 assert response == {"foo" : "bar" }
148138
149139
150- def test_dont_check_request_payload (httpserver ):
140+ def test_dont_check_request_payload (httpserver , sync_client ):
151141 """Test the check_request_payload_attribute.
152142
153143 TODO: Actually check that the payload is sent through the network
@@ -173,9 +163,7 @@ def test_dont_check_request_payload(httpserver):
173163 "userName" : "bjensen@example.com" ,
174164 }
175165
176- client = Client (base_url = f"http://localhost:{ httpserver .port } " )
177- scim_client = SyncSCIMClient (client , resource_models = (User ,))
178- response = scim_client .create (
166+ response = sync_client .create (
179167 resource = user_request , check_request_payload = False , url = "/Users"
180168 )
181169
@@ -194,7 +182,7 @@ def test_dont_check_request_payload(httpserver):
194182 assert response == user_created
195183
196184
197- def test_conflict (httpserver ):
185+ def test_conflict (httpserver , sync_client ):
198186 """Nominal case for a User creation object."""
199187 httpserver .expect_request ("/Users" , method = "POST" ).respond_with_json (
200188 {
@@ -208,9 +196,7 @@ def test_conflict(httpserver):
208196
209197 user_request = User (user_name = "bjensen@example.com" )
210198
211- client = Client (base_url = f"http://localhost:{ httpserver .port } " )
212- scim_client = SyncSCIMClient (client , resource_models = (User ,))
213- response = scim_client .create (user_request , raise_scim_errors = False )
199+ response = sync_client .create (user_request , raise_scim_errors = False )
214200 assert response == Error (
215201 schemas = ["urn:ietf:params:scim:api:messages:2.0:Error" ],
216202 status = 409 ,
@@ -219,7 +205,7 @@ def test_conflict(httpserver):
219205 )
220206
221207
222- def test_no_200 (httpserver ):
208+ def test_no_200 (httpserver , sync_client ):
223209 """User creation object should return 201 codes and no 200."""
224210 httpserver .expect_request ("/Users" , method = "POST" ).respond_with_json (
225211 {
@@ -239,16 +225,14 @@ def test_no_200(httpserver):
239225
240226 user_request = User (user_name = "bjensen@example.com" )
241227
242- client = Client (base_url = f"http://localhost:{ httpserver .port } " )
243- scim_client = SyncSCIMClient (client , resource_models = (User ,))
244228 with pytest .raises (UnexpectedStatusCode ):
245- scim_client .create (user_request )
246- scim_client .create (user_request , expected_status_codes = None )
247- scim_client .create (user_request , expected_status_codes = [200 , 201 ])
229+ sync_client .create (user_request )
230+ sync_client .create (user_request , expected_status_codes = None )
231+ sync_client .create (user_request , expected_status_codes = [200 , 201 ])
248232
249233
250234@pytest .mark .parametrize ("code" , [400 , 401 , 403 , 404 , 500 ])
251- def test_errors (httpserver , code ):
235+ def test_errors (httpserver , code , sync_client ):
252236 """Test error cases defined in RFC7644."""
253237 httpserver .expect_request ("/Users" , method = "POST" ).respond_with_json (
254238 {
@@ -261,9 +245,7 @@ def test_errors(httpserver, code):
261245
262246 user_request = User (user_name = "bjensen@example.com" )
263247
264- client = Client (base_url = f"http://localhost:{ httpserver .port } " )
265- scim_client = SyncSCIMClient (client , resource_models = (User ,))
266- response = scim_client .create (user_request , raise_scim_errors = False )
248+ response = sync_client .create (user_request , raise_scim_errors = False )
267249
268250 assert response == Error (
269251 schemas = ["urn:ietf:params:scim:api:messages:2.0:Error" ],
@@ -272,35 +254,34 @@ def test_errors(httpserver, code):
272254 )
273255
274256
275- def test_invalid_resource_model (httpserver ):
257+ def test_invalid_resource_model (sync_client ):
276258 """Test that resource_models passed to the method must be part of BaseSCIMClient.resource_models."""
277- client = Client (base_url = f"http://localhost:{ httpserver .port } " )
278- scim_client = SyncSCIMClient (client , resource_models = (User ,))
259+
260+ class MyResource (Resource ):
261+ schemas : list [str ] = ["urn:ietf:params:scim:schemas:core:2.0:MyResource" ]
262+ display_name : Optional [str ] = None
263+
279264 with pytest .raises (SCIMRequestError , match = r"Unknown resource type" ):
280- scim_client .create (Group (display_name = "foobar" ))
265+ sync_client .create (MyResource (display_name = "foobar" ))
281266
282267
283- def test_request_validation_error (httpserver ):
268+ def test_request_validation_error (sync_client ):
284269 """Test that incorrect input raise a RequestPayloadValidationError."""
285- client = Client (base_url = f"http://localhost:{ httpserver .port } " )
286- scim_client = SyncSCIMClient (client , resource_models = (User ,))
287270 with pytest .raises (
288271 RequestPayloadValidationError , match = "Server request payload validation error"
289272 ):
290- scim_client .create (
273+ sync_client .create (
291274 {
292275 "schemas" : ["urn:ietf:params:scim:schemas:core:2.0:User" ],
293276 "active" : "not-a-bool" ,
294277 }
295278 )
296279
297280
298- def test_request_network_error (httpserver ):
281+ def test_request_network_error (sync_client ):
299282 """Test that httpx exceptions are transformed in RequestNetworkError."""
300- client = Client (base_url = f"http://localhost:{ httpserver .port } " )
301- scim_client = SyncSCIMClient (client , resource_models = (User ,))
302283 user_request = User (user_name = "bjensen@example.com" )
303284 with pytest .raises (
304285 RequestNetworkError , match = "Network error happened during request"
305286 ):
306- scim_client .create (user_request , url = "http://invalid.test" )
287+ sync_client .create (user_request , url = "http://invalid.test" )
0 commit comments