From 5bf4114d6fc366fd86e9a75baefa7e29d0865ba7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9B=90=E7=B2=92=20Yanli?= Date: Wed, 14 Jan 2026 21:13:53 +0800 Subject: [PATCH] fix: increase name length limit in ExternalDatasetCreatePayload (#31000) Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: Asuka Minato --- api/controllers/console/datasets/external.py | 2 +- .../controllers/console/datasets/__init__.py | 1 + .../datasets/test_external_dataset_payload.py | 49 +++++++++++++++++++ 3 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 api/tests/unit_tests/controllers/console/datasets/__init__.py create mode 100644 api/tests/unit_tests/controllers/console/datasets/test_external_dataset_payload.py diff --git a/api/controllers/console/datasets/external.py b/api/controllers/console/datasets/external.py index 89c9fcad36..a70a7ce480 100644 --- a/api/controllers/console/datasets/external.py +++ b/api/controllers/console/datasets/external.py @@ -81,7 +81,7 @@ class ExternalKnowledgeApiPayload(BaseModel): class ExternalDatasetCreatePayload(BaseModel): external_knowledge_api_id: str external_knowledge_id: str - name: str = Field(..., min_length=1, max_length=40) + name: str = Field(..., min_length=1, max_length=100) description: str | None = Field(None, max_length=400) external_retrieval_model: dict[str, object] | None = None diff --git a/api/tests/unit_tests/controllers/console/datasets/__init__.py b/api/tests/unit_tests/controllers/console/datasets/__init__.py new file mode 100644 index 0000000000..a8d5622e13 --- /dev/null +++ b/api/tests/unit_tests/controllers/console/datasets/__init__.py @@ -0,0 +1 @@ +"""Unit tests for `controllers.console.datasets` controllers.""" diff --git a/api/tests/unit_tests/controllers/console/datasets/test_external_dataset_payload.py b/api/tests/unit_tests/controllers/console/datasets/test_external_dataset_payload.py new file mode 100644 index 0000000000..2ea1fcf544 --- /dev/null +++ b/api/tests/unit_tests/controllers/console/datasets/test_external_dataset_payload.py @@ -0,0 +1,49 @@ +from __future__ import annotations + +""" +Unit tests for the external dataset controller payload schemas. + +These tests focus on Pydantic validation rules so we can catch regressions +in request constraints (e.g. max length changes) without exercising the +full Flask/RESTX request stack. +""" + +import pytest +from pydantic import ValidationError + +from controllers.console.datasets.external import ExternalDatasetCreatePayload + + +def test_external_dataset_create_payload_allows_name_length_100() -> None: + """Ensure the `name` field accepts up to 100 characters (inclusive).""" + + # Build a request payload with a boundary-length name value. + name_100: str = "a" * 100 + payload = { + "external_knowledge_api_id": "ek-api-1", + "external_knowledge_id": "ek-1", + "name": name_100, + } + + model = ExternalDatasetCreatePayload.model_validate(payload) + assert model.name == name_100 + + +def test_external_dataset_create_payload_rejects_name_length_101() -> None: + """Ensure the `name` field rejects values longer than 100 characters.""" + + # Build a request payload that exceeds the max length by 1. + name_101: str = "a" * 101 + payload: dict[str, object] = { + "external_knowledge_api_id": "ek-api-1", + "external_knowledge_id": "ek-1", + "name": name_101, + } + + with pytest.raises(ValidationError) as exc_info: + ExternalDatasetCreatePayload.model_validate(payload) + + errors = exc_info.value.errors() + assert errors[0]["loc"] == ("name",) + assert errors[0]["type"] == "string_too_long" + assert errors[0]["ctx"]["max_length"] == 100