import os import unittest from unittest.mock import patch from app.features.memoir.memoir_images.settings import ( DEFAULT_LIBLIB_TEMPLATE_UUID, MemoirImageSettings, ) class MemoirImageSettingsTest(unittest.TestCase): @patch.dict( os.environ, { "MEMOIR_IMAGE_MAX_PER_CHAPTER": "not-an-int", "MEMOIR_IMAGE_CHARS_PER_EXTRA": "bad-extra", "MEMOIR_IMAGE_MAX_CAP": "bad-cap", "MEMOIR_IMAGE_POLL_INTERVAL": "bad", "MEMOIR_IMAGE_MAX_ATTEMPTS": "oops", }, clear=False, ) def test_from_env_falls_back_to_defaults_for_invalid_integers(self): settings = MemoirImageSettings.from_env() self.assertEqual(settings.max_per_chapter, 2) self.assertEqual(settings.chars_per_extra_image, 1500) self.assertEqual(settings.max_images_cap, 8) self.assertEqual(settings.poll_interval_seconds, 3) self.assertEqual(settings.max_attempts, 60) @patch.dict(os.environ, {}, clear=False) def test_from_env_uses_shared_template_uuid_default(self): with patch.dict(os.environ, {"LIBLIB_TEMPLATE_UUID": ""}, clear=False): settings = MemoirImageSettings.from_env() self.assertEqual(settings.liblib_template_uuid, DEFAULT_LIBLIB_TEMPLATE_UUID) def test_effective_max_images_never_drops_below_base_max_per_chapter(self): settings = MemoirImageSettings(enabled=True, max_per_chapter=2, max_images_cap=1) self.assertEqual(settings.effective_max_images(0), 2)