from schemas.agent_input import AgentInput from schemas.chat_message_request import ChatMessageRequestDTO from schemas.stream_input import StreamInputDTO def test_chat_message_request_accepts_frontend_dto_shape(): payload = ChatMessageRequestDTO( query="查询 SO 4020438779 的 eta 信息", inputs={"region": "ANZ", "filters": ["top10"]}, response_mode="streaming", user="tester-001", conversation_id="cid-123", files=[{"type": "image", "transfer_method": "remote_url", "url": "https://example.com/a.png"}], ) assert payload.query == "查询 SO 4020438779 的 eta 信息" assert payload.inputs == {"region": "ANZ", "filters": ["top10"]} assert payload.response_mode == "streaming" assert payload.user == "tester-001" assert payload.conversation_id == "cid-123" assert payload.files[0].model_dump()["type"] == "image" def test_chat_message_request_defaults_inputs_and_files(): payload = ChatMessageRequestDTO( query="hello", response_mode="blocking", user="tester-002", ) assert payload.inputs == {} assert payload.files == [] assert payload.conversation_id is None def test_chat_message_request_accepts_non_dict_inputs_object(): payload = ChatMessageRequestDTO( query="hello", inputs=[{"name": "foo"}], response_mode="streaming", user="tester-003", ) assert payload.inputs == [{"name": "foo"}] def test_chat_message_request_allows_nullable_java_dto_fields(): payload = ChatMessageRequestDTO() assert payload.query is None assert payload.response_mode is None assert payload.user is None assert payload.conversation_id is None assert payload.inputs == {} assert payload.files == [] def test_chat_message_request_accepts_legacy_auto_generate_name_field(): payload = ChatMessageRequestDTO( query="hello", response_mode="streaming", user="tester-legacy", auto_generate_name=True, ) assert payload.auto_generate_name is True assert payload.query == "hello" def test_agent_input_uses_same_schema_as_chat_message_request(): payload = AgentInput( query="hello", response_mode="blocking", user="tester-004", inputs={"k": "v"}, files=[{"type": "text"}], ) assert isinstance(payload, ChatMessageRequestDTO) assert payload.inputs == {"k": "v"} assert payload.files[0].model_dump()["type"] == "text" def test_stream_input_uses_same_schema_as_chat_message_request(): payload = StreamInputDTO( query="hello", response_mode="streaming", user="tester-005", inputs={"region": "ANZ"}, ) assert isinstance(payload, ChatMessageRequestDTO) assert payload.response_mode == "streaming" assert payload.user == "tester-005"