ungana

Client application that creates customized .ics files for ticket booking and event reservations
Info | Log | Files | Refs | README

test_attachment_manager.py (2421B)


      1 import unittest
      2 import tempfile
      3 import os
      4 import stat
      5 import hashlib
      6 
      7 from ungana.attachment.attachment_manager import AttachmentManager
      8 
      9 class TestAttachmentManager(unittest.TestCase):
     10 
     11     def setUp(self):
     12         self.manager = AttachmentManager(cfg={"OBJ_STORES": []})
     13 
     14 
     15     def _make_temp_file(self, suffix, content=b"foo bar"):
     16         """Helper to create a temp file with given content."""
     17         fd, path = tempfile.mkstemp(suffix=suffix)
     18         with os.fdopen(fd, "wb") as f:
     19             f.write(content)
     20         return path
     21 
     22     def test_create_attachment_image_poster(self):
     23         path = self._make_temp_file(".png", b"fakeimage")
     24         result = self.manager.create_attachment(path, ctx="poster")
     25 
     26         self.assertEqual(result[0], "ATTACH")
     27         self.assertTrue(result[1].startswith("sha256:"))
     28         self.assertEqual(result[2]["CTX"], "poster")
     29         self.assertEqual(result[2]["FMTTYPE"], "image/png")
     30 
     31     def test_create_attachment_text_long(self):
     32         path = self._make_temp_file(".txt", b"xyz xyz xyz")
     33         result = self.manager.create_attachment(path, ctx="long")
     34         self.assertEqual(result[2]["FMTTYPE"], "text/plain")
     35 
     36     def test_create_attachment_file_not_found(self):
     37         with self.assertRaises(FileNotFoundError):
     38             self.manager.create_attachment("does_not_exist.txt", ctx="poster")
     39 
     40     def test_create_attachment_permission_denied(self):
     41         path = self._make_temp_file(".txt")
     42         os.chmod(path, 0) 
     43         try:
     44             with self.assertRaises(PermissionError):
     45                 self.manager.create_attachment(path, ctx="long")
     46         finally:
     47             os.chmod(path, stat.S_IRUSR | stat.S_IWUSR)  # clean up
     48 
     49     def test_validate_wrong_type_for_poster(self):
     50         path = self._make_temp_file(".txt", b"not an image")
     51         with self.assertRaises(ValueError):
     52             self.manager.validate(path, ctx="poster")
     53 
     54     def test_validate_wrong_type_for_long(self):
     55         path = self._make_temp_file(".png", b"fakeimage")
     56         with self.assertRaises(ValueError):
     57             self.manager.validate(path, ctx="long")
     58 
     59     def test_digest_correctness(self):
     60         content = b"foobar"
     61         path = self._make_temp_file(".txt", content)
     62         digest = self.manager.digest(path)
     63         expected = hashlib.sha256(content).hexdigest()
     64         self.assertEqual(digest, expected)
     65 
     66 
     67 if __name__ == "__main__":
     68     unittest.main()