Files
Copies/tests/test_final_scores.py

43 lines
2.1 KiB
Python

import os
from pathlib import Path
import tempfile
import unittest
from unittest.mock import patch
import pandas as pd
from copienator import atomic_write_json
from copienator.final_scores import exported_scores
class ExportedFinalScoresTests(unittest.TestCase):
def test_legacy_export_uses_only_sheet_predating_export(self):
with tempfile.TemporaryDirectory() as temporary:
root = Path(temporary)/'Interro'
(root/'A Rendre/Alice (01)').mkdir(parents=True)
ods = root/'marks.ods'
ods.write_bytes(b'sheet')
image = root/'output/Interro/Alice/Alice.jpg'
image.parent.mkdir(parents=True)
image.write_bytes(b'export')
os.utime(ods, ns=(1000000,1000000))
os.utime(image, ns=(2000000,2000000))
with patch('copienator.final_scores.configuration.FINAL_SCORE_OUTPUT_DIR',root/'output'), \
patch('copienator.final_scores.configuration.FINAL_SCORE_ODS_PATH',ods), \
patch('pandas.read_excel',return_value=pd.DataFrame({0:['Alice'],1:[12.39]})) as read:
self.assertEqual(exported_scores(root,root), {'1':'12.3'})
os.utime(ods, ns=(3000000,3000000))
read.reset_mock()
self.assertEqual(exported_scores(root,root), {})
read.assert_not_called()
def test_no_final_mark_before_export_and_saved_marks_do_not_read_live_sheet(self):
with tempfile.TemporaryDirectory() as temporary:
root=Path(temporary)
with patch('copienator.final_scores.configuration.FINAL_SCORE_OUTPUT_DIR',root/'output'), \
patch('copienator.final_scores.configuration.FINAL_SCORE_ODS_PATH',root/'missing.ods'), \
patch('pandas.read_excel') as read:
self.assertEqual(exported_scores(root,root), {})
atomic_write_json(root/'.copienator/final_scores.json',
{'version':1,'copies':{'01':{'score':'0.0','name':'Alice'}}})
self.assertEqual(exported_scores(root,root), {'1':'0.0'})
read.assert_not_called()