|
26 | 26 | TEST_BUCKET = 'test-bucket'
|
27 | 27 | MAX_ID_KEY = 'id'
|
28 | 28 | TEST_SOURCE_OBJECTS = ['test/objects/*']
|
| 29 | +TEST_SOURCE_OBJECTS_AS_STRING = 'test/objects/*' |
29 | 30 | LABELS = {'k1': 'v1'}
|
30 | 31 | DESCRIPTION = "Test Description"
|
31 | 32 |
|
@@ -216,3 +217,75 @@ def test_description_external_table(self, bq_hook):
|
216 | 217 | description=DESCRIPTION,
|
217 | 218 | )
|
218 | 219 | # fmt: on
|
| 220 | + |
| 221 | + @mock.patch('airflow.providers.google.cloud.transfers.gcs_to_bigquery.BigQueryHook') |
| 222 | + def test_source_objects_as_list(self, bq_hook): |
| 223 | + operator = GCSToBigQueryOperator( |
| 224 | + task_id=TASK_ID, |
| 225 | + bucket=TEST_BUCKET, |
| 226 | + source_objects=TEST_SOURCE_OBJECTS, |
| 227 | + destination_project_dataset_table=TEST_EXPLICIT_DEST, |
| 228 | + ) |
| 229 | + |
| 230 | + operator.execute(None) |
| 231 | + |
| 232 | + bq_hook.return_value.get_conn.return_value.cursor.return_value.run_load.assert_called_once_with( |
| 233 | + destination_project_dataset_table=mock.ANY, |
| 234 | + schema_fields=mock.ANY, |
| 235 | + source_uris=[f'gs://{TEST_BUCKET}/{source_object}' for source_object in TEST_SOURCE_OBJECTS], |
| 236 | + source_format=mock.ANY, |
| 237 | + autodetect=mock.ANY, |
| 238 | + create_disposition=mock.ANY, |
| 239 | + skip_leading_rows=mock.ANY, |
| 240 | + write_disposition=mock.ANY, |
| 241 | + field_delimiter=mock.ANY, |
| 242 | + max_bad_records=mock.ANY, |
| 243 | + quote_character=mock.ANY, |
| 244 | + ignore_unknown_values=mock.ANY, |
| 245 | + allow_quoted_newlines=mock.ANY, |
| 246 | + allow_jagged_rows=mock.ANY, |
| 247 | + encoding=mock.ANY, |
| 248 | + schema_update_options=mock.ANY, |
| 249 | + src_fmt_configs=mock.ANY, |
| 250 | + time_partitioning=mock.ANY, |
| 251 | + cluster_fields=mock.ANY, |
| 252 | + encryption_configuration=mock.ANY, |
| 253 | + labels=mock.ANY, |
| 254 | + description=mock.ANY, |
| 255 | + ) |
| 256 | + |
| 257 | + @mock.patch('airflow.providers.google.cloud.transfers.gcs_to_bigquery.BigQueryHook') |
| 258 | + def test_source_objects_as_string(self, bq_hook): |
| 259 | + operator = GCSToBigQueryOperator( |
| 260 | + task_id=TASK_ID, |
| 261 | + bucket=TEST_BUCKET, |
| 262 | + source_objects=TEST_SOURCE_OBJECTS_AS_STRING, |
| 263 | + destination_project_dataset_table=TEST_EXPLICIT_DEST, |
| 264 | + ) |
| 265 | + |
| 266 | + operator.execute(None) |
| 267 | + |
| 268 | + bq_hook.return_value.get_conn.return_value.cursor.return_value.run_load.assert_called_once_with( |
| 269 | + destination_project_dataset_table=mock.ANY, |
| 270 | + schema_fields=mock.ANY, |
| 271 | + source_uris=[f'gs://{TEST_BUCKET}/{TEST_SOURCE_OBJECTS_AS_STRING}'], |
| 272 | + source_format=mock.ANY, |
| 273 | + autodetect=mock.ANY, |
| 274 | + create_disposition=mock.ANY, |
| 275 | + skip_leading_rows=mock.ANY, |
| 276 | + write_disposition=mock.ANY, |
| 277 | + field_delimiter=mock.ANY, |
| 278 | + max_bad_records=mock.ANY, |
| 279 | + quote_character=mock.ANY, |
| 280 | + ignore_unknown_values=mock.ANY, |
| 281 | + allow_quoted_newlines=mock.ANY, |
| 282 | + allow_jagged_rows=mock.ANY, |
| 283 | + encoding=mock.ANY, |
| 284 | + schema_update_options=mock.ANY, |
| 285 | + src_fmt_configs=mock.ANY, |
| 286 | + time_partitioning=mock.ANY, |
| 287 | + cluster_fields=mock.ANY, |
| 288 | + encryption_configuration=mock.ANY, |
| 289 | + labels=mock.ANY, |
| 290 | + description=mock.ANY, |
| 291 | + ) |
0 commit comments