Files
DocsGPT/tests/parser/file/test_pptx_parser.py
2025-09-26 16:07:12 +05:30

62 lines
1.8 KiB
Python

import pytest
from pathlib import Path
from unittest.mock import patch
from application.parser.file.pptx_parser import PPTXParser
def test_pptx_init_parser():
parser = PPTXParser()
assert isinstance(parser._init_parser(), dict)
assert not parser.parser_config_set
parser.init_parser()
assert parser.parser_config_set
def _fake_presentation_with(slides_shapes_texts):
class Shape:
def __init__(self, text=None):
if text is not None:
self.text = text
class Slide:
def __init__(self, texts):
self.shapes = [Shape(t) for t in texts]
class Pres:
def __init__(self, _file):
self.slides = [Slide(texts) for texts in slides_shapes_texts]
return Pres
def test_pptx_parser_concat_true():
slides = [["Hello ", "World"], ["Slide2"]]
FakePres = _fake_presentation_with(slides)
import sys, types
fake_pptx = types.ModuleType("pptx")
fake_pptx.Presentation = FakePres
parser = PPTXParser()
with patch.dict(sys.modules, {"pptx": fake_pptx}):
result = parser.parse_file(Path("deck.pptx"))
assert result == "Hello World\nSlide2"
def test_pptx_parser_list_mode():
slides = [[" A ", "B"], [" C "]]
FakePres = _fake_presentation_with(slides)
import sys, types
fake_pptx = types.ModuleType("pptx")
fake_pptx.Presentation = FakePres
parser = PPTXParser()
parser._concat_slides = False
with patch.dict(sys.modules, {"pptx": fake_pptx}):
result = parser.parse_file(Path("deck.pptx"))
assert result == ["A B", "C"]
def test_pptx_parser_import_error():
parser = PPTXParser()
import sys
with patch.dict(sys.modules, {"pptx": None}):
with pytest.raises(ImportError, match="pptx module is required to read .PPTX files"):
parser.parse_file(Path("missing.pptx"))