### Body

Currently `start_date` is mandatory parameter.
For DAGs with `schedule=None` we can relax this requirement as no scheduling calculation needed so the `start_date` parameter isn't used.

### Committer

- [X] I acknowledge that I am a maintainer/committer of the Apache Airflow project.
"""Verify correctness of dag.tree_view()."""
        with DAG("test_dag", start_date=DEFAULT_DATE) as dag:
            op1 = EmptyOperator(task_id="t1")
            op2 = EmptyOperator(task_id="t2")
            op3 = EmptyOperator(task_id="t3")
            op1 >> op2 >> op3
            with redirect_stdout(StringIO()) as stdout:
                dag.tree_view()
                stdout = stdout.getvalue()
            stdout_lines = stdout.splitlines()
            assert "t1" in stdout_lines[0]
            assert "t2" in stdout_lines[1]
            assert "t3" in stdout_lines[2]
    def test_duplicate_task_ids_not_allowed_with_dag_context_manager(self):
        """Verify tasks with Duplicate task_id raises error"""
        with pytest.raises(DuplicateTaskIdFound, match="Task id 't1' has already been added to the DAG"):
            with DAG("test_dag", start_date=DEFAULT_DATE) as dag:
                op1 = EmptyOperator(task_id="t1")
                op2 = BashOperator(task_id="t1", bash_command="sleep 1")
                op1 >> op2
        assert dag.task_dict == {op1.task_id: op1}
    def test_duplicate_task_ids_not_allowed_without_dag_context_manager(self):