Skip to content

Commit cacba3c

Browse files
committed
✨ Add trim_string_before pre-validator and corresponding tests for improved string handling in models
1 parent 9a7d6e3 commit cacba3c

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

packages/models-library/tests/test_utils_common_validators.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
from enum import Enum
2+
from typing import Annotated
23

34
import pytest
45
from models_library.utils.common_validators import (
56
create_enums_pre_validator,
67
empty_str_to_none_pre_validator,
78
none_to_empty_str_pre_validator,
89
null_or_none_str_to_none_validator,
10+
trim_string_before,
911
)
1012
from pydantic import BaseModel, ValidationError, field_validator
1113

@@ -89,3 +91,33 @@ class Model(BaseModel):
8991

9092
model = Model.model_validate({"message": ""})
9193
assert model == Model.model_validate({"message": ""})
94+
95+
96+
def test_trim_string_before():
97+
max_length = 10
98+
99+
class ModelWithTrim(BaseModel):
100+
text: Annotated[str, trim_string_before(max_length=max_length)]
101+
102+
# Test with string shorter than max_length
103+
short_text = "Short"
104+
model = ModelWithTrim(text=short_text)
105+
assert model.text == short_text
106+
107+
# Test with string equal to max_length
108+
exact_text = "1234567890" # 10 characters
109+
model = ModelWithTrim(text=exact_text)
110+
assert model.text == exact_text
111+
112+
# Test with string longer than max_length
113+
long_text = "This is a very long text that should be trimmed"
114+
model = ModelWithTrim(text=long_text)
115+
assert model.text == long_text[:max_length]
116+
assert len(model.text) == max_length
117+
118+
# Test with non-string value (should be left unchanged)
119+
class ModelWithTrimOptional(BaseModel):
120+
text: Annotated[str | None, trim_string_before(max_length=max_length)]
121+
122+
model = ModelWithTrimOptional(text=None)
123+
assert model.text is None

0 commit comments

Comments
 (0)