diff --git a/packages/google-cloud-bigquery-datatransfer/google/cloud/bigquery_datatransfer_v1/services/data_transfer_service/async_client.py b/packages/google-cloud-bigquery-datatransfer/google/cloud/bigquery_datatransfer_v1/services/data_transfer_service/async_client.py index 011f54f17fbc..e1f6e87918dd 100644 --- a/packages/google-cloud-bigquery-datatransfer/google/cloud/bigquery_datatransfer_v1/services/data_transfer_service/async_client.py +++ b/packages/google-cloud-bigquery-datatransfer/google/cloud/bigquery_datatransfer_v1/services/data_transfer_service/async_client.py @@ -1316,6 +1316,7 @@ async def sample_start_manual_transfer_runs(): # Initialize request argument(s) request = bigquery_datatransfer_v1.StartManualTransferRunsRequest( + parent="parent_value", ) # Make the request @@ -2018,6 +2019,7 @@ async def sample_enroll_data_sources(): # Initialize request argument(s) request = bigquery_datatransfer_v1.EnrollDataSourcesRequest( + name="name_value", ) # Make the request @@ -2094,6 +2096,7 @@ async def sample_unenroll_data_sources(): # Initialize request argument(s) request = bigquery_datatransfer_v1.UnenrollDataSourcesRequest( + name="name_value", ) # Make the request diff --git a/packages/google-cloud-bigquery-datatransfer/google/cloud/bigquery_datatransfer_v1/services/data_transfer_service/client.py b/packages/google-cloud-bigquery-datatransfer/google/cloud/bigquery_datatransfer_v1/services/data_transfer_service/client.py index fce0121559e4..638481395b98 100644 --- a/packages/google-cloud-bigquery-datatransfer/google/cloud/bigquery_datatransfer_v1/services/data_transfer_service/client.py +++ b/packages/google-cloud-bigquery-datatransfer/google/cloud/bigquery_datatransfer_v1/services/data_transfer_service/client.py @@ -1708,6 +1708,7 @@ def sample_start_manual_transfer_runs(): # Initialize request argument(s) request = bigquery_datatransfer_v1.StartManualTransferRunsRequest( + parent="parent_value", ) # Make the request @@ -2363,6 +2364,7 @@ def sample_enroll_data_sources(): # Initialize request argument(s) request = bigquery_datatransfer_v1.EnrollDataSourcesRequest( + name="name_value", ) # Make the request @@ -2440,6 +2442,7 @@ def sample_unenroll_data_sources(): # Initialize request argument(s) request = bigquery_datatransfer_v1.UnenrollDataSourcesRequest( + name="name_value", ) # Make the request diff --git a/packages/google-cloud-bigquery-datatransfer/google/cloud/bigquery_datatransfer_v1/services/data_transfer_service/transports/rest.py b/packages/google-cloud-bigquery-datatransfer/google/cloud/bigquery_datatransfer_v1/services/data_transfer_service/transports/rest.py index 8ef6eba0f47d..cd9e0af0c4d2 100644 --- a/packages/google-cloud-bigquery-datatransfer/google/cloud/bigquery_datatransfer_v1/services/data_transfer_service/transports/rest.py +++ b/packages/google-cloud-bigquery-datatransfer/google/cloud/bigquery_datatransfer_v1/services/data_transfer_service/transports/rest.py @@ -1045,6 +1045,16 @@ class _EnrollDataSources(DataTransferServiceRestStub): def __hash__(self): return hash("EnrollDataSources") + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + def __call__( self, request: datatransfer.EnrollDataSourcesRequest, @@ -1099,6 +1109,7 @@ def __call__( use_integers_for_enums=True, ) ) + query_params.update(self._get_unset_required_fields(query_params)) query_params["$alt"] = "json;enum-encoding=int" @@ -1883,6 +1894,16 @@ class _StartManualTransferRuns(DataTransferServiceRestStub): def __hash__(self): return hash("StartManualTransferRuns") + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + def __call__( self, request: datatransfer.StartManualTransferRunsRequest, @@ -1944,6 +1965,7 @@ def __call__( use_integers_for_enums=True, ) ) + query_params.update(self._get_unset_required_fields(query_params)) query_params["$alt"] = "json;enum-encoding=int" @@ -1975,6 +1997,16 @@ class _UnenrollDataSources(DataTransferServiceRestStub): def __hash__(self): return hash("UnenrollDataSources") + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + def __call__( self, request: datatransfer.UnenrollDataSourcesRequest, @@ -2024,6 +2056,7 @@ def __call__( use_integers_for_enums=True, ) ) + query_params.update(self._get_unset_required_fields(query_params)) query_params["$alt"] = "json;enum-encoding=int" diff --git a/packages/google-cloud-bigquery-datatransfer/google/cloud/bigquery_datatransfer_v1/types/datatransfer.py b/packages/google-cloud-bigquery-datatransfer/google/cloud/bigquery_datatransfer_v1/types/datatransfer.py index ba883d2434bb..2b86f76c3161 100644 --- a/packages/google-cloud-bigquery-datatransfer/google/cloud/bigquery_datatransfer_v1/types/datatransfer.py +++ b/packages/google-cloud-bigquery-datatransfer/google/cloud/bigquery_datatransfer_v1/types/datatransfer.py @@ -1064,7 +1064,7 @@ class StartManualTransferRunsRequest(proto.Message): Attributes: parent (str): - Transfer configuration name in the form: + Required. Transfer configuration name in the form: ``projects/{project_id}/transferConfigs/{config_id}`` or ``projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}``. requested_time_range (google.cloud.bigquery_datatransfer_v1.types.StartManualTransferRunsRequest.TimeRange): @@ -1153,7 +1153,7 @@ class EnrollDataSourcesRequest(proto.Message): Attributes: name (str): - The name of the project resource in the form: + Required. The name of the project resource in the form: ``projects/{project_id}`` data_source_ids (MutableSequence[str]): Data sources that are enrolled. It is @@ -1176,7 +1176,7 @@ class UnenrollDataSourcesRequest(proto.Message): Attributes: name (str): - The name of the project resource in the form: + Required. The name of the project resource in the form: ``projects/{project_id}`` data_source_ids (MutableSequence[str]): Data sources that are unenrolled. It is diff --git a/packages/google-cloud-bigquery-datatransfer/google/cloud/bigquery_datatransfer_v1/types/transfer.py b/packages/google-cloud-bigquery-datatransfer/google/cloud/bigquery_datatransfer_v1/types/transfer.py index 15322a991d49..4403154949f8 100644 --- a/packages/google-cloud-bigquery-datatransfer/google/cloud/bigquery_datatransfer_v1/types/transfer.py +++ b/packages/google-cloud-bigquery-datatransfer/google/cloud/bigquery_datatransfer_v1/types/transfer.py @@ -176,8 +176,8 @@ class TransferConfig(proto.Message): Attributes: name (str): - The resource name of the transfer config. Transfer config - names have the form either + Identifier. The resource name of the transfer config. + Transfer config names have the form either ``projects/{project_id}/locations/{region}/transferConfigs/{config_id}`` or ``projects/{project_id}/transferConfigs/{config_id}``, where ``config_id`` is usually a UUID, even though it is not @@ -383,8 +383,8 @@ class TransferRun(proto.Message): Attributes: name (str): - The resource name of the transfer run. Transfer run names - have the form + Identifier. The resource name of the transfer run. Transfer + run names have the form ``projects/{project_id}/locations/{location}/transferConfigs/{config_id}/runs/{run_id}``. The name is ignored when creating a transfer run. schedule_time (google.protobuf.timestamp_pb2.Timestamp): diff --git a/packages/google-cloud-bigquery-datatransfer/samples/generated_samples/bigquerydatatransfer_v1_generated_data_transfer_service_enroll_data_sources_async.py b/packages/google-cloud-bigquery-datatransfer/samples/generated_samples/bigquerydatatransfer_v1_generated_data_transfer_service_enroll_data_sources_async.py index 2231bf3c931e..f23505b62edc 100644 --- a/packages/google-cloud-bigquery-datatransfer/samples/generated_samples/bigquerydatatransfer_v1_generated_data_transfer_service_enroll_data_sources_async.py +++ b/packages/google-cloud-bigquery-datatransfer/samples/generated_samples/bigquerydatatransfer_v1_generated_data_transfer_service_enroll_data_sources_async.py @@ -40,6 +40,7 @@ async def sample_enroll_data_sources(): # Initialize request argument(s) request = bigquery_datatransfer_v1.EnrollDataSourcesRequest( + name="name_value", ) # Make the request diff --git a/packages/google-cloud-bigquery-datatransfer/samples/generated_samples/bigquerydatatransfer_v1_generated_data_transfer_service_enroll_data_sources_sync.py b/packages/google-cloud-bigquery-datatransfer/samples/generated_samples/bigquerydatatransfer_v1_generated_data_transfer_service_enroll_data_sources_sync.py index 5eec20ce841c..8f098f4a0c4b 100644 --- a/packages/google-cloud-bigquery-datatransfer/samples/generated_samples/bigquerydatatransfer_v1_generated_data_transfer_service_enroll_data_sources_sync.py +++ b/packages/google-cloud-bigquery-datatransfer/samples/generated_samples/bigquerydatatransfer_v1_generated_data_transfer_service_enroll_data_sources_sync.py @@ -40,6 +40,7 @@ def sample_enroll_data_sources(): # Initialize request argument(s) request = bigquery_datatransfer_v1.EnrollDataSourcesRequest( + name="name_value", ) # Make the request diff --git a/packages/google-cloud-bigquery-datatransfer/samples/generated_samples/bigquerydatatransfer_v1_generated_data_transfer_service_start_manual_transfer_runs_async.py b/packages/google-cloud-bigquery-datatransfer/samples/generated_samples/bigquerydatatransfer_v1_generated_data_transfer_service_start_manual_transfer_runs_async.py index 6423f3e74185..aac3bbfa671f 100644 --- a/packages/google-cloud-bigquery-datatransfer/samples/generated_samples/bigquerydatatransfer_v1_generated_data_transfer_service_start_manual_transfer_runs_async.py +++ b/packages/google-cloud-bigquery-datatransfer/samples/generated_samples/bigquerydatatransfer_v1_generated_data_transfer_service_start_manual_transfer_runs_async.py @@ -40,6 +40,7 @@ async def sample_start_manual_transfer_runs(): # Initialize request argument(s) request = bigquery_datatransfer_v1.StartManualTransferRunsRequest( + parent="parent_value", ) # Make the request diff --git a/packages/google-cloud-bigquery-datatransfer/samples/generated_samples/bigquerydatatransfer_v1_generated_data_transfer_service_start_manual_transfer_runs_sync.py b/packages/google-cloud-bigquery-datatransfer/samples/generated_samples/bigquerydatatransfer_v1_generated_data_transfer_service_start_manual_transfer_runs_sync.py index 4e5054ef834b..e7114bb54c8d 100644 --- a/packages/google-cloud-bigquery-datatransfer/samples/generated_samples/bigquerydatatransfer_v1_generated_data_transfer_service_start_manual_transfer_runs_sync.py +++ b/packages/google-cloud-bigquery-datatransfer/samples/generated_samples/bigquerydatatransfer_v1_generated_data_transfer_service_start_manual_transfer_runs_sync.py @@ -40,6 +40,7 @@ def sample_start_manual_transfer_runs(): # Initialize request argument(s) request = bigquery_datatransfer_v1.StartManualTransferRunsRequest( + parent="parent_value", ) # Make the request diff --git a/packages/google-cloud-bigquery-datatransfer/samples/generated_samples/bigquerydatatransfer_v1_generated_data_transfer_service_unenroll_data_sources_async.py b/packages/google-cloud-bigquery-datatransfer/samples/generated_samples/bigquerydatatransfer_v1_generated_data_transfer_service_unenroll_data_sources_async.py index 83fc5e10f680..f85eea5c3d48 100644 --- a/packages/google-cloud-bigquery-datatransfer/samples/generated_samples/bigquerydatatransfer_v1_generated_data_transfer_service_unenroll_data_sources_async.py +++ b/packages/google-cloud-bigquery-datatransfer/samples/generated_samples/bigquerydatatransfer_v1_generated_data_transfer_service_unenroll_data_sources_async.py @@ -40,6 +40,7 @@ async def sample_unenroll_data_sources(): # Initialize request argument(s) request = bigquery_datatransfer_v1.UnenrollDataSourcesRequest( + name="name_value", ) # Make the request diff --git a/packages/google-cloud-bigquery-datatransfer/samples/generated_samples/bigquerydatatransfer_v1_generated_data_transfer_service_unenroll_data_sources_sync.py b/packages/google-cloud-bigquery-datatransfer/samples/generated_samples/bigquerydatatransfer_v1_generated_data_transfer_service_unenroll_data_sources_sync.py index 55580d83e1ce..9f7ba1c0cc86 100644 --- a/packages/google-cloud-bigquery-datatransfer/samples/generated_samples/bigquerydatatransfer_v1_generated_data_transfer_service_unenroll_data_sources_sync.py +++ b/packages/google-cloud-bigquery-datatransfer/samples/generated_samples/bigquerydatatransfer_v1_generated_data_transfer_service_unenroll_data_sources_sync.py @@ -40,6 +40,7 @@ def sample_unenroll_data_sources(): # Initialize request argument(s) request = bigquery_datatransfer_v1.UnenrollDataSourcesRequest( + name="name_value", ) # Make the request diff --git a/packages/google-cloud-bigquery-datatransfer/samples/generated_samples/snippet_metadata_google.cloud.bigquery.datatransfer.v1.json b/packages/google-cloud-bigquery-datatransfer/samples/generated_samples/snippet_metadata_google.cloud.bigquery.datatransfer.v1.json index d70902f8c293..adc8c281da8f 100644 --- a/packages/google-cloud-bigquery-datatransfer/samples/generated_samples/snippet_metadata_google.cloud.bigquery.datatransfer.v1.json +++ b/packages/google-cloud-bigquery-datatransfer/samples/generated_samples/snippet_metadata_google.cloud.bigquery.datatransfer.v1.json @@ -695,12 +695,12 @@ "regionTag": "bigquerydatatransfer_v1_generated_DataTransferService_EnrollDataSources_async", "segments": [ { - "end": 48, + "end": 49, "start": 27, "type": "FULL" }, { - "end": 48, + "end": 49, "start": 27, "type": "SHORT" }, @@ -710,16 +710,16 @@ "type": "CLIENT_INITIALIZATION" }, { - "end": 44, + "end": 45, "start": 41, "type": "REQUEST_INITIALIZATION" }, { - "start": 45, + "start": 46, "type": "REQUEST_EXECUTION" }, { - "end": 49, + "end": 50, "type": "RESPONSE_HANDLING" } ], @@ -768,12 +768,12 @@ "regionTag": "bigquerydatatransfer_v1_generated_DataTransferService_EnrollDataSources_sync", "segments": [ { - "end": 48, + "end": 49, "start": 27, "type": "FULL" }, { - "end": 48, + "end": 49, "start": 27, "type": "SHORT" }, @@ -783,16 +783,16 @@ "type": "CLIENT_INITIALIZATION" }, { - "end": 44, + "end": 45, "start": 41, "type": "REQUEST_INITIALIZATION" }, { - "start": 45, + "start": 46, "type": "REQUEST_EXECUTION" }, { - "end": 49, + "end": 50, "type": "RESPONSE_HANDLING" } ], @@ -2147,12 +2147,12 @@ "regionTag": "bigquerydatatransfer_v1_generated_DataTransferService_StartManualTransferRuns_async", "segments": [ { - "end": 50, + "end": 51, "start": 27, "type": "FULL" }, { - "end": 50, + "end": 51, "start": 27, "type": "SHORT" }, @@ -2162,18 +2162,18 @@ "type": "CLIENT_INITIALIZATION" }, { - "end": 44, + "end": 45, "start": 41, "type": "REQUEST_INITIALIZATION" }, { - "end": 47, - "start": 45, + "end": 48, + "start": 46, "type": "REQUEST_EXECUTION" }, { - "end": 51, - "start": 48, + "end": 52, + "start": 49, "type": "RESPONSE_HANDLING" } ], @@ -2223,12 +2223,12 @@ "regionTag": "bigquerydatatransfer_v1_generated_DataTransferService_StartManualTransferRuns_sync", "segments": [ { - "end": 50, + "end": 51, "start": 27, "type": "FULL" }, { - "end": 50, + "end": 51, "start": 27, "type": "SHORT" }, @@ -2238,18 +2238,18 @@ "type": "CLIENT_INITIALIZATION" }, { - "end": 44, + "end": 45, "start": 41, "type": "REQUEST_INITIALIZATION" }, { - "end": 47, - "start": 45, + "end": 48, + "start": 46, "type": "REQUEST_EXECUTION" }, { - "end": 51, - "start": 48, + "end": 52, + "start": 49, "type": "RESPONSE_HANDLING" } ], @@ -2299,12 +2299,12 @@ "regionTag": "bigquerydatatransfer_v1_generated_DataTransferService_UnenrollDataSources_async", "segments": [ { - "end": 48, + "end": 49, "start": 27, "type": "FULL" }, { - "end": 48, + "end": 49, "start": 27, "type": "SHORT" }, @@ -2314,16 +2314,16 @@ "type": "CLIENT_INITIALIZATION" }, { - "end": 44, + "end": 45, "start": 41, "type": "REQUEST_INITIALIZATION" }, { - "start": 45, + "start": 46, "type": "REQUEST_EXECUTION" }, { - "end": 49, + "end": 50, "type": "RESPONSE_HANDLING" } ], @@ -2372,12 +2372,12 @@ "regionTag": "bigquerydatatransfer_v1_generated_DataTransferService_UnenrollDataSources_sync", "segments": [ { - "end": 48, + "end": 49, "start": 27, "type": "FULL" }, { - "end": 48, + "end": 49, "start": 27, "type": "SHORT" }, @@ -2387,16 +2387,16 @@ "type": "CLIENT_INITIALIZATION" }, { - "end": 44, + "end": 45, "start": 41, "type": "REQUEST_INITIALIZATION" }, { - "start": 45, + "start": 46, "type": "REQUEST_EXECUTION" }, { - "end": 49, + "end": 50, "type": "RESPONSE_HANDLING" } ], diff --git a/packages/google-cloud-bigquery-datatransfer/tests/unit/gapic/bigquery_datatransfer_v1/test_data_transfer_service.py b/packages/google-cloud-bigquery-datatransfer/tests/unit/gapic/bigquery_datatransfer_v1/test_data_transfer_service.py index 6ff21d2fcbe4..89a3d3a9886a 100644 --- a/packages/google-cloud-bigquery-datatransfer/tests/unit/gapic/bigquery_datatransfer_v1/test_data_transfer_service.py +++ b/packages/google-cloud-bigquery-datatransfer/tests/unit/gapic/bigquery_datatransfer_v1/test_data_transfer_service.py @@ -9397,6 +9397,90 @@ def test_start_manual_transfer_runs_rest(request_type): assert isinstance(response, datatransfer.StartManualTransferRunsResponse) +def test_start_manual_transfer_runs_rest_required_fields( + request_type=datatransfer.StartManualTransferRunsRequest, +): + transport_class = transports.DataTransferServiceRestTransport + + request_init = {} + request_init["parent"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson(pb_request, use_integers_for_enums=False) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).start_manual_transfer_runs._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = "parent_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).start_manual_transfer_runs._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == "parent_value" + + client = DataTransferServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = datatransfer.StartManualTransferRunsResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + # Convert return value to protobuf type + return_value = datatransfer.StartManualTransferRunsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.start_manual_transfer_runs(request) + + expected_params = [("$alt", "json;enum-encoding=int")] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_start_manual_transfer_runs_rest_unset_required_fields(): + transport = transports.DataTransferServiceRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.start_manual_transfer_runs._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("parent",))) + + @pytest.mark.parametrize("null_interceptor", [True, False]) def test_start_manual_transfer_runs_rest_interceptors(null_interceptor): transport = transports.DataTransferServiceRestTransport( @@ -11030,6 +11114,87 @@ def test_enroll_data_sources_rest(request_type): assert response is None +def test_enroll_data_sources_rest_required_fields( + request_type=datatransfer.EnrollDataSourcesRequest, +): + transport_class = transports.DataTransferServiceRestTransport + + request_init = {} + request_init["name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson(pb_request, use_integers_for_enums=False) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).enroll_data_sources._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["name"] = "name_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).enroll_data_sources._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "name" in jsonified_request + assert jsonified_request["name"] == "name_value" + + client = DataTransferServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = None + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = "" + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.enroll_data_sources(request) + + expected_params = [("$alt", "json;enum-encoding=int")] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_enroll_data_sources_rest_unset_required_fields(): + transport = transports.DataTransferServiceRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.enroll_data_sources._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name",))) + + @pytest.mark.parametrize("null_interceptor", [True, False]) def test_enroll_data_sources_rest_interceptors(null_interceptor): transport = transports.DataTransferServiceRestTransport( @@ -11144,6 +11309,87 @@ def test_unenroll_data_sources_rest(request_type): assert response is None +def test_unenroll_data_sources_rest_required_fields( + request_type=datatransfer.UnenrollDataSourcesRequest, +): + transport_class = transports.DataTransferServiceRestTransport + + request_init = {} + request_init["name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson(pb_request, use_integers_for_enums=False) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).unenroll_data_sources._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["name"] = "name_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).unenroll_data_sources._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "name" in jsonified_request + assert jsonified_request["name"] == "name_value" + + client = DataTransferServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = None + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = "" + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.unenroll_data_sources(request) + + expected_params = [("$alt", "json;enum-encoding=int")] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_unenroll_data_sources_rest_unset_required_fields(): + transport = transports.DataTransferServiceRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.unenroll_data_sources._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name",))) + + @pytest.mark.parametrize("null_interceptor", [True, False]) def test_unenroll_data_sources_rest_interceptors(null_interceptor): transport = transports.DataTransferServiceRestTransport(