@@ -569,3 +569,177 @@ def test_propagate_property_chunking():
569
569
transformer = ManifestComponentTransformer ()
570
570
actual_component = transformer .propagate_types_and_parameters ("" , component , {})
571
571
assert actual_component == expected_component
572
+
573
+
574
+ @pytest .mark .parametrize (
575
+ "use_parent_parameters, expected_retriever_name, expected_requester_name, expected_requester_params_name" ,
576
+ [
577
+ pytest .param (
578
+ True ,
579
+ "parent_priority" ,
580
+ "component_priority" ,
581
+ "parent_priority" ,
582
+ id = "use_parent_parameters_true" ,
583
+ ),
584
+ pytest .param (
585
+ False ,
586
+ "parent_priority" ,
587
+ "component_priority" ,
588
+ "component_priority" ,
589
+ id = "use_parent_parameters_false" ,
590
+ ),
591
+ ],
592
+ )
593
+ def test_use_parent_parameters_configuration (
594
+ use_parent_parameters ,
595
+ expected_retriever_name ,
596
+ expected_requester_name ,
597
+ expected_requester_params_name ,
598
+ ):
599
+ """Test that use_parent_parameters configuration controls parameter precedence."""
600
+ component_with_parent_priority = {
601
+ "type" : "DeclarativeStream" ,
602
+ "retriever" : {
603
+ "type" : "SimpleRetriever" ,
604
+ "requester" : {
605
+ "type" : "HttpRequester" ,
606
+ "name" : "component_priority" ,
607
+ "url_base" : "https://coffee.example.io/v1/" ,
608
+ "http_method" : "GET" ,
609
+ "primary_key" : "id" ,
610
+ "$parameters" : {
611
+ "name" : "component_priority" ,
612
+ },
613
+ },
614
+ "$parameters" : {
615
+ "name" : "parent_priority" ,
616
+ },
617
+ },
618
+ }
619
+
620
+ expected_component = {
621
+ "type" : "DeclarativeStream" ,
622
+ "retriever" : {
623
+ "type" : "SimpleRetriever" ,
624
+ "name" : expected_retriever_name ,
625
+ "requester" : {
626
+ "type" : "HttpRequester" ,
627
+ "name" : expected_requester_name ,
628
+ "url_base" : "https://coffee.example.io/v1/" ,
629
+ "http_method" : "GET" ,
630
+ "primary_key" : "id" ,
631
+ "$parameters" : {
632
+ "name" : expected_requester_params_name ,
633
+ },
634
+ },
635
+ "$parameters" : {
636
+ "name" : "parent_priority" ,
637
+ },
638
+ },
639
+ }
640
+
641
+ transformer = ManifestComponentTransformer ()
642
+ actual_component = transformer .propagate_types_and_parameters (
643
+ "" , component_with_parent_priority , {}, use_parent_parameters = use_parent_parameters
644
+ )
645
+ assert actual_component == expected_component
646
+
647
+
648
+ def test_use_parent_parameters_none_behavior ():
649
+ """Test that use_parent_parameters=None maintains backward compatibility."""
650
+ component = {
651
+ "type" : "DeclarativeStream" ,
652
+ "retriever" : {
653
+ "type" : "SimpleRetriever" ,
654
+ "requester" : {
655
+ "type" : "HttpRequester" ,
656
+ "name" : "component_priority" ,
657
+ "url_base" : "https://coffee.example.io/v1/" ,
658
+ "http_method" : "GET" ,
659
+ "primary_key" : "id" ,
660
+ "$parameters" : {
661
+ "name" : "component_priority" ,
662
+ },
663
+ },
664
+ "$parameters" : {
665
+ "name" : "parent_priority" ,
666
+ },
667
+ },
668
+ }
669
+
670
+ expected_component_priority = {
671
+ "type" : "DeclarativeStream" ,
672
+ "retriever" : {
673
+ "type" : "SimpleRetriever" ,
674
+ "name" : "parent_priority" , # Parent parameter takes precedence (default behavior)
675
+ "requester" : {
676
+ "type" : "HttpRequester" ,
677
+ "name" : "component_priority" , # Component parameter takes precedence
678
+ "url_base" : "https://coffee.example.io/v1/" ,
679
+ "http_method" : "GET" ,
680
+ "primary_key" : "id" ,
681
+ "$parameters" : {
682
+ "name" : "component_priority" ,
683
+ },
684
+ },
685
+ "$parameters" : {
686
+ "name" : "parent_priority" ,
687
+ },
688
+ },
689
+ }
690
+
691
+ transformer = ManifestComponentTransformer ()
692
+ actual = transformer .propagate_types_and_parameters (
693
+ "" , component , {}, use_parent_parameters = None
694
+ )
695
+ assert actual == expected_component_priority
696
+
697
+
698
+ def test_dynamic_stream_use_parent_parameters_configuration ():
699
+ """Test that use_parent_parameters configuration is properly read from dynamic stream definitions."""
700
+
701
+ transformer = ManifestComponentTransformer ()
702
+
703
+ # Only parent has $parameters
704
+ component = {
705
+ "type" : "DeclarativeStream" ,
706
+ "retriever" : {
707
+ "type" : "SimpleRetriever" ,
708
+ },
709
+ "$parameters" : {"name" : "parent_name" },
710
+ }
711
+
712
+ # When use_parent_parameters=False, component parameters should take precedence (but there are none)
713
+ result_false = transformer .propagate_types_and_parameters (
714
+ "" , component , {}, use_parent_parameters = False
715
+ )
716
+ # When use_parent_parameters=True, parent parameters should take precedence (and are used)
717
+ result_true = transformer .propagate_types_and_parameters (
718
+ "" , component , {}, use_parent_parameters = True
719
+ )
720
+
721
+ # In both cases, since only the parent has $parameters, the retriever should get "parent_name"
722
+ assert result_false ["retriever" ]["name" ] == "parent_name"
723
+ assert result_true ["retriever" ]["name" ] == "parent_name"
724
+
725
+ # Now, add a $parameters to the retriever to see the difference
726
+ component_with_both = {
727
+ "type" : "DeclarativeStream" ,
728
+ "retriever" : {
729
+ "type" : "SimpleRetriever" ,
730
+ "$parameters" : {"name" : "retriever_name" },
731
+ },
732
+ "$parameters" : {"name" : "parent_name" },
733
+ }
734
+
735
+ result_false = transformer .propagate_types_and_parameters (
736
+ "" , component_with_both , {}, use_parent_parameters = False
737
+ )
738
+ result_true = transformer .propagate_types_and_parameters (
739
+ "" , component_with_both , {}, use_parent_parameters = True
740
+ )
741
+
742
+ # When use_parent_parameters=False, retriever's own $parameters win
743
+ assert result_false ["retriever" ]["name" ] == "retriever_name"
744
+ # When use_parent_parameters=True, parent's $parameters win
745
+ assert result_true ["retriever" ]["name" ] == "parent_name"
0 commit comments