Harden MCP tool composition

This commit is contained in:
2026-09-24 21:00:48 +02:00
parent bbaaaf31c5
commit 78b00fedf8
7 changed files with 206 additions and 27 deletions
+43
View File
@@ -10,6 +10,7 @@ from roll_calculation import (
calculate_roll,
get_article,
modify_calculation,
transport_roll_inputs_from_roll_calculation,
)
@@ -131,6 +132,48 @@ class RollCalculationTests(unittest.TestCase):
self.assertEqual(calculation["effective_roll_length_m"], 50.0)
self.assertAlmostEqual(calculation["roll_weight_kg"], 512.4909)
def test_transport_roll_inputs_match_browser_average_and_display_rounding(self):
result = calculate_roll(representative_request())
self.assertEqual(
transport_roll_inputs_from_roll_calculation(result),
{
"roll_diameter_mm": 845.9,
"core_diameter_mm": 150.0,
"roll_width_m": 5.8,
"roll_weight_kg": 512.5,
"product_length_m": 50.0,
},
)
def test_transport_roll_inputs_use_browser_equivalent_half_rounding(self):
result = {
"status": "success",
"calculation": {
"average_diameter_mm": 1000.25,
"roll_weight_kg": 12.25,
"effective_roll_length_m": 10.0,
},
"effective_inputs": {
"core_diameter_mm": {"value": 150.0},
"width_m": {"value": 2.0},
},
}
inputs = transport_roll_inputs_from_roll_calculation(result)
self.assertEqual(inputs["roll_diameter_mm"], 1000.3)
self.assertEqual(inputs["roll_weight_kg"], 12.3)
def test_transport_roll_inputs_reject_unsuccessful_or_incomplete_results(self):
for result in (
{"status": "needs_clarification"},
{"status": "success", "calculation": {}, "effective_inputs": {}},
):
with self.subTest(result=result):
with self.assertRaises(ValueError):
transport_roll_inputs_from_roll_calculation(result)
def test_optional_weight_is_omitted_without_requesting_it(self):
result = calculate_roll(
representative_request(width_m=None, include_roll_weight=False)