Skip to content

Commit fd9b225

Browse files
committed
Add unit tests for error scenarios
1 parent 6cb895e commit fd9b225

File tree

2 files changed

+104
-0
lines changed

2 files changed

+104
-0
lines changed

airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3064,6 +3064,13 @@ def create_grouping_partition_router(
30643064
f"Underlying partition router must be a PartitionRouter subclass, got {type(underlying_router)}"
30653065
)
30663066

3067+
if isinstance(underlying_router, SubstreamPartitionRouter):
3068+
if any(
3069+
parent_config.request_option
3070+
for parent_config in underlying_router.parent_stream_configs
3071+
):
3072+
raise ValueError("Request options are not supported for GroupingPartitionRouter.")
3073+
30673074
return GroupingPartitionRouter(
30683075
group_size=model.group_size,
30693076
underlying_partition_router=underlying_router,

unit_tests/sources/declarative/parsers/test_model_to_component_factory.py

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3900,3 +3900,100 @@ def test_create_grouping_partition_router_with_underlying_router():
39003900
assert isinstance(parent_stream_configs[0].stream, DeclarativeStream)
39013901
assert parent_stream_configs[0].parent_key.eval({}) == "id"
39023902
assert parent_stream_configs[0].partition_field.eval({}) == "repository_id"
3903+
3904+
3905+
def test_create_grouping_partition_router_invalid_group_size():
3906+
"""Test that an invalid group_size (< 1) raises a ValueError."""
3907+
content = """
3908+
schema_loader:
3909+
file_path: "./source_example/schemas/{{ parameters['name'] }}.yaml"
3910+
name: "{{ parameters['stream_name'] }}"
3911+
retriever:
3912+
requester:
3913+
type: "HttpRequester"
3914+
path: "example"
3915+
record_selector:
3916+
extractor:
3917+
field_path: []
3918+
stream_A:
3919+
type: DeclarativeStream
3920+
name: "A"
3921+
primary_key: "id"
3922+
$parameters:
3923+
retriever: "#/retriever"
3924+
url_base: "https://airbyte.io"
3925+
schema_loader: "#/schema_loader"
3926+
sub_partition_router:
3927+
type: SubstreamPartitionRouter
3928+
parent_stream_configs:
3929+
- stream: "#/stream_A"
3930+
parent_key: id
3931+
partition_field: repository_id
3932+
partition_router:
3933+
type: GroupingPartitionRouter
3934+
underlying_partition_router: "#/sub_partition_router"
3935+
group_size: 0
3936+
"""
3937+
parsed_manifest = YamlDeclarativeSource._parse(content)
3938+
resolved_manifest = resolver.preprocess_manifest(parsed_manifest)
3939+
partition_router_manifest = transformer.propagate_types_and_parameters(
3940+
"", resolved_manifest["partition_router"], {}
3941+
)
3942+
3943+
with pytest.raises(ValueError, match="Group size must be greater than 0, got 0"):
3944+
factory.create_component(
3945+
model_type=GroupingPartitionRouterModel,
3946+
component_definition=partition_router_manifest,
3947+
config=input_config,
3948+
)
3949+
3950+
3951+
def test_create_grouping_partition_router_substream_with_request_option():
3952+
"""Test that a SubstreamPartitionRouter with request_option raises a ValueError."""
3953+
content = """
3954+
schema_loader:
3955+
file_path: "./source_example/schemas/{{ parameters['name'] }}.yaml"
3956+
name: "{{ parameters['stream_name'] }}"
3957+
retriever:
3958+
requester:
3959+
type: "HttpRequester"
3960+
path: "example"
3961+
record_selector:
3962+
extractor:
3963+
field_path: []
3964+
stream_A:
3965+
type: DeclarativeStream
3966+
name: "A"
3967+
primary_key: "id"
3968+
$parameters:
3969+
retriever: "#/retriever"
3970+
url_base: "https://airbyte.io"
3971+
schema_loader: "#/schema_loader"
3972+
sub_partition_router:
3973+
type: SubstreamPartitionRouter
3974+
parent_stream_configs:
3975+
- stream: "#/stream_A"
3976+
parent_key: id
3977+
partition_field: repository_id
3978+
request_option:
3979+
inject_into: request_parameter
3980+
field_name: "repo_id"
3981+
partition_router:
3982+
type: GroupingPartitionRouter
3983+
underlying_partition_router: "#/sub_partition_router"
3984+
group_size: 2
3985+
"""
3986+
parsed_manifest = YamlDeclarativeSource._parse(content)
3987+
resolved_manifest = resolver.preprocess_manifest(parsed_manifest)
3988+
partition_router_manifest = transformer.propagate_types_and_parameters(
3989+
"", resolved_manifest["partition_router"], {}
3990+
)
3991+
3992+
with pytest.raises(
3993+
ValueError, match="Request options are not supported for GroupingPartitionRouter."
3994+
):
3995+
factory.create_component(
3996+
model_type=GroupingPartitionRouterModel,
3997+
component_definition=partition_router_manifest,
3998+
config=input_config,
3999+
)

0 commit comments

Comments
 (0)