migrate to gitea

This commit is contained in:
jonasgaudian
2026-02-14 18:12:28 +01:00
commit 7c17f0f0cf
21 changed files with 2037 additions and 0 deletions

272
tests/test_md_processor.py Normal file
View File

@@ -0,0 +1,272 @@
"""
Tests for MD processor module
"""
import unittest
import tempfile
import os
from md_processor import MDProcessor, MDTranslationItem
class TestMDProcessor(unittest.TestCase):
"""Test cases for MDProcessor class"""
def setUp(self):
"""Set up test fixtures"""
self.processor = MDProcessor()
def test_get_md_files(self):
"""Test getting .md files from a folder"""
with tempfile.TemporaryDirectory() as tmpdir:
# Create test files
open(os.path.join(tmpdir, "file1.md"), 'w').close()
open(os.path.join(tmpdir, "file2.md"), 'w').close()
open(os.path.join(tmpdir, "not_md.txt"), 'w').close()
os.makedirs(os.path.join(tmpdir, "subdir"))
open(os.path.join(tmpdir, "subdir", "file3.md"), 'w').close()
# Get .md files (non-recursive)
files = self.processor.get_md_files(tmpdir)
self.assertEqual(len(files), 2)
self.assertIn("file1.md", files)
self.assertIn("file2.md", files)
self.assertNotIn("not_md.txt", files)
self.assertNotIn("file3.md", files) # In subdir, not included
def test_get_md_files_nonexistent_folder(self):
"""Test getting .md files from a non-existent folder"""
files = self.processor.get_md_files("/nonexistent/path")
self.assertEqual(files, [])
def test_load_md_file(self):
"""Test loading markdown file content"""
with tempfile.NamedTemporaryFile(mode='w', suffix='.md', delete=False) as f:
f.write("# Test Content\n\nThis is a test.")
temp_path = f.name
try:
content = self.processor.load_md_file(temp_path)
self.assertEqual(content, "# Test Content\n\nThis is a test.")
finally:
os.unlink(temp_path)
def test_load_md_file_nonexistent(self):
"""Test loading a non-existent markdown file"""
content = self.processor.load_md_file("/nonexistent/file.md")
self.assertEqual(content, "")
def test_save_md_file(self):
"""Test saving markdown file"""
with tempfile.TemporaryDirectory() as tmpdir:
file_path = os.path.join(tmpdir, "test.md")
content = "# Test Content\n\nThis is a test."
self.processor.save_md_file(content, file_path)
# Verify file was created
self.assertTrue(os.path.exists(file_path))
# Verify content
with open(file_path, 'r', encoding='utf-8') as f:
saved_content = f.read()
self.assertEqual(saved_content, content)
def test_save_md_file_creates_directories(self):
"""Test that save_md_file creates parent directories"""
with tempfile.TemporaryDirectory() as tmpdir:
nested_path = os.path.join(tmpdir, "subdir1", "subdir2", "test.md")
content = "# Nested Content"
self.processor.save_md_file(content, nested_path)
# Verify file was created in nested directory
self.assertTrue(os.path.exists(nested_path))
def test_extract_content(self):
"""Test extracting content from all .md files"""
with tempfile.TemporaryDirectory() as tmpdir:
# Create test files
with open(os.path.join(tmpdir, "file1.md"), 'w') as f:
f.write("# File 1")
with open(os.path.join(tmpdir, "file2.md"), 'w') as f:
f.write("# File 2")
items = self.processor.extract_content(tmpdir)
self.assertEqual(len(items), 2)
self.assertIn("file1.md", items)
self.assertIn("file2.md", items)
self.assertEqual(items["file1.md"].content, "# File 1")
self.assertEqual(items["file2.md"].content, "# File 2")
self.assertEqual(items["file1.md"].filename, "file1.md")
def test_extract_content_empty_folder(self):
"""Test extracting content from empty folder"""
with tempfile.TemporaryDirectory() as tmpdir:
items = self.processor.extract_content(tmpdir)
self.assertEqual(items, {})
def test_check_asset_counts_valid(self):
"""Test asset count check when all folders have same count"""
with tempfile.TemporaryDirectory() as tmpdir:
# Create base folder with files
base_folder = os.path.join(tmpdir, "base")
os.makedirs(base_folder)
open(os.path.join(base_folder, "file1.md"), 'w').close()
open(os.path.join(base_folder, "file2.md"), 'w').close()
# Create target folders with same files
target1 = os.path.join(tmpdir, "target1")
os.makedirs(target1)
open(os.path.join(target1, "file1.md"), 'w').close()
open(os.path.join(target1, "file2.md"), 'w').close()
target2 = os.path.join(tmpdir, "target2")
os.makedirs(target2)
open(os.path.join(target2, "file1.md"), 'w').close()
open(os.path.join(target2, "file2.md"), 'w').close()
is_valid, errors = self.processor.check_asset_counts(base_folder, [target1, target2])
self.assertTrue(is_valid)
self.assertEqual(errors, [])
def test_check_asset_counts_missing_files(self):
"""Test asset count check when target is missing files"""
with tempfile.TemporaryDirectory() as tmpdir:
# Create base folder with files
base_folder = os.path.join(tmpdir, "base")
os.makedirs(base_folder)
open(os.path.join(base_folder, "file1.md"), 'w').close()
open(os.path.join(base_folder, "file2.md"), 'w').close()
# Create target folder with missing file
target1 = os.path.join(tmpdir, "target1")
os.makedirs(target1)
open(os.path.join(target1, "file1.md"), 'w').close()
# file2.md is missing
is_valid, errors = self.processor.check_asset_counts(base_folder, [target1])
self.assertFalse(is_valid)
self.assertEqual(len(errors), 1)
self.assertIn("file2.md", errors[0])
def test_check_asset_counts_extra_files(self):
"""Test asset count check when target has extra files"""
with tempfile.TemporaryDirectory() as tmpdir:
# Create base folder with files
base_folder = os.path.join(tmpdir, "base")
os.makedirs(base_folder)
open(os.path.join(base_folder, "file1.md"), 'w').close()
# Create target folder with extra file
target1 = os.path.join(tmpdir, "target1")
os.makedirs(target1)
open(os.path.join(target1, "file1.md"), 'w').close()
open(os.path.join(target1, "extra.md"), 'w').close()
is_valid, errors = self.processor.check_asset_counts(base_folder, [target1])
self.assertFalse(is_valid)
self.assertEqual(len(errors), 1)
self.assertIn("extra.md", errors[0])
def test_check_asset_counts_empty_base(self):
"""Test asset count check with empty base folder"""
with tempfile.TemporaryDirectory() as tmpdir:
base_folder = os.path.join(tmpdir, "base")
os.makedirs(base_folder)
target1 = os.path.join(tmpdir, "target1")
os.makedirs(target1)
is_valid, errors = self.processor.check_asset_counts(base_folder, [target1])
self.assertFalse(is_valid)
self.assertEqual(len(errors), 1)
self.assertIn("no .md files", errors[0])
def test_find_missing_files(self):
"""Test finding missing files in target folder"""
with tempfile.TemporaryDirectory() as tmpdir:
# Create base folder with files
base_folder = os.path.join(tmpdir, "base")
os.makedirs(base_folder)
open(os.path.join(base_folder, "file1.md"), 'w').close()
open(os.path.join(base_folder, "file2.md"), 'w').close()
open(os.path.join(base_folder, "file3.md"), 'w').close()
# Create target folder with some files
target_folder = os.path.join(tmpdir, "target")
os.makedirs(target_folder)
open(os.path.join(target_folder, "file1.md"), 'w').close()
# file2.md and file3.md are missing
missing = self.processor.find_missing_files(base_folder, target_folder)
self.assertEqual(len(missing), 2)
self.assertIn("file2.md", missing)
self.assertIn("file3.md", missing)
self.assertNotIn("file1.md", missing)
def test_find_missing_files_all_present(self):
"""Test finding missing files when all are present"""
with tempfile.TemporaryDirectory() as tmpdir:
base_folder = os.path.join(tmpdir, "base")
os.makedirs(base_folder)
open(os.path.join(base_folder, "file1.md"), 'w').close()
target_folder = os.path.join(tmpdir, "target")
os.makedirs(target_folder)
open(os.path.join(target_folder, "file1.md"), 'w').close()
missing = self.processor.find_missing_files(base_folder, target_folder)
self.assertEqual(missing, [])
def test_custom_extension(self):
"""Test MDProcessor with custom file extension"""
processor = MDProcessor(file_extension=".txt")
with tempfile.TemporaryDirectory() as tmpdir:
open(os.path.join(tmpdir, "file1.txt"), 'w').close()
open(os.path.join(tmpdir, "file2.md"), 'w').close()
files = processor.get_md_files(tmpdir)
self.assertEqual(len(files), 1)
self.assertIn("file1.txt", files)
self.assertNotIn("file2.md", files)
class TestMDTranslationItem(unittest.TestCase):
"""Test cases for MDTranslationItem dataclass"""
def test_create_item(self):
"""Test creating MDTranslationItem"""
item = MDTranslationItem(
filename="test.md",
content="# Test",
relative_path="subdir"
)
self.assertEqual(item.filename, "test.md")
self.assertEqual(item.content, "# Test")
self.assertEqual(item.relative_path, "subdir")
def test_create_item_defaults(self):
"""Test creating MDTranslationItem with defaults"""
item = MDTranslationItem(
filename="test.md",
content="# Test"
)
self.assertEqual(item.filename, "test.md")
self.assertEqual(item.content, "# Test")
self.assertEqual(item.relative_path, "")
if __name__ == '__main__':
unittest.main()