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()