cropping summaries

This commit is contained in:
2026-09-10 20:03:23 +02:00
parent dfce79f240
commit 060859ddef
4 changed files with 120 additions and 4 deletions
@@ -49,6 +49,8 @@ class CropExerciseBottomsCommandTests(unittest.TestCase):
0,
)
self.assertIn("1 PDF remplacé", log.getvalue())
self.assertIn("1 exercice(s) rogné(s)", log.getvalue())
self.assertIn("Rognage moyen des exercices modifiés", log.getvalue())
with pymupdf.open(self.large) as cropped:
self.assertLess(cropped[0].rect.height, 250)
self.assertEqual(self.short.read_bytes(), self.short_original)
@@ -68,6 +70,37 @@ class CropExerciseBottomsCommandTests(unittest.TestCase):
)
self.assertTrue((backups[0].parents[2] / "report.json").is_file())
def test_crop_statistics_average_percentages_by_exercise(self):
records = [
{
"file": "Copies/Copie01/Ex 1.pdf",
"height_lines": 10.0,
"bottom_removed_lines": 4.0,
"status": "cropped",
},
{
"file": "Copies/Copie01/Ex 1.pdf",
"height_lines": 10.0,
"bottom_removed_lines": 0.0,
"status": "skipped-short",
},
{
"file": "Copies/Copie01/Ex 2.pdf",
"height_lines": 10.0,
"bottom_removed_lines": 5.0,
"status": "cropped",
},
{
"file": "Copies/Copie01/Ex 3.pdf",
"height_lines": 10.0,
"bottom_removed_lines": 0.0,
"status": "unchanged-small-crop",
},
]
count, average = crop_exercise_bottoms.crop_statistics(records)
self.assertEqual(count, 2)
self.assertAlmostEqual(average, 35.0)
def test_detection_failure_does_not_publish_an_earlier_result(self):
broken = self.answers / "Ex 3.pdf"
broken.write_bytes(b"not a PDF")
+29
View File
@@ -37,6 +37,9 @@ class CropMarginsCommandTests(unittest.TestCase):
with contextlib.redirect_stdout(io.StringIO()) as log:
self.assertEqual(main(["crop-margins", str(self.workspace.root)]), 0)
self.assertIn("Page 2/2", log.getvalue())
self.assertIn("1/2 pages rognées", log.getvalue())
self.assertIn("Rognage moyen des pages modifiées", log.getvalue())
self.assertIn("page(s) rognée(s) de plus de 30 %", log.getvalue())
with pymupdf.open(self.source) as result:
self.assertEqual(len(result), 2)
self.assertLess(result[0].rect.height, 150)
@@ -50,6 +53,32 @@ class CropMarginsCommandTests(unittest.TestCase):
self.assertEqual(backups[0].read_bytes(), self.original)
self.assertTrue((backups[0].parent.parent/"report.json").is_file())
def test_crop_statistics_use_only_modified_pages(self):
records = [
{
"top_removed_mm": 10.0,
"bottom_removed_mm": 20.0,
"original_cropbox": [0, 0, 200, 300],
"rotation": 0,
},
{
"top_removed_mm": 40.0,
"bottom_removed_mm": 0.0,
"original_cropbox": [0, 0, 200, 300],
"rotation": 90,
},
{
"top_removed_mm": 0.0,
"bottom_removed_mm": 0.0,
"original_cropbox": [0, 0, 200, 300],
"rotation": 0,
},
]
count, average, over_thirty = crop_margins.crop_statistics(records)
self.assertEqual(count, 2)
self.assertAlmostEqual(average, (28.3465 + 56.6929) / 2, places=3)
self.assertEqual(over_thirty, 1)
def test_failure_or_interruption_never_publishes_partial_batch(self):
second = self.workspace.copies_dir/"Copie02.pdf"
second.write_bytes(self.original)