| | |
| | | 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), |