Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,6 @@ bindings = "pyo3"
python-source = "python"
module-name = "cocoindex._engine"
features = ["pyo3/extension-module"]

[project.optional-dependencies]
test = ["pytest"]
1 change: 1 addition & 0 deletions python/cocoindex/tests/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

69 changes: 69 additions & 0 deletions python/cocoindex/tests/test_convert.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
import dataclasses
import uuid
import datetime
from dataclasses import dataclass
import pytest
from cocoindex.convert import to_engine_value

@dataclass
class Order:
order_id: str
name: str
price: float

@dataclass
class Basket:
items: list

@dataclass
class Customer:
name: str
order: Order

def test_to_engine_value_basic_types():
assert to_engine_value(123) == 123
assert to_engine_value(3.14) == 3.14
assert to_engine_value("hello") == "hello"
assert to_engine_value(True) is True

def test_to_engine_value_uuid():
u = uuid.uuid4()
assert to_engine_value(u) == u.bytes

def test_to_engine_value_date_time_types():
d = datetime.date(2024, 1, 1)
assert to_engine_value(d) == d
t = datetime.time(12, 30)
assert to_engine_value(t) == t
dt = datetime.datetime(2024, 1, 1, 12, 30)
assert to_engine_value(dt) == dt

def test_to_engine_value_struct():
order = Order(order_id="O123", name="mixed nuts", price=25.0)
assert to_engine_value(order) == ["O123", "mixed nuts", 25.0]

def test_to_engine_value_list_of_structs():
orders = [Order("O1", "item1", 10.0), Order("O2", "item2", 20.0)]
assert to_engine_value(orders) == [["O1", "item1", 10.0], ["O2", "item2", 20.0]]

def test_to_engine_value_struct_with_list():
basket = Basket(items=["apple", "banana"])
assert to_engine_value(basket) == [["apple", "banana"]]

def test_to_engine_value_nested_struct():
customer = Customer(name="Alice", order=Order("O1", "item1", 10.0))
assert to_engine_value(customer) == ["Alice", ["O1", "item1", 10.0]]

def test_to_engine_value_empty_list():
assert to_engine_value([]) == []
assert to_engine_value([[]]) == [[]]

def test_to_engine_value_tuple():
assert to_engine_value(()) == []
assert to_engine_value((1, 2, 3)) == [1, 2, 3]
assert to_engine_value(((1, 2), (3, 4))) == [[1, 2], [3, 4]]
assert to_engine_value(([],)) == [[]]
assert to_engine_value(((),)) == [[]]

def test_to_engine_value_none():
assert to_engine_value(None) is None