feat: support image inputs in assistant tests
This commit is contained in:
@@ -9,6 +9,7 @@ from db.models import TestCase, TestRunCase, TestSuite
|
||||
from db.session import get_session
|
||||
from fastapi import APIRouter, Depends, HTTPException, Query
|
||||
from services.auth import require_admin
|
||||
from services.test_case_assets import canonicalize_test_assets
|
||||
from sqlalchemy import func, select
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from test_schemas import (
|
||||
@@ -79,13 +80,6 @@ def _case_out(row: TestCase) -> TestCaseOut:
|
||||
)
|
||||
|
||||
|
||||
def _apply_case_write(row: TestCase, body: TestCaseWrite) -> None:
|
||||
row.name = body.name.strip()
|
||||
row.description = body.description.strip()
|
||||
row.input_mode = body.input_mode
|
||||
row.definition = body.definition().model_dump(mode="json", by_alias=True)
|
||||
|
||||
|
||||
async def _renumber_cases(session: AsyncSession, suite_id: str) -> None:
|
||||
rows = (
|
||||
await session.execute(
|
||||
@@ -232,13 +226,18 @@ async def create_test_case(
|
||||
max_order = await session.scalar(
|
||||
select(func.max(TestCase.sort_order)).where(TestCase.suite_id == suite_id)
|
||||
)
|
||||
definition = body.definition()
|
||||
try:
|
||||
await canonicalize_test_assets(session, definition)
|
||||
except ValueError as exc:
|
||||
raise HTTPException(422, str(exc)) from exc
|
||||
row = TestCase(
|
||||
id=_new_id("tc"),
|
||||
suite_id=suite_id,
|
||||
name=body.name.strip(),
|
||||
description=body.description.strip(),
|
||||
input_mode=body.input_mode,
|
||||
definition=body.definition().model_dump(mode="json", by_alias=True),
|
||||
definition=definition.model_dump(mode="json", by_alias=True),
|
||||
sort_order=int(max_order if max_order is not None else -1) + 1,
|
||||
last_result="not_run",
|
||||
)
|
||||
@@ -315,7 +314,15 @@ async def update_test_case(
|
||||
row = await session.get(TestCase, case_id)
|
||||
if row is None:
|
||||
raise HTTPException(404, "测试用例不存在")
|
||||
_apply_case_write(row, body)
|
||||
definition = body.definition()
|
||||
try:
|
||||
await canonicalize_test_assets(session, definition)
|
||||
except ValueError as exc:
|
||||
raise HTTPException(422, str(exc)) from exc
|
||||
row.name = body.name.strip()
|
||||
row.description = body.description.strip()
|
||||
row.input_mode = body.input_mode
|
||||
row.definition = definition.model_dump(mode="json", by_alias=True)
|
||||
await _touch_suite(session, row.suite_id)
|
||||
await session.commit()
|
||||
await session.refresh(row)
|
||||
|
||||
Reference in New Issue
Block a user