67 lines
2.1 KiB
Python
67 lines
2.1 KiB
Python
from unittest.mock import MagicMock
|
|
|
|
import pytest
|
|
|
|
from app.module.operator.parsers.parser_holder import ParserHolder
|
|
from app.module.operator.parsers.zip_parser import ZipParser
|
|
|
|
|
|
def test_get_parser_returns_zip_parser() -> None:
|
|
holder = ParserHolder()
|
|
parser = holder.get_parser("abc.zip")
|
|
assert isinstance(parser, ZipParser)
|
|
|
|
|
|
def test_get_parser_raises_for_unsupported_file() -> None:
|
|
holder = ParserHolder()
|
|
with pytest.raises(ValueError):
|
|
holder.get_parser("abc.txt")
|
|
|
|
|
|
def test_extract_to_delegates_to_target_parser() -> None:
|
|
holder = ParserHolder()
|
|
fake_parser = MagicMock()
|
|
holder._parsers["zip"] = fake_parser
|
|
|
|
holder.extract_to("zip", "archive.zip", "target")
|
|
|
|
fake_parser.extract_to.assert_called_once_with("archive.zip", "target")
|
|
|
|
|
|
def test_get_parser_supports_uppercase_extension() -> None:
|
|
holder = ParserHolder()
|
|
parser = holder.get_parser("ABC.ZIP")
|
|
assert isinstance(parser, ZipParser)
|
|
|
|
|
|
def test_parse_yaml_from_archive_delegates_to_selected_parser() -> None:
|
|
holder = ParserHolder()
|
|
fake_parser = MagicMock()
|
|
fake_result = object()
|
|
fake_parser.parse_yaml_from_archive.return_value = fake_result
|
|
holder._parsers["zip"] = fake_parser
|
|
|
|
result = holder.parse_yaml_from_archive("zip", "a.zip", "metadata.yml")
|
|
|
|
assert result is fake_result
|
|
fake_parser.parse_yaml_from_archive.assert_called_once_with("a.zip", "metadata.yml", None, None)
|
|
|
|
|
|
@pytest.mark.parametrize("name", ["a.tar", "a.gz", "a.tgz"])
|
|
def test_get_parser_supports_tar_like_extensions(name: str) -> None:
|
|
holder = ParserHolder()
|
|
parser = holder.get_parser(name)
|
|
assert parser is not None
|
|
|
|
|
|
def test_parse_yaml_from_archive_raises_when_type_unsupported() -> None:
|
|
holder = ParserHolder()
|
|
with pytest.raises(ValueError):
|
|
holder.parse_yaml_from_archive("rar", "a.rar", "metadata.yml")
|
|
|
|
|
|
def test_extract_to_raises_when_type_unsupported() -> None:
|
|
holder = ParserHolder()
|
|
with pytest.raises(ValueError):
|
|
holder.extract_to("rar", "a.rar", "tmp")
|