151 lines
5.3 KiB
Python
151 lines
5.3 KiB
Python
"""Tests for convertPPT class."""
|
|
|
|
import pytest
|
|
from pathlib import Path
|
|
from unittest.mock import Mock, MagicMock, patch
|
|
from pptopic.lib import convertPPT
|
|
|
|
|
|
class TestConvertPPTClass:
|
|
"""Test convertPPT class initialization and properties."""
|
|
|
|
def test_ttypes_mapping(self):
|
|
"""Test that TTYPES mapping is correct."""
|
|
assert convertPPT.TTYPES["JPG"] == 17
|
|
assert convertPPT.TTYPES["PNG"] == 18
|
|
assert convertPPT.TTYPES["PDF"] == 32
|
|
assert convertPPT.TTYPES["XPS"] == 33
|
|
|
|
@patch('pptopic.lib.sys.platform', 'win32')
|
|
def test_init_with_valid_file(self, tmp_path):
|
|
"""Test initialization with a valid file path."""
|
|
test_file = tmp_path / "test.pptx"
|
|
test_file.touch()
|
|
|
|
with patch('pptopic.lib.wcc.Dispatch') as mock_dispatch:
|
|
mock_app = MagicMock()
|
|
mock_dispatch.return_value = mock_app
|
|
|
|
ppt = convertPPT(test_file, trans="JPG")
|
|
assert ppt.savetype == "JPG"
|
|
mock_dispatch.assert_called_once_with('PowerPoint.Application')
|
|
|
|
@patch('pptopic.lib.sys.platform', 'win32')
|
|
def test_init_with_path_object(self, tmp_path):
|
|
"""Test initialization with Path object."""
|
|
test_file = tmp_path / "test.pptx"
|
|
test_file.touch()
|
|
|
|
with patch('pptopic.lib.wcc.Dispatch'):
|
|
ppt = convertPPT(Path(test_file), trans="PNG")
|
|
assert ppt.savetype == "PNG"
|
|
|
|
@patch('pptopic.lib.sys.platform', 'win32')
|
|
def test_init_with_nonexistent_file(self):
|
|
"""Test initialization with nonexistent file raises FileNotFoundError."""
|
|
with pytest.raises(FileNotFoundError, match="File not found"):
|
|
convertPPT("nonexistent.pptx")
|
|
|
|
@patch('pptopic.lib.sys.platform', 'win32')
|
|
def test_init_with_invalid_trans_type(self, tmp_path):
|
|
"""Test initialization with invalid save type raises ValueError."""
|
|
test_file = tmp_path / "test.pptx"
|
|
test_file.touch()
|
|
|
|
with pytest.raises(ValueError, match="Save type is not supported"):
|
|
convertPPT(test_file, trans="BMP")
|
|
|
|
@patch('pptopic.lib.sys.platform', 'win32')
|
|
def test_init_with_case_insensitive_trans(self, tmp_path):
|
|
"""Test that trans parameter is case insensitive."""
|
|
test_file = tmp_path / "test.pptx"
|
|
test_file.touch()
|
|
|
|
with patch('pptopic.lib.wcc.Dispatch'):
|
|
ppt = convertPPT(test_file, trans="jpg")
|
|
assert ppt.savetype == "JPG"
|
|
|
|
ppt = convertPPT(test_file, trans="Pdf")
|
|
assert ppt.savetype == "PDF"
|
|
|
|
|
|
class TestConvertPTTNonWindows:
|
|
"""Test convertPPT behavior on non-Windows systems."""
|
|
|
|
@patch('pptopic.lib.sys.platform', 'linux')
|
|
def test_init_on_non_windows_raises_error(self):
|
|
"""Test that initialization on non-Windows raises SystemError."""
|
|
with pytest.raises(SystemError, match="Only support Windows system"):
|
|
convertPPT("test.pptx")
|
|
|
|
|
|
class TestConvertPPTContextManager:
|
|
"""Test convertPPT as context manager."""
|
|
|
|
@patch('pptopic.lib.sys.platform', 'win32')
|
|
def test_context_manager_enter_exit(self, tmp_path):
|
|
"""Test __enter__ and __exit__ methods."""
|
|
test_file = tmp_path / "test.pptx"
|
|
test_file.touch()
|
|
|
|
with patch('pptopic.lib.wcc.Dispatch') as mock_dispatch:
|
|
mock_app = MagicMock()
|
|
mock_dispatch.return_value = mock_app
|
|
|
|
with convertPPT(test_file) as ppt:
|
|
assert ppt.savetype == "JPG"
|
|
|
|
mock_app.Quit.assert_called_once()
|
|
|
|
|
|
class TestConvertPPTSaveAs:
|
|
"""Test saveAs method."""
|
|
|
|
@patch('pptopic.lib.sys.platform', 'win32')
|
|
def test_saveas_default(self, tmp_path):
|
|
"""Test saveAs with default parameter."""
|
|
test_file = tmp_path / "test.pptx"
|
|
test_file.touch()
|
|
|
|
with patch('pptopic.lib.wcc.Dispatch'):
|
|
ppt = convertPPT(test_file, trans="PNG")
|
|
ppt.saveAs()
|
|
assert ppt.savetype == "JPG"
|
|
|
|
@patch('pptopic.lib.sys.platform', 'win32')
|
|
def test_saveas_with_valid_type(self, tmp_path):
|
|
"""Test saveAs with valid save type."""
|
|
test_file = tmp_path / "test.pptx"
|
|
test_file.touch()
|
|
|
|
with patch('pptopic.lib.wcc.Dispatch'):
|
|
ppt = convertPPT(test_file, trans="JPG")
|
|
ppt.saveAs("PDF")
|
|
assert ppt.savetype == "PDF"
|
|
|
|
@patch('pptopic.lib.sys.platform', 'win32')
|
|
def test_saveas_with_invalid_type(self, tmp_path):
|
|
"""Test saveAs with invalid save type raises ValueError."""
|
|
test_file = tmp_path / "test.pptx"
|
|
test_file.touch()
|
|
|
|
with patch('pptopic.lib.wcc.Dispatch'):
|
|
ppt = convertPPT(test_file, trans="JPG")
|
|
with pytest.raises(ValueError, match="Save type is not supported"):
|
|
ppt.saveAs("BMP")
|
|
|
|
|
|
class TestConvertPTTOpenClassmethod:
|
|
"""Test open class method."""
|
|
|
|
@patch('pptopic.lib.sys.platform', 'win32')
|
|
def test_open_classmethod(self, tmp_path):
|
|
"""Test open class method creates instance."""
|
|
test_file = tmp_path / "test.pptx"
|
|
test_file.touch()
|
|
|
|
with patch('pptopic.lib.wcc.Dispatch'):
|
|
ppt = convertPPT.open(test_file, trans="PNG")
|
|
assert ppt.savetype == "PNG"
|
|
assert isinstance(ppt, convertPPT)
|