gaoluyang
2 天以前 8c65f898ed6e5b0c7a94c792c4562f6ec831dccd
yudao-module-qcreport/src/test/java/cn/iocoder/yudao/module/qcreport/engine/ReportEvaluatorTest.java
@@ -32,6 +32,28 @@
class ReportEvaluatorTest {
    @Test
    void numericRuleRequiresRealMeasurementsAndLimits() {
        ReportContext context = ReportContext.empty().setInspectionItems(List.of(
                item("未检测", "", 10.0, 0.0),
                item("缺规格", "5", null, null),
                item("已检测", "5", 10.0, 0.0)));
        List<QualityRuleDefinition> rules = List.of(
                itemRule("数值范围", "item.actualValue >= item.lowerLimit AND item.actualValue <= item.upperLimit"),
                new QualityRuleDefinition("report-rate", "整体合格率", RuleScope.REPORT,
                        "PASS_RATE(inspectionItems) >= 60", true));
        EvaluationOutcome outcome = ReportEvaluator.evaluate(context, rules);
        assertEquals("", outcome.context().getInspectionItems().get(0).getResult());
        assertEquals("", outcome.context().getInspectionItems().get(1).getResult());
        assertEquals("PASS", outcome.context().getInspectionItems().get(2).getResult());
        assertEquals("", outcome.context().getReport().getResult());
        assertEquals(QualityResult.PENDING_TEXT, outcome.context().getReport().getConclusion());
        assertEquals("33.33%", outcome.context().getReport().getPassRate());
        assertEquals(2, outcome.errors().size());
        assertTrue(outcome.errors().stream().allMatch(error -> error.contains("数值比较缺少有效实测值或规格限值")));
    }
    @Test
    void blankOrNonNumericResultsWithLimitsStayPendingAndCannotProduceAPass() {
        ReportContext context = ReportContext.empty().setInspectionItems(List.of(
                item("铅", "", 0.5, null),