first commit
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
require dirname(__DIR__) . '/vendor/autoload.php';
|
||||
|
||||
use app\adminapi\logic\tcm\DiagnosisAiLogic;
|
||||
|
||||
function analysisParserExpect(bool $condition, string $message): void
|
||||
{
|
||||
if (!$condition) {
|
||||
fwrite(STDERR, "FAIL: {$message}\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
$parse = (new ReflectionClass(DiagnosisAiLogic::class))->getMethod('parseAnalysisResponse');
|
||||
$validPayload = [
|
||||
'diagnosis_advice' => '倾向气阴两虚,仍需结合舌脉复核。',
|
||||
'risk_assessment' => [
|
||||
['label' => '血糖控制不足风险', 'level' => 'high'],
|
||||
['label' => '信息缺失导致误判风险', 'level' => 'medium'],
|
||||
],
|
||||
'treatment_advice' => '复核血糖记录与并发症筛查,再由医师确定方案。',
|
||||
];
|
||||
$json = json_encode($validPayload, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
|
||||
analysisParserExpect(is_string($json), 'fixture JSON encodes');
|
||||
|
||||
$parsed = $parse->invoke(null, $json);
|
||||
analysisParserExpect($parsed === $validPayload, 'plain JSON parses without changing contract');
|
||||
|
||||
$fenced = "说明文字\n```json\n{$json}\n```\n后续文字";
|
||||
analysisParserExpect($parse->invoke(null, $fenced) === $validPayload, 'fenced JSON with surrounding text parses');
|
||||
|
||||
$wrapped = json_encode(['data' => $json], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
|
||||
analysisParserExpect(
|
||||
is_string($wrapped) && $parse->invoke(null, $wrapped) === $validPayload,
|
||||
'common string wrapper parses'
|
||||
);
|
||||
|
||||
$invalidLevel = $validPayload;
|
||||
$invalidLevel['risk_assessment'][0]['level'] = 'urgent';
|
||||
analysisParserExpect(
|
||||
$parse->invoke(null, json_encode($invalidLevel, JSON_UNESCAPED_UNICODE)) === null,
|
||||
'unknown risk enum is rejected'
|
||||
);
|
||||
|
||||
$tooManyRisks = $validPayload;
|
||||
$tooManyRisks['risk_assessment'] = array_fill(0, 9, ['label' => '风险', 'level' => 'low']);
|
||||
analysisParserExpect(
|
||||
$parse->invoke(null, json_encode($tooManyRisks, JSON_UNESCAPED_UNICODE)) === null,
|
||||
'more than eight risks is rejected'
|
||||
);
|
||||
|
||||
$overlongAdvice = $validPayload;
|
||||
$overlongAdvice['diagnosis_advice'] = str_repeat('诊', 1201);
|
||||
analysisParserExpect(
|
||||
$parse->invoke(null, json_encode($overlongAdvice, JSON_UNESCAPED_UNICODE)) === null,
|
||||
'overlong advice is rejected rather than truncated'
|
||||
);
|
||||
|
||||
$overlongLabel = $validPayload;
|
||||
$overlongLabel['risk_assessment'][0]['label'] = str_repeat('险', 121);
|
||||
analysisParserExpect(
|
||||
$parse->invoke(null, json_encode($overlongLabel, JSON_UNESCAPED_UNICODE)) === null,
|
||||
'overlong risk label is rejected'
|
||||
);
|
||||
|
||||
$wrongType = $validPayload;
|
||||
$wrongType['risk_assessment'] = 'low';
|
||||
analysisParserExpect(
|
||||
$parse->invoke(null, json_encode($wrongType, JSON_UNESCAPED_UNICODE)) === null,
|
||||
'non-array risk assessment is rejected'
|
||||
);
|
||||
analysisParserExpect($parse->invoke(null, 'not json') === null, 'non-JSON response fails safely');
|
||||
analysisParserExpect(
|
||||
$parse->invoke(null, str_repeat('x', 32769)) === null,
|
||||
'oversized upstream response fails safely'
|
||||
);
|
||||
|
||||
echo "Diagnosis AI analysis parser: OK\n";
|
||||
Reference in New Issue
Block a user