|
19 | 19 |
|
20 | 20 | import datetime
|
21 | 21 | import json
|
| 22 | +from decimal import Decimal |
22 | 23 | from urllib.parse import quote
|
23 | 24 |
|
24 | 25 | import pytest
|
|
28 | 29 | from airflow.operators.empty import EmptyOperator
|
29 | 30 | from airflow.security import permissions
|
30 | 31 | from airflow.utils import timezone
|
| 32 | +from airflow.utils.json import WebEncoder |
31 | 33 | from airflow.utils.session import create_session
|
32 | 34 | from airflow.utils.types import DagRunType
|
33 | 35 | from tests.test_utils.api_connexion_utils import create_test_client
|
@@ -92,6 +94,32 @@ def test_trigger_dag_conf(admin_client):
|
92 | 94 | assert run.conf == conf_dict
|
93 | 95 |
|
94 | 96 |
|
| 97 | +def test_trigger_dag_conf_serializable_fields(admin_client): |
| 98 | + test_dag_id = "example_bash_operator" |
| 99 | + time_now = timezone.utcnow() |
| 100 | + conf_dict = { |
| 101 | + "string": "Hello, World!", |
| 102 | + "date_str": "2024-08-08T09:57:35.300858", |
| 103 | + "datetime": time_now, |
| 104 | + "decimal": Decimal(10.465), |
| 105 | + } |
| 106 | + expected_conf = { |
| 107 | + "string": "Hello, World!", |
| 108 | + "date_str": "2024-08-08T09:57:35.300858", |
| 109 | + "datetime": time_now.isoformat(), |
| 110 | + "decimal": 10.465, |
| 111 | + } |
| 112 | + |
| 113 | + admin_client.post(f"dags/{test_dag_id}/trigger", data={"conf": json.dumps(conf_dict, cls=WebEncoder)}) |
| 114 | + |
| 115 | + with create_session() as session: |
| 116 | + run = session.query(DagRun).filter(DagRun.dag_id == test_dag_id).first() |
| 117 | + assert run is not None |
| 118 | + assert DagRunType.MANUAL in run.run_id |
| 119 | + assert run.run_type == DagRunType.MANUAL |
| 120 | + assert run.conf == expected_conf |
| 121 | + |
| 122 | + |
95 | 123 | def test_trigger_dag_conf_malformed(admin_client):
|
96 | 124 | test_dag_id = "example_bash_operator"
|
97 | 125 |
|
|
0 commit comments