import pytest
from pydantic import ValidationError
from openjiuwen_studio.schemas.deepsearch import (
TemplateImportRequest,
TemplateUpdateRequest,
)
EXPECTED_TEMPLATE_CONTENT_LIMIT = 5 * 1000 * 1000
EXPECTED_TEMPLATE_DESC_LIMIT = 2000
EXPECTED_TEMPLATE_FILE_NAME_LIMIT = 255
EXPECTED_TEMPLATE_NAME_LIMIT = 255
def _template_import_payload(**overrides):
payload = {
"space_id": "space-1",
"file_name": "template.docx",
"file_stream": "A",
"is_template": True,
"template_name": "Template",
"template_desc": "Description",
"model_config_id": 1,
}
payload.update(overrides)
return payload
def _template_update_payload(**overrides):
payload = {
"space_id": "space-1",
"template_id": 1,
"template_content": "A",
"template_name": "Template",
"template_desc": "Description",
}
payload.update(overrides)
return payload
def test_template_import_accepts_content_at_configured_limit():
request = TemplateImportRequest(
**_template_import_payload(file_stream="A" * EXPECTED_TEMPLATE_CONTENT_LIMIT)
)
assert len(request.file_stream) == EXPECTED_TEMPLATE_CONTENT_LIMIT
def test_template_import_rejects_oversized_file_stream():
with pytest.raises(ValidationError):
TemplateImportRequest(
**_template_import_payload(
file_stream="A" * (EXPECTED_TEMPLATE_CONTENT_LIMIT + 1)
)
)
def test_template_update_rejects_oversized_template_content():
with pytest.raises(ValidationError):
TemplateUpdateRequest(
**_template_update_payload(
template_content="A" * (EXPECTED_TEMPLATE_CONTENT_LIMIT + 1)
)
)
@pytest.mark.parametrize(
("field_name", "limit"),
[
("file_name", EXPECTED_TEMPLATE_FILE_NAME_LIMIT),
("template_name", EXPECTED_TEMPLATE_NAME_LIMIT),
("template_desc", EXPECTED_TEMPLATE_DESC_LIMIT),
],
)
def test_template_import_rejects_oversized_metadata_fields(field_name, limit):
with pytest.raises(ValidationError):
TemplateImportRequest(**_template_import_payload(**{field_name: "A" * (limit + 1)}))
@pytest.mark.parametrize(
("field_name", "limit"),
[
("template_name", EXPECTED_TEMPLATE_NAME_LIMIT),
("template_desc", EXPECTED_TEMPLATE_DESC_LIMIT),
],
)
def test_template_update_rejects_oversized_metadata_fields(field_name, limit):
with pytest.raises(ValidationError):
TemplateUpdateRequest(**_template_update_payload(**{field_name: "A" * (limit + 1)}))