Spaces:
Sleeping
Sleeping
| import unittest | |
| import sys | |
| from pathlib import Path | |
| # Add project root to path | |
| ROOT_DIR = Path(__file__).resolve().parent.parent.parent | |
| sys.path.append(str(ROOT_DIR)) | |
| from engine.utils.normalizer import normalize_content | |
| class TestNormalizer(unittest.TestCase): | |
| def test_gemini_messy_format(self): | |
| """Teste le format typique renvoyé par Gemini.""" | |
| messy_input = """ | |
| ## Scene 1 : Le Phare (0-5s) | |
| L'Histoire : Il était une fois un phare. | |
| Audio : Corne de brume. | |
| **Visual Prompt** : Establishing shot of lighthouse, dark anime style --ar 9:16 | |
| """ | |
| output = normalize_content(messy_input) | |
| self.assertIn('**Visual Prompt :** Establishing shot of lighthouse, dark anime style --ar 9:16', output) | |
| self.assertIn('**Narration :** "Il était une fois un phare. Corne de brume."', output) | |
| self.assertNotIn('(0-5s)', output) | |
| def test_english_prompt_only(self): | |
| """Teste le cas où Gemini renvoie juste un 'Visual Prompt' sans narration explicite.""" | |
| messy_input = """ | |
| ## Scene 6 | |
| **Visual Prompt** : Inside the staircase. Thousands of eyes. --ar 9:16 | |
| """ | |
| output = normalize_content(messy_input) | |
| # Le visuel doit être capturé | |
| self.assertIn('**Visual Prompt :** Inside the staircase. Thousands of eyes. --ar 9:16', output) | |
| # La narration doit être vide (et non contenir le label Visual Prompt) | |
| self.assertIn('**Narration :** ""', output) | |
| def test_cinematic_fallback(self): | |
| """Teste le cas sans aucun label (brut).""" | |
| messy_input = """ | |
| ## Scene 1 | |
| Plan de drone sur la forêt. | |
| "Ils arrivent." | |
| """ | |
| output = normalize_content(messy_input) | |
| self.assertIn('**Visual Prompt :** Plan de drone sur la forêt.', output) | |
| self.assertIn('**Narration :** "Ils arrivent."', output) | |
| def test_idempotency(self): | |
| """Vérifie que normaliser un fichier déjà standard ne change rien.""" | |
| standard = """## Scene 1\n**Visual Prompt :** Test\n**Narration :** "Test"\n\n""" | |
| output = normalize_content(standard) | |
| # On ignore les différences de sauts de ligne finaux pour ce test | |
| self.assertEqual(output.strip(), standard.strip()) | |
| def test_cleaning_markers(self): | |
| """Vérifie le nettoyage des ** et des guillemets dans les champs.""" | |
| messy = """## Scene 1\n**Visual Prompt** : **Un monstre**\nNarration : "L'horreur"\n""" | |
| output = normalize_content(messy) | |
| self.assertIn('**Visual Prompt :** Un monstre', output) | |
| self.assertIn('**Narration :** "L\'horreur"', output) | |
| if __name__ == "__main__": | |
| unittest.main() | |