mirror of
https://github.com/remsky/Kokoro-FastAPI.git
synced 2025-04-13 09:39:17 +00:00
198 lines
6 KiB
Python
198 lines
6 KiB
Python
import os
|
|
from unittest.mock import patch
|
|
|
|
import pytest
|
|
|
|
from ui.lib import files
|
|
from ui.lib.config import AUDIO_FORMATS
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_dirs(tmp_path):
|
|
"""Create temporary input and output directories"""
|
|
inputs_dir = tmp_path / "inputs"
|
|
outputs_dir = tmp_path / "outputs"
|
|
inputs_dir.mkdir()
|
|
outputs_dir.mkdir()
|
|
|
|
with (
|
|
patch("ui.lib.files.INPUTS_DIR", str(inputs_dir)),
|
|
patch("ui.lib.files.OUTPUTS_DIR", str(outputs_dir)),
|
|
):
|
|
yield inputs_dir, outputs_dir
|
|
|
|
|
|
def test_list_input_files_empty(mock_dirs):
|
|
"""Test listing input files from empty directory"""
|
|
assert files.list_input_files() == []
|
|
|
|
|
|
def test_list_input_files(mock_dirs):
|
|
"""Test listing input files with various files"""
|
|
inputs_dir, _ = mock_dirs
|
|
|
|
# Create test files
|
|
(inputs_dir / "test1.txt").write_text("content1")
|
|
(inputs_dir / "test2.txt").write_text("content2")
|
|
(inputs_dir / "nottext.pdf").write_text("should not be listed")
|
|
|
|
result = files.list_input_files()
|
|
assert len(result) == 2
|
|
assert "test1.txt" in result
|
|
assert "test2.txt" in result
|
|
assert "nottext.pdf" not in result
|
|
|
|
|
|
def test_list_output_files_empty(mock_dirs):
|
|
"""Test listing output files from empty directory"""
|
|
assert files.list_output_files() == []
|
|
|
|
|
|
def test_list_output_files(mock_dirs):
|
|
"""Test listing output files with various formats"""
|
|
_, outputs_dir = mock_dirs
|
|
|
|
# Create test files for each format
|
|
for fmt in AUDIO_FORMATS:
|
|
(outputs_dir / f"test.{fmt}").write_text("dummy content")
|
|
(outputs_dir / "test.txt").write_text("should not be listed")
|
|
|
|
result = files.list_output_files()
|
|
assert len(result) == len(AUDIO_FORMATS)
|
|
for fmt in AUDIO_FORMATS:
|
|
assert any(f".{fmt}" in file for file in result)
|
|
|
|
|
|
def test_read_text_file_empty_filename(mock_dirs):
|
|
"""Test reading with empty filename"""
|
|
assert files.read_text_file("") == ""
|
|
|
|
|
|
def test_read_text_file_nonexistent(mock_dirs):
|
|
"""Test reading nonexistent file"""
|
|
assert files.read_text_file("nonexistent.txt") == ""
|
|
|
|
|
|
def test_read_text_file_success(mock_dirs):
|
|
"""Test successful file reading"""
|
|
inputs_dir, _ = mock_dirs
|
|
content = "Test content\nMultiple lines"
|
|
(inputs_dir / "test.txt").write_text(content)
|
|
|
|
assert files.read_text_file("test.txt") == content
|
|
|
|
|
|
def test_save_text_empty(mock_dirs):
|
|
"""Test saving empty text"""
|
|
assert files.save_text("") is None
|
|
assert files.save_text(" ") is None
|
|
|
|
|
|
def test_save_text_auto_filename(mock_dirs):
|
|
"""Test saving text with auto-generated filename"""
|
|
inputs_dir, _ = mock_dirs
|
|
|
|
# First save
|
|
filename1 = files.save_text("content1")
|
|
assert filename1 == "input_1.txt"
|
|
assert (inputs_dir / filename1).read_text() == "content1"
|
|
|
|
# Second save
|
|
filename2 = files.save_text("content2")
|
|
assert filename2 == "input_2.txt"
|
|
assert (inputs_dir / filename2).read_text() == "content2"
|
|
|
|
|
|
def test_save_text_custom_filename(mock_dirs):
|
|
"""Test saving text with custom filename"""
|
|
inputs_dir, _ = mock_dirs
|
|
|
|
filename = files.save_text("content", "custom.txt")
|
|
assert filename == "custom.txt"
|
|
assert (inputs_dir / filename).read_text() == "content"
|
|
|
|
|
|
def test_save_text_duplicate_filename(mock_dirs):
|
|
"""Test saving text with duplicate filename"""
|
|
inputs_dir, _ = mock_dirs
|
|
|
|
# First save
|
|
filename1 = files.save_text("content1", "test.txt")
|
|
assert filename1 == "test.txt"
|
|
|
|
# Save with same filename
|
|
filename2 = files.save_text("content2", "test.txt")
|
|
assert filename2 == "test_1.txt"
|
|
|
|
assert (inputs_dir / "test.txt").read_text() == "content1"
|
|
assert (inputs_dir / "test_1.txt").read_text() == "content2"
|
|
|
|
|
|
def test_delete_all_input_files(mock_dirs):
|
|
"""Test deleting all input files"""
|
|
inputs_dir, _ = mock_dirs
|
|
|
|
# Create test files
|
|
(inputs_dir / "test1.txt").write_text("content1")
|
|
(inputs_dir / "test2.txt").write_text("content2")
|
|
(inputs_dir / "keep.pdf").write_text("should not be deleted")
|
|
|
|
assert files.delete_all_input_files() is True
|
|
remaining_files = list(inputs_dir.iterdir())
|
|
assert len(remaining_files) == 1
|
|
assert remaining_files[0].name == "keep.pdf"
|
|
|
|
|
|
def test_delete_all_output_files(mock_dirs):
|
|
"""Test deleting all output files"""
|
|
_, outputs_dir = mock_dirs
|
|
|
|
# Create test files
|
|
for fmt in AUDIO_FORMATS:
|
|
(outputs_dir / f"test.{fmt}").write_text("dummy content")
|
|
(outputs_dir / "keep.txt").write_text("should not be deleted")
|
|
|
|
assert files.delete_all_output_files() is True
|
|
remaining_files = list(outputs_dir.iterdir())
|
|
assert len(remaining_files) == 1
|
|
assert remaining_files[0].name == "keep.txt"
|
|
|
|
|
|
def test_process_uploaded_file_empty_path(mock_dirs):
|
|
"""Test processing empty file path"""
|
|
assert files.process_uploaded_file("") is False
|
|
|
|
|
|
def test_process_uploaded_file_invalid_extension(mock_dirs, tmp_path):
|
|
"""Test processing file with invalid extension"""
|
|
test_file = tmp_path / "test.pdf"
|
|
test_file.write_text("content")
|
|
assert files.process_uploaded_file(str(test_file)) is False
|
|
|
|
|
|
def test_process_uploaded_file_success(mock_dirs, tmp_path):
|
|
"""Test successful file upload processing"""
|
|
inputs_dir, _ = mock_dirs
|
|
|
|
# Create source file
|
|
source_file = tmp_path / "test.txt"
|
|
source_file.write_text("test content")
|
|
|
|
assert files.process_uploaded_file(str(source_file)) is True
|
|
assert (inputs_dir / "test.txt").read_text() == "test content"
|
|
|
|
|
|
def test_process_uploaded_file_duplicate(mock_dirs, tmp_path):
|
|
"""Test processing file with duplicate name"""
|
|
inputs_dir, _ = mock_dirs
|
|
|
|
# Create existing file
|
|
(inputs_dir / "test.txt").write_text("existing content")
|
|
|
|
# Create source file
|
|
source_file = tmp_path / "test.txt"
|
|
source_file.write_text("new content")
|
|
|
|
assert files.process_uploaded_file(str(source_file)) is True
|
|
assert (inputs_dir / "test.txt").read_text() == "existing content"
|
|
assert (inputs_dir / "test_1.txt").read_text() == "new content"
|