test_files.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. """Tests de l'écriture des fichiers. Lancer depuis la racine du projet : python -m unittest"""
  2. import tempfile
  3. import unittest
  4. from pathlib import Path
  5. from bot.files import write_atomic
  6. from bot.memory import MemoryStore
  7. class WriteAtomicTest(unittest.TestCase):
  8. def setUp(self):
  9. self._tmp = tempfile.TemporaryDirectory()
  10. self.root = Path(self._tmp.name)
  11. def tearDown(self):
  12. self._tmp.cleanup()
  13. def test_writes_and_creates_directory(self):
  14. path = self.root / "a" / "b.md"
  15. write_atomic(path, "habite à Lyon\n")
  16. self.assertEqual(path.read_text(encoding="utf-8"), "habite à Lyon\n")
  17. self.assertEqual(list(path.parent.iterdir()), [path])
  18. def test_temporary_file_removed_on_failure(self):
  19. path = self.root / "b.md"
  20. path.mkdir() # un dossier à ce nom : le renommage échoue
  21. with self.assertRaises(OSError):
  22. write_atomic(path, "habite à Lyon")
  23. self.assertEqual(list(self.root.iterdir()), [path])
  24. class NormalizeTest(unittest.TestCase):
  25. def test_accepted_spellings(self):
  26. for name in ("membres/123.md", "membres/123", "/memories/membres/123.md", "memories/membres/123.md",
  27. "memories\\membres\\123.md"):
  28. self.assertEqual(MemoryStore._normalize(name), "membres/123.md", name)
  29. self.assertEqual(MemoryStore._normalize("memories/serveur.md"), "serveur.md")
  30. def test_no_way_out(self):
  31. # Le reste est refusé par _check : seuls serveur.md et membres/<id>.md existent.
  32. self.assertEqual(MemoryStore._normalize("memories/../registre.json"), "../registre.json")
  33. if __name__ == "__main__":
  34. unittest.main()