""" 幻灯片 enabled 参数测试 测试页面级 enabled 参数的功能 """ import pytest from pathlib import Path from core.presentation import Presentation from renderers.pptx_renderer import PptxGenerator class TestSlideEnabled: """幻灯片 enabled 参数测试类""" def test_slide_enabled_false(self, temp_dir): """测试 enabled=false 的幻灯片被跳过""" yaml_content = """ slides: - elements: - type: text content: "Slide 1" box: [1, 1, 8, 1] font: {size: 44} - enabled: false elements: - type: text content: "Slide 2 (disabled)" box: [1, 1, 8, 1] font: {size: 44} - elements: - type: text content: "Slide 3" box: [1, 1, 8, 1] font: {size: 44} """ yaml_path = temp_dir / "test.yaml" yaml_path.write_text(yaml_content) pres = Presentation(str(yaml_path)) slides_data = pres.data.get('slides', []) # 统计启用的幻灯片 enabled_slides = [s for s in slides_data if s.get('enabled', True)] assert len(enabled_slides) == 2 # 只有 2 个启用 def test_slide_enabled_default_true(self, temp_dir): """测试未指定 enabled 时默认为 true""" yaml_content = """ slides: - elements: - type: text content: "Slide 1" box: [1, 1, 8, 1] font: {size: 44} """ yaml_path = temp_dir / "test.yaml" yaml_path.write_text(yaml_content) pres = Presentation(str(yaml_path)) slides_data = pres.data.get('slides', []) # 默认应该启用 assert slides_data[0].get('enabled', True) is True def test_slide_enabled_with_template(self, temp_dir): """测试 enabled 与模板共存""" # 创建模板 template_dir = temp_dir / "templates" template_dir.mkdir() template_file = template_dir / "title-slide.yaml" template_content = """ vars: - name: title required: true elements: - type: text box: [1, 2, 8, 1] content: "{title}" font: size: 44 """ template_file.write_text(template_content) yaml_content = """ slides: - template: title-slide enabled: false vars: title: "Disabled Title" - template: title-slide vars: title: "Enabled Title" """ yaml_path = temp_dir / "test.yaml" yaml_path.write_text(yaml_content) pres = Presentation(str(yaml_path), str(template_dir)) slides_data = pres.data.get('slides', []) # 第一个禁用,第二个启用 assert slides_data[0].get('enabled', True) is False assert slides_data[1].get('enabled', True) is True def test_slide_enabled_with_custom_slide(self, temp_dir): """测试 enabled 与自定义幻灯片共存""" yaml_content = """ slides: - enabled: false elements: - type: text content: "Disabled Custom" box: [1, 1, 8, 1] font: {size: 44} - elements: - type: text content: "Enabled Custom" box: [1, 1, 8, 1] font: {size: 44} """ yaml_path = temp_dir / "test.yaml" yaml_path.write_text(yaml_content) pres = Presentation(str(yaml_path)) slides_data = pres.data.get('slides', []) assert slides_data[0].get('enabled', True) is False assert slides_data[1].get('enabled', True) is True def test_slide_enabled_with_element_visible(self, temp_dir): """测试 enabled 和 visible 共存""" # 创建模板 template_dir = temp_dir / "templates" template_dir.mkdir() template_file = template_dir / "title-slide.yaml" template_content = """ vars: - name: title required: true - name: subtitle required: false default: "" elements: - type: text box: [1, 2, 8, 1] content: "{title}" font: size: 44 - type: text box: [1, 3.5, 8, 0.5] content: "{subtitle}" visible: "{subtitle != ''}" font: size: 24 """ template_file.write_text(template_content) yaml_content = """ slides: - template: title-slide enabled: true vars: title: "Title" subtitle: "" """ yaml_path = temp_dir / "test.yaml" yaml_path.write_text(yaml_content) pres = Presentation(str(yaml_path), str(template_dir)) slide_data = pres.data['slides'][0] # 页面启用 assert slide_data.get('enabled', True) is True # 渲染幻灯片,元素级 visible 会隐藏空副标题 rendered = pres.render_slide(slide_data) # 只有标题元素,副标题被 visible 隐藏 assert len(rendered['elements']) == 1 def test_slide_enabled_count(self, temp_dir): """测试渲染统计准确""" yaml_content = """ slides: - elements: - type: text content: "Slide 1" box: [1, 1, 8, 1] font: {size: 44} - enabled: false elements: - type: text content: "Slide 2" box: [1, 1, 8, 1] font: {size: 44} - enabled: false elements: - type: text content: "Slide 3" box: [1, 1, 8, 1] font: {size: 44} - elements: - type: text content: "Slide 4" box: [1, 1, 8, 1] font: {size: 44} - elements: - type: text content: "Slide 5" box: [1, 1, 8, 1] font: {size: 44} """ yaml_path = temp_dir / "test.yaml" yaml_path.write_text(yaml_content) pres = Presentation(str(yaml_path)) slides_data = pres.data.get('slides', []) # 总共 5 个幻灯片 assert len(slides_data) == 5 # 只有 3 个启用 enabled_slides = [s for s in slides_data if s.get('enabled', True)] assert len(enabled_slides) == 3