Skip to content

Commit cf73a16

Browse files
committed
Refactor tests: Add build_converter for engine-to-python
1 parent b2e4680 commit cf73a16

File tree

1 file changed

+15
-14
lines changed

1 file changed

+15
-14
lines changed

python/cocoindex/tests/test_convert.py

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,14 @@ class NestedStruct:
3333
orders: list[Order]
3434
count: int = 0
3535

36+
def build_converter(py_type, target_type=None):
37+
"""
38+
Helper to build a converter for the given Python type.
39+
If target_type is not specified, uses py_type as the target.
40+
"""
41+
engine_type = encode_enriched_type(py_type)["type"]
42+
return make_engine_value_converter([], engine_type, target_type or py_type)
43+
3644
def test_to_engine_value_basic_types():
3745
assert to_engine_value(123) == 123
3846
assert to_engine_value(3.14) == 3.14
@@ -89,13 +97,11 @@ def test_make_engine_value_converter_basic_types():
8997
(bool, True),
9098
# (type(None), None), # Removed unsupported NoneType
9199
]:
92-
engine_type = encode_enriched_type(py_type)["type"]
93-
converter = make_engine_value_converter([], engine_type, py_type)
100+
converter = build_converter(py_type)
94101
assert converter(value) == value
95102

96103
def test_make_engine_value_converter_struct():
97-
engine_type = encode_enriched_type(Order)["type"]
98-
converter = make_engine_value_converter([], engine_type, Order)
104+
converter = build_converter(Order)
99105
# All fields match
100106
engine_val = ["O123", "mixed nuts", 25.0, "default_extra"]
101107
assert converter(engine_val) == Order("O123", "mixed nuts", 25.0, "default_extra")
@@ -115,29 +121,25 @@ def test_make_engine_value_converter_struct():
115121
def test_make_engine_value_converter_struct_field_order():
116122
# Engine fields in different order
117123
# Use encode_enriched_type to avoid manual mistakes
118-
engine_type = encode_enriched_type(Order)["type"]
119-
converter = make_engine_value_converter([], engine_type, Order)
124+
converter = build_converter(Order)
120125
# Provide all fields in the correct order
121126
engine_val = ["O123", "mixed nuts", 25.0, "default_extra"]
122127
assert converter(engine_val) == Order("O123", "mixed nuts", 25.0, "default_extra")
123128

124129
def test_make_engine_value_converter_collections():
125130
# List of structs
126-
engine_type = encode_enriched_type(list[Order])["type"]
127-
converter = make_engine_value_converter([], engine_type, list[Order])
131+
converter = build_converter(list[Order])
128132
engine_val = [
129133
["O1", "item1", 10.0, "default_extra"],
130134
["O2", "item2", 20.0, "default_extra"]
131135
]
132136
assert converter(engine_val) == [Order("O1", "item1", 10.0, "default_extra"), Order("O2", "item2", 20.0, "default_extra")]
133137
# Struct with list field
134-
engine_type = encode_enriched_type(Customer)["type"]
135-
converter = make_engine_value_converter([], engine_type, Customer)
138+
converter = build_converter(Customer)
136139
engine_val = ["Alice", ["O1", "item1", 10.0, "default_extra"], [["vip"], ["premium"]]]
137140
assert converter(engine_val) == Customer("Alice", Order("O1", "item1", 10.0, "default_extra"), [Tag("vip"), Tag("premium")])
138141
# Struct with struct field
139-
engine_type = encode_enriched_type(NestedStruct)["type"]
140-
converter = make_engine_value_converter([], engine_type, NestedStruct)
142+
converter = build_converter(NestedStruct)
141143
engine_val = [
142144
["Alice", ["O1", "item1", 10.0, "default_extra"], [["vip"]]],
143145
[["O1", "item1", 10.0, "default_extra"], ["O2", "item2", 20.0, "default_extra"]],
@@ -151,8 +153,7 @@ def test_make_engine_value_converter_collections():
151153

152154
def test_make_engine_value_converter_defaults_and_missing_fields():
153155
# Missing optional field in engine value
154-
engine_type = encode_enriched_type(Customer)["type"]
155-
converter = make_engine_value_converter([], engine_type, Customer)
156+
converter = build_converter(Customer)
156157
engine_val = ["Alice", ["O1", "item1", 10.0, "default_extra"], None] # tags explicitly None
157158
assert converter(engine_val) == Customer("Alice", Order("O1", "item1", 10.0, "default_extra"), None)
158159
# Extra field in engine value (should ignore)

0 commit comments

Comments
 (0)