Files
massive-cloud/server/plugins/adapters/test_flatness_suite_retention.py

97 lines
3.7 KiB
Python

from pathlib import Path
from tempfile import TemporaryDirectory
from unittest import TestCase
from flatness_suite_run import _cleanup_temporary_artifacts, _config_bool
from flatness_suite_measurements import (
measurements_from_batch_result,
read_legacy_batch_rows,
)
TEMPLATE = (
Path(__file__).parents[3]
/ "alg"
/ "平整度、平面度、轮廓测量v1.5"
/ "excel"
/ "测量结果.xlsx"
)
class FlatnessSuiteRetentionConfigTest(TestCase):
def test_combined_contour_defaults_to_disabled(self) -> None:
self.assertFalse(_config_bool({}, "keepCombinedContour", False))
def test_explicit_boolean_or_string_can_enable_retention(self) -> None:
self.assertTrue(_config_bool({"keepCombinedContour": True}, "keepCombinedContour"))
self.assertTrue(_config_bool({"keepCombinedContour": "true"}, "keepCombinedContour"))
self.assertFalse(_config_bool({"keepCombinedContour": "false"}, "keepCombinedContour"))
def test_cleanup_removes_only_known_temporary_artifacts(self) -> None:
with TemporaryDirectory() as temp:
out_dir = Path(temp)
temporary = out_dir / "_roi_cropped.ply"
result = out_dir / "contour.ply"
temporary.touch()
result.touch()
_cleanup_temporary_artifacts(out_dir)
self.assertFalse(temporary.exists())
self.assertTrue(result.exists())
class FlatnessSuiteBatchMeasurementTest(TestCase):
def test_uses_top_level_rows_instead_of_nested_sample_results(self) -> None:
result = {
"rows": [{"task_id": "11", "mean": 1.25, "status": "成功"}],
"results": {
"11": {
"11": {"distance_stats": {"mean": 999}},
},
},
}
measurements = measurements_from_batch_result(result, TEMPLATE)
self.assertEqual(len(measurements), 1)
self.assertEqual(measurements[0]["name"], "任务11 · 车钩面板的平整度")
self.assertEqual(measurements[0]["value"], 1.25)
self.assertEqual(measurements[0]["toleranceLabel"], "0.5mm")
def test_maps_success_partial_success_failure_and_empty_value(self) -> None:
result = {
"rows": [
{"task_id": 11, "mean": 0.1, "status": "成功"},
{"task_id": 13, "mean": 0.2, "status": "部分成功"},
{"task_id": 17, "mean": None, "status": "失败"},
],
"results": {},
}
measurements = measurements_from_batch_result(result, TEMPLATE)
self.assertEqual([item["status"] for item in measurements], ["pass", "warning", "fail"])
self.assertEqual(measurements[0]["passLabel"], "成功")
self.assertEqual(measurements[1]["warningLabel"], "部分成功")
self.assertEqual(measurements[2]["failLabel"], "失败")
self.assertIsNone(measurements[2]["value"])
def test_missing_template_has_explicit_error(self) -> None:
with self.assertRaisesRegex(FileNotFoundError, "Excel 文件不存在"):
measurements_from_batch_result(
{"rows": [{"task_id": 11, "mean": 0.1, "status": "成功"}]},
Path("missing-template.xlsx"),
)
def test_new_template_is_not_misread_as_legacy_summary(self) -> None:
with self.assertRaisesRegex(ValueError, "平均值"):
read_legacy_batch_rows(TEMPLATE)
def test_malformed_excel_has_explicit_error(self) -> None:
with TemporaryDirectory() as temp:
invalid = Path(temp) / "contour.xlsx"
invalid.write_text("not an xlsx", encoding="utf-8")
with self.assertRaisesRegex(ValueError, "无法解析 Excel"):
read_legacy_batch_rows(invalid)