Files
Marble-shell-theme/tests/utils/gresource/test_gresource.py
Vladyslav Hroshev 31e1a3deb9 TESTS TESTS ADDED MORE TEST TESTED GRESOURCES TESTS TESTS I LOVE TESTS SO MUCH
- Fully covered gresource orchestrator and it helpers with tests
- Use abstract command runner INSTEAD OF SUBPROCESS in gresources
- Replaced some subprocesses by builtin functions
2025-04-06 21:56:27 +03:00

130 lines
4.6 KiB
Python

import os.path
import shutil
import unittest
from unittest.mock import patch
from scripts import config
from scripts.utils.gresource.gresource import Gresource
from ..._helpers import create_dummy_file, try_remove_file
from ..._helpers.dummy_logger_factory import DummyLoggerFactory
from ..._helpers.dummy_runner import DummyRunner
class GresourceTestCase(unittest.TestCase):
def setUp(self):
self.gresource_file = "test.gresource"
self.temp_folder = os.path.join(config.temp_tests_folder, "gresource_temp")
self.destination = os.path.join(config.temp_tests_folder, "gresource_dest")
self.temp_file = os.path.join(self.temp_folder, self.gresource_file)
self.destination_file = os.path.join(self.destination, self.gresource_file)
self.logger = DummyLoggerFactory()
self.runner = DummyRunner()
self.gresource = Gresource(
self.gresource_file, self.temp_folder, self.destination,
logger_factory=self.logger, runner=self.runner
)
def tearDown(self):
shutil.rmtree(self.temp_folder, ignore_errors=True)
shutil.rmtree(self.destination, ignore_errors=True)
def test_use_backup_gresource(self):
destination_file = os.path.join(self.destination, self.gresource_file)
create_dummy_file(destination_file)
self.gresource.backup()
self.gresource.use_backup_gresource()
assert self.gresource._active_source_gresource != self.gresource._destination_gresource
assert os.path.exists(self.gresource._active_source_gresource)
try_remove_file(self.gresource._active_source_gresource)
try_remove_file(destination_file)
def test_use_backup_gresource_not_found(self):
destination_file = os.path.join(self.destination, self.gresource_file)
try_remove_file(destination_file)
with self.assertRaises(FileNotFoundError):
self.gresource.use_backup_gresource()
def test_extract(self):
"""Test that extract creates and calls GresourceExtractor correctly."""
with patch('scripts.utils.gresource.gresource.GresourceExtractor') as mock_extractor_class:
mock_extractor_instance = mock_extractor_class.return_value
self.gresource.extract()
mock_extractor_class.assert_called_once_with(
self.gresource._active_source_gresource,
self.temp_folder,
logger_factory=self.logger,
runner=self.runner
)
mock_extractor_instance.extract.assert_called_once()
def test_compile(self):
"""Test that compile creates and calls GresourceCompiler correctly."""
with (patch('scripts.utils.gresource.gresource.GresourceCompiler') as mock_compiler_class):
mock_compiler_instance = mock_compiler_class.return_value
self.gresource.compile()
mock_compiler_class.assert_called_once_with(
self.temp_folder,
self.gresource._temp_gresource,
logger_factory=self.logger,
runner=self.runner
)
mock_compiler_instance.compile.assert_called_once()
def test_backup(self):
create_dummy_file(self.destination_file)
self.gresource.backup()
backup = self.gresource.use_backup_gresource()
assert os.path.exists(backup)
self.gresource.restore()
def test_backup_not_found(self):
try_remove_file(self.destination_file)
with self.assertRaises(FileNotFoundError):
self.gresource.backup()
def test_restore(self):
destination_file = os.path.join(self.destination, self.gresource_file)
create_dummy_file(destination_file, content="dummy content")
self.gresource.backup()
create_dummy_file(destination_file, content="new content")
self.gresource.restore()
assert os.path.exists(destination_file)
with open(destination_file) as f:
content = f.read()
assert content == "dummy content"
def test_restore_not_found(self):
destination_file = os.path.join(self.destination, self.gresource_file)
try_remove_file(destination_file)
with self.assertRaises(FileNotFoundError):
self.gresource.restore()
def test_move(self):
create_dummy_file(self.temp_file)
self.gresource.move()
assert os.path.exists(self.destination_file)
def test_move_not_found(self):
try_remove_file(self.temp_file)
with self.assertRaises(FileNotFoundError):
self.gresource.move()