@@ -16,14 +16,14 @@ def async_users_service(async_http_client):
1616
1717
1818@pytest .mark .parametrize (
19- "method" , ["get" , "update" , "delete" , "block" , "unblock" , "sso" , "sso_check" ]
19+ "method" , ["get" , "update" , "delete" , "block" , "unblock" , "sso" , "sso_check" , "set_password" ]
2020)
2121def test_mixins_present (users_service , method ):
2222 assert hasattr (users_service , method )
2323
2424
2525@pytest .mark .parametrize (
26- "method" , ["get" , "update" , "delete" , "block" , "unblock" , "sso" , "sso_check" ]
26+ "method" , ["get" , "update" , "delete" , "block" , "unblock" , "sso" , "sso_check" , "set_password" ]
2727)
2828def test_async_mixins_present (async_users_service , method ):
2929 assert hasattr (async_users_service , method )
@@ -36,7 +36,7 @@ def test_async_mixins_present(async_users_service, method):
3636 ("sso_check" , {"id" : "OBJ-0000-0001" , "status" : "update" }),
3737 ],
3838)
39- def test_sso_resource_actions (users_service , action , input_status ):
39+ def test_resource_actions (users_service , action , input_status ):
4040 request_expected_content = b'{"id":"OBJ-0000-0001","status":"update"}'
4141 response_expected_data = {"id" : "OBJ-0000-0001" , "status" : "new_status" }
4242 with respx .mock :
@@ -65,7 +65,7 @@ def test_sso_resource_actions(users_service, action, input_status):
6565 ("sso_check" , None ),
6666 ],
6767)
68- def test_sso_resource_actions_no_data (users_service , action , input_status ):
68+ def test_resource_actions_no_data (users_service , action , input_status ):
6969 request_expected_content = b""
7070 response_expected_data = {"id" : "OBJ-0000-0001" , "status" : "new_status" }
7171 with respx .mock :
@@ -94,7 +94,7 @@ def test_sso_resource_actions_no_data(users_service, action, input_status):
9494 ("sso_check" , {"id" : "OBJ-0000-0001" , "status" : "update" }),
9595 ],
9696)
97- async def test_async_sso_resource_actions (async_users_service , action , input_status ):
97+ async def test_async_resource_actions (async_users_service , action , input_status ):
9898 request_expected_content = b'{"id":"OBJ-0000-0001","status":"update"}'
9999 response_expected_data = {"id" : "OBJ-0000-0001" , "status" : "new_status" }
100100 with respx .mock :
@@ -123,7 +123,7 @@ async def test_async_sso_resource_actions(async_users_service, action, input_sta
123123 ("sso_check" , None ),
124124 ],
125125)
126- async def test_async_sso_resource_actions_no_data (async_users_service , action , input_status ):
126+ async def test_async_resource_actions_no_data (async_users_service , action , input_status ):
127127 request_expected_content = b""
128128 response_expected_data = {"id" : "OBJ-0000-0001" , "status" : "new_status" }
129129 with respx .mock :
@@ -143,3 +143,61 @@ async def test_async_sso_resource_actions_no_data(async_users_service, action, i
143143 assert request .content == request_expected_content
144144 assert blockable_obj .to_dict () == response_expected_data
145145 assert isinstance (blockable_obj , User )
146+
147+
148+ @pytest .mark .parametrize (
149+ ("action" , "input_password" ),
150+ [
151+ ("set_password" , "new-password-123" ),
152+ ],
153+ )
154+ def test_set_password_action (users_service , action , input_password ):
155+ request_expected_content_str = f'{{"password":"{ input_password } "}}'
156+ request_expected_content = request_expected_content_str .encode ()
157+ response_expected_data = {"password" : input_password }
158+ with respx .mock :
159+ mock_route = respx .post (
160+ "https://api.example.com/public/v1/"
161+ f"accounts/users/OBJ-0000-0001/{ action .replace ('_' , '-' )} "
162+ ).mock (
163+ return_value = httpx .Response (
164+ status_code = httpx .codes .OK ,
165+ json = response_expected_data ,
166+ )
167+ )
168+ blockable_obj = getattr (users_service , action )("OBJ-0000-0001" , input_password )
169+
170+ request = mock_route .calls [0 ].request
171+
172+ assert request .content == request_expected_content
173+ assert blockable_obj .to_dict () == response_expected_data
174+ assert isinstance (blockable_obj , User )
175+
176+
177+ @pytest .mark .parametrize (
178+ ("action" , "input_password" ),
179+ [
180+ ("set_password" , "new-password-123" ),
181+ ],
182+ )
183+ async def test_async_set_password_action (async_users_service , action , input_password ):
184+ request_expected_content_str = f'{{"password":"{ input_password } "}}'
185+ request_expected_content = request_expected_content_str .encode ()
186+ response_expected_data = {"password" : input_password }
187+ with respx .mock :
188+ mock_route = respx .post (
189+ "https://api.example.com/public/v1/"
190+ f"accounts/users/OBJ-0000-0001/{ action .replace ('_' , '-' )} "
191+ ).mock (
192+ return_value = httpx .Response (
193+ status_code = httpx .codes .OK ,
194+ json = response_expected_data ,
195+ )
196+ )
197+ blockable_obj = await getattr (async_users_service , action )("OBJ-0000-0001" , input_password )
198+
199+ request = mock_route .calls [0 ].request
200+
201+ assert request .content == request_expected_content
202+ assert blockable_obj .to_dict () == response_expected_data
203+ assert isinstance (blockable_obj , User )
0 commit comments