|
31 | 31 | from airflow.models.baseoperator import BaseOperatorMeta, chain, cross_downstream |
32 | 32 | from airflow.operators.dummy import DummyOperator |
33 | 33 | from airflow.utils.edgemodifier import Label |
| 34 | +from airflow.utils.trigger_rule import TriggerRule |
34 | 35 | from tests.models import DEFAULT_DATE |
35 | 36 | from tests.test_utils.mock_operators import DeprecatedOperator, MockNamedTuple, MockOperator |
36 | 37 |
|
@@ -595,6 +596,25 @@ def test_set_xcomargs_dependencies_error_when_outside_dag(self): |
595 | 596 | op1 = DummyOperator(task_id="op1") |
596 | 597 | CustomOp(task_id="op2", field=op1.output) |
597 | 598 |
|
| 599 | + def test_invalid_trigger_rule(self): |
| 600 | + with pytest.raises( |
| 601 | + AirflowException, |
| 602 | + match=( |
| 603 | + f"The trigger_rule must be one of {TriggerRule.all_triggers()}," |
| 604 | + "'.op1'; received 'some_rule'." |
| 605 | + ), |
| 606 | + ): |
| 607 | + DummyOperator(task_id="op1", trigger_rule="some_rule") |
| 608 | + |
| 609 | + @parameterized.expand((("string", "dummy"), ("enum", TriggerRule.DUMMY))) |
| 610 | + def test_replace_dummy_trigger_rule(self, name, rule): |
| 611 | + with pytest.warns( |
| 612 | + DeprecationWarning, match="dummy Trigger Rule is deprecated. Please use `TriggerRule.ALWAYS`." |
| 613 | + ): |
| 614 | + op1 = DummyOperator(task_id="op1", trigger_rule=rule) |
| 615 | + |
| 616 | + assert op1.trigger_rule == TriggerRule.ALWAYS |
| 617 | + |
598 | 618 |
|
599 | 619 | class InitSubclassOp(DummyOperator): |
600 | 620 | def __init_subclass__(cls, class_arg=None, **kwargs) -> None: |
|
0 commit comments