import unittest from pathlib import Path from pptx.presentation import Presentation as PresentationClass from src.ppt.deck_generator import generate_presentation, parse_slides_payload class TestDeckGenerator(unittest.TestCase): def setUp(self): self.template_path = Path(__file__).resolve().parents[1] / "templates" / "base_template.pptx" self.valid_json = [ { "title": "Slide 1", "bullets": ["Content for slide 1"], "layout_type": "content_slide", }, { "title": "Slide 2", "bullets": ["Content for slide 2"], "layout_type": "split_slide", }, ] self.invalid_json = "This is not a valid JSON format" def test_generate_presentation_valid(self): presentation = generate_presentation(self.valid_json, self.template_path) self.assertIsInstance(presentation, PresentationClass) self.assertEqual(len(presentation.slides), len(self.valid_json)) def test_generate_presentation_invalid_json(self): with self.assertRaises(ValueError): generate_presentation(self.invalid_json, self.template_path) def test_generate_presentation_empty_json(self): empty_json = [] presentation = generate_presentation(empty_json, self.template_path) self.assertIsInstance(presentation, PresentationClass) self.assertEqual(len(presentation.slides), 0) def test_parse_slides_payload_from_fenced_json(self): raw = """```json [{"title": "A", "bullets": ["b1"], "layout_type": "title_slide"}] ```""" parsed = parse_slides_payload(raw) self.assertEqual(parsed[0]["title"], "A") self.assertEqual(parsed[0]["layout_type"], "title_slide") if __name__ == '__main__': unittest.main()