Miscs improvements (Interro02)
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
import contextlib
|
||||
import io
|
||||
import tempfile
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
from unittest.mock import patch
|
||||
|
||||
import pandas as pd
|
||||
from PIL import Image
|
||||
|
||||
from copienator.commands import add_final_score
|
||||
|
||||
|
||||
class AddFinalScoreTests(unittest.TestCase):
|
||||
def test_creates_complete_student_directory(self):
|
||||
with tempfile.TemporaryDirectory() as temporary:
|
||||
root = Path(temporary)
|
||||
source = root / "A Rendre" / "Student (01)"
|
||||
answers = source / "answers"
|
||||
answers.mkdir(parents=True)
|
||||
Image.new("RGB", (300, 200), "white").save(source / "Student.jpg")
|
||||
(source / "Student.pdf").write_bytes(b"pdf")
|
||||
(source / "score.json").write_bytes(b'{"Ex 1": "4"}')
|
||||
(source / "info.json").write_bytes(b'{"Ex 1": {}}')
|
||||
(answers / "Ex 1.jpg").write_bytes(b"answer")
|
||||
|
||||
output = root / "output"
|
||||
output.mkdir()
|
||||
(output / "Student.jpg").write_bytes(b"legacy jpeg")
|
||||
(output / "Student.pdf").write_bytes(b"legacy pdf")
|
||||
stale_answers = output / "Student" / "answers"
|
||||
stale_answers.mkdir(parents=True)
|
||||
(stale_answers / "001 - Ex 1.jpg").write_bytes(b"stale")
|
||||
scores = pd.DataFrame({0: ["Student"], 1: [12.39]})
|
||||
histogram = root / "histogramme.pdf"
|
||||
histogram.write_bytes(b"histogram")
|
||||
with patch.object(add_final_score.pd, "read_excel", return_value=scores), \
|
||||
patch.object(add_final_score, "HISTOGRAM_PATH", histogram), \
|
||||
contextlib.redirect_stdout(io.StringIO()):
|
||||
add_final_score.process_images(root, output)
|
||||
|
||||
student = output / "Student"
|
||||
self.assertEqual(
|
||||
{path.name for path in student.iterdir()},
|
||||
{"Student.jpg", "Student.pdf", "score.json", "info.json", "answers"},
|
||||
)
|
||||
self.assertEqual((student / "Student.pdf").read_bytes(), b"pdf")
|
||||
self.assertEqual((student / "score.json").read_bytes(), b'{"Ex 1": "4"}')
|
||||
self.assertEqual((student / "info.json").read_bytes(), b'{"Ex 1": {}}')
|
||||
self.assertEqual(
|
||||
(student / "answers" / "Ex 1.jpg").read_bytes(), b"answer"
|
||||
)
|
||||
self.assertFalse((output / "Student.jpg").exists())
|
||||
self.assertFalse((output / "Student.pdf").exists())
|
||||
self.assertFalse((student / "answers" / "001 - Ex 1.jpg").exists())
|
||||
self.assertEqual((output / "histogramme.pdf").read_bytes(), b"histogram")
|
||||
|
||||
def test_omits_answers_directory_when_it_was_not_generated(self):
|
||||
with tempfile.TemporaryDirectory() as temporary:
|
||||
root = Path(temporary)
|
||||
source = root / "A Rendre" / "Student (01)"
|
||||
source.mkdir(parents=True)
|
||||
Image.new("RGB", (300, 200), "white").save(source / "Student.jpg")
|
||||
(source / "Student.pdf").write_bytes(b"pdf")
|
||||
(source / "score.json").write_text("{}")
|
||||
(source / "info.json").write_text("{}")
|
||||
|
||||
output = root / "output"
|
||||
scores = pd.DataFrame({0: ["Student"], 1: [10]})
|
||||
with patch.object(add_final_score.pd, "read_excel", return_value=scores), \
|
||||
contextlib.redirect_stdout(io.StringIO()):
|
||||
add_final_score.process_images(root, output)
|
||||
|
||||
self.assertFalse((output / "Student" / "answers").exists())
|
||||
|
||||
def test_missing_histogram_warns_without_discarding_student_outputs(self):
|
||||
with tempfile.TemporaryDirectory() as temporary:
|
||||
root = Path(temporary)
|
||||
source = root / "A Rendre" / "Student (01)"
|
||||
source.mkdir(parents=True)
|
||||
Image.new("RGB", (300, 200), "white").save(source / "Student.jpg")
|
||||
scores = pd.DataFrame({0: ["Student"], 1: [10]})
|
||||
output = root / "output"
|
||||
messages = io.StringIO()
|
||||
|
||||
with patch.object(
|
||||
add_final_score.pd, "read_excel", return_value=scores
|
||||
), patch.object(
|
||||
add_final_score, "HISTOGRAM_PATH", root / "missing.pdf"
|
||||
), contextlib.redirect_stdout(messages):
|
||||
add_final_score.process_images(root, output)
|
||||
|
||||
self.assertTrue((output / "Student" / "Student.jpg").is_file())
|
||||
self.assertFalse((output / "histogramme.pdf").exists())
|
||||
self.assertIn("Missing histogram", messages.getvalue())
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user