diff --git a/cg/services/orders/validation/models/order.py b/cg/services/orders/validation/models/order.py index 8f950f0c4c..ccc3d74341 100644 --- a/cg/services/orders/validation/models/order.py +++ b/cg/services/orders/validation/models/order.py @@ -1,7 +1,9 @@ -from pydantic import BaseModel, Field, PrivateAttr, model_validator +from pydantic import BaseModel, BeforeValidator, Field, PrivateAttr, model_validator +from typing_extensions import Annotated from cg.constants import DataDelivery from cg.models.orders.constants import OrderType +from cg.services.orders.validation.models.utils import set_null_to_false class Order(BaseModel): @@ -10,7 +12,7 @@ class Order(BaseModel): delivery_type: DataDelivery order_type: OrderType = Field(alias="project_type") name: str = Field(min_length=1) - skip_reception_control: bool = False + skip_reception_control: Annotated[bool, BeforeValidator(set_null_to_false)] = False _generated_ticket_id: int | None = PrivateAttr(default=None) _user_id: int = PrivateAttr(default=None) diff --git a/cg/services/orders/validation/models/utils.py b/cg/services/orders/validation/models/utils.py new file mode 100644 index 0000000000..1d8f27404c --- /dev/null +++ b/cg/services/orders/validation/models/utils.py @@ -0,0 +1,2 @@ +def set_null_to_false(value: bool | None) -> bool: + return value if value else False diff --git a/tests/services/orders/validation_service/test_model_validator.py b/tests/services/orders/validation_service/test_model_validator.py index c2ecb84068..a68eeb760f 100644 --- a/tests/services/orders/validation_service/test_model_validator.py +++ b/tests/services/orders/validation_service/test_model_validator.py @@ -130,3 +130,15 @@ def test_null_conversion(valid_order: TomteOrder, model_validator: ModelValidato # THEN the empty concentration should be converted to None assert order.cases[0].samples[0].concentration_ng_ul is None + + +def test_skip_rc_default_conversion(valid_order: TomteOrder, model_validator: ModelValidator): + # GIVEN a Tomte order with skip_reception_control set to None + valid_order.skip_reception_control = None + raw_order: dict = valid_order.model_dump(by_alias=True) + + # WHEN validating the order + order, _ = model_validator.validate(order=raw_order, model=TomteOrder) + + # THEN the skip_reception_control value should be converted to None + assert order.skip_reception_control is False