def test_add_posts_expected_data_and_to_expected_url( self, mock_session, user_context, mock_get_all_cases_response, mock_detection_list_user_client, ): client = DepartingEmployeeClient( mock_session, user_context, mock_detection_list_user_client ) user_context.get_current_tenant_id.return_value = _TENANT_ID_PARAM # Return value should have been set based on the arguments passed # in add, here however as we are mocking it, it doesn't matter. Can be refactored mock_session.post.return_value = mock_get_all_cases_response client.add(_USER_ID, "2022-12-20") # Have to convert the request data to a dict because # older versions of Python don't have deterministic order. posted_data = json.loads(mock_session.post.call_args[1]["data"]) assert ( posted_data["userId"] == _USER_ID and posted_data["tenantId"] == _TENANT_ID_PARAM and posted_data["departureDate"] == "2022-12-20" ) assert mock_session.post.call_args[0][0] == "/svc/api/v2/departingemployee/add" assert mock_session.post.call_count == 2
def test_add_when_user_already_on_list_raises_user_already_added_error( self, mocker, mock_session, user_context, mock_detection_list_user_client ): def side_effect(url, data): if "add" in url: base_err = mocker.MagicMock(spec=HTTPError) base_err.response = mocker.MagicMock(spec=Response) base_err.response.text = "User already on list" raise Py42BadRequestError(base_err) mock_session.post.side_effect = side_effect client = DepartingEmployeeClient( mock_session, user_context, mock_detection_list_user_client ) with pytest.raises(Py42UserAlreadyAddedError) as err: client.add("user_id") expected = "User with ID user_id is already on the departing-employee list." assert str(err.value) == expected