Dippatel98 commented on code in PR #32843:
URL: https://github.com/apache/airflow/pull/32843#discussion_r1275386392


##########
tests/providers/google/cloud/operators/test_datapipeline.py:
##########
@@ -0,0 +1,138 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+from unittest import mock
+
+import pytest as pytest
+
+from airflow.exceptions import AirflowException
+from airflow.providers.google.cloud.operators.datapipeline import (
+    CreateDataPipelineOperator,
+    RunDataPipelineOperator,
+)
+
+TASK_ID = "test-datapipeline-operators"
+TEST_BODY = {
+    "name": 
"projects/test-datapipeline-operators/locations/test-location/pipelines/test-pipeline",
+    "type": "PIPELINE_TYPE_BATCH",
+    "workload": {
+        "dataflowFlexTemplateRequest": {
+            "launchParameter": {
+                "containerSpecGcsPath": 
"gs://dataflow-templates-us-central1/latest/Word_Count_metadata",
+                "jobName": "test-job",
+                "environment": {"tempLocation": "test-temp-location"},
+                "parameters": {
+                    "inputFile": 
"gs://dataflow-samples/shakespeare/kinglear.txt",
+                    "output": "gs://test/output/my_output",
+                },
+            },
+            "projectId": "test-project-id",
+            "location": "test-location",
+        }
+    },
+}
+TEST_LOCATION = "test-location"
+TEST_PROJECTID = "test-project-id"
+TEST_GCP_CONN_ID = "test_gcp_conn_id"
+TEST_DATA_PIPELINE_NAME = "test_data_pipeline_name"
+
+
+class TestCreateDataPipelineOperator:
+    @pytest.fixture
+    def create_operator(self):
+        """
+        Creates a mock create datapipeline operator to be used in testing.
+        """
+        return CreateDataPipelineOperator(
+            task_id="test_create_datapipeline",
+            body=TEST_BODY,
+            project_id=TEST_PROJECTID,
+            location=TEST_LOCATION,
+            gcp_conn_id=TEST_GCP_CONN_ID,
+        )
+
+    
@mock.patch("airflow.providers.google.cloud.operators.datapipeline.DataPipelineHook")
+    def test_execute(self, mock_hook, create_operator):
+        """
+        Test that the execute function creates and calls the DataPipeline hook 
with the correct parameters
+        """
+        create_operator.execute(mock.MagicMock())
+        mock_hook.assert_called_once_with(
+            gcp_conn_id="test_gcp_conn_id",
+        )
+
+        mock_hook.return_value.create_data_pipeline.assert_called_once_with(
+            project_id=TEST_PROJECTID, body=TEST_BODY, location=TEST_LOCATION
+        )
+
+    def test_body_valid(self):

Review Comment:
   Do you want to rename this to `test_body_invalid`, since you are checking 
the response if the body is invalid.



##########
airflow/providers/google/cloud/example_dags/google-datapipeline.py:
##########
@@ -0,0 +1,80 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+"""
+Example Airflow DAG for testing Google Dataflow Beam Pipeline Operator with 
Java.
+Important Note:
+    This test downloads Java JAR file from the public bucket. In case the JAR 
file cannot be downloaded
+    or is not compatible with the Java version used in the test, the source 
code for this test can be
+    downloaded from here 
(https://beam.apache.org/get-started/wordcount-example) and needs to be compiled
+    manually in order to work.
+    You can follow the instructions on how to pack a self-executing jar here:
+    https://beam.apache.org/documentation/runners/dataflow/
+Requirements:
+    These operators require the gcloud command and Java's JRE to run.
+"""
+from __future__ import annotations
+
+import os
+from datetime import datetime
+
+from airflow import models
+from airflow.providers.apache.beam.hooks.beam import BeamRunnerType
+from airflow.providers.google.cloud.operators.datapipeline import (
+    CreateDataPipelineOperator,
+    RunDataPipelineOperator,
+)
+from airflow.providers.google.cloud.operators.gcs import 
GCSCreateBucketOperator, GCSDeleteBucketOperator
+from airflow.providers.google.cloud.transfers.gcs_to_local import 
GCSToLocalFilesystemOperator
+from airflow.utils.trigger_rule import TriggerRule
+
+DAG_ID = "google-datapipeline"
+
+with models.DAG(
+    DAG_ID,
+    schedule="@once",
+    start_date=datetime(2021, 1, 1),
+    catchup=False,
+    tags=["example", "datapipeline"],
+) as dag:
+    create_data_pipeline = CreateDataPipelineOperator(
+        task_id="create_data_pipeline",
+        project_id="dataflow-interns",
+        location="us-central1",
+        body={
+            "name": 
"projects/dataflow-interns/locations/us-central1/pipelines/dp-create-1642676351302-mp--1675461000",

Review Comment:
   You can fetch these values from the environment using something like 
https://github.com/apache/airflow/blob/main/airflow/providers/google/cloud/example_dags/example_dataflow.py#L55



##########
tests/providers/google/cloud/operators/test_datapipeline.py:
##########
@@ -0,0 +1,138 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+from unittest import mock
+
+import pytest as pytest
+
+from airflow.exceptions import AirflowException
+from airflow.providers.google.cloud.operators.datapipeline import (
+    CreateDataPipelineOperator,
+    RunDataPipelineOperator,
+)
+
+TASK_ID = "test-datapipeline-operators"
+TEST_BODY = {
+    "name": 
"projects/test-datapipeline-operators/locations/test-location/pipelines/test-pipeline",
+    "type": "PIPELINE_TYPE_BATCH",
+    "workload": {
+        "dataflowFlexTemplateRequest": {
+            "launchParameter": {
+                "containerSpecGcsPath": 
"gs://dataflow-templates-us-central1/latest/Word_Count_metadata",
+                "jobName": "test-job",
+                "environment": {"tempLocation": "test-temp-location"},
+                "parameters": {
+                    "inputFile": 
"gs://dataflow-samples/shakespeare/kinglear.txt",
+                    "output": "gs://test/output/my_output",
+                },
+            },
+            "projectId": "test-project-id",
+            "location": "test-location",
+        }
+    },
+}
+TEST_LOCATION = "test-location"
+TEST_PROJECTID = "test-project-id"
+TEST_GCP_CONN_ID = "test_gcp_conn_id"
+TEST_DATA_PIPELINE_NAME = "test_data_pipeline_name"
+
+
+class TestCreateDataPipelineOperator:
+    @pytest.fixture
+    def create_operator(self):
+        """
+        Creates a mock create datapipeline operator to be used in testing.
+        """
+        return CreateDataPipelineOperator(
+            task_id="test_create_datapipeline",
+            body=TEST_BODY,
+            project_id=TEST_PROJECTID,
+            location=TEST_LOCATION,
+            gcp_conn_id=TEST_GCP_CONN_ID,
+        )
+
+    
@mock.patch("airflow.providers.google.cloud.operators.datapipeline.DataPipelineHook")
+    def test_execute(self, mock_hook, create_operator):
+        """
+        Test that the execute function creates and calls the DataPipeline hook 
with the correct parameters
+        """
+        create_operator.execute(mock.MagicMock())
+        mock_hook.assert_called_once_with(
+            gcp_conn_id="test_gcp_conn_id",
+        )
+
+        mock_hook.return_value.create_data_pipeline.assert_called_once_with(
+            project_id=TEST_PROJECTID, body=TEST_BODY, location=TEST_LOCATION
+        )
+
+    def test_body_valid(self):

Review Comment:
   Also, similarly for all test method names below, change `valid` to `invalid`



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to