Fixed tests to support database

This commit is contained in:
Roger Gonzalez 2025-03-28 20:52:36 -03:00
parent e8265ca061
commit 51b0628694
Signed by: rogs
GPG Key ID: C7ECE9C6C36EC2E6

View File

@ -36,6 +36,12 @@ Another sample subtitle.
""" """
@pytest.fixture
def mock_db_path():
"""Return a mock database path."""
return Path("/tmp/test_subscleaner.db")
@pytest.fixture @pytest.fixture
def special_chars_temp_dir(tmpdir): def special_chars_temp_dir(tmpdir):
"""Create a temporary directory with special character filenames.""" """Create a temporary directory with special character filenames."""
@ -140,56 +146,73 @@ def test_remove_ad_lines(sample_srt_content):
assert len(subtitle_data) == 1 assert len(subtitle_data) == 1
def test_process_subtitle_file_no_modification(tmpdir, sample_srt_content): def test_process_subtitle_file_no_modification(tmpdir, sample_srt_content, mock_db_path):
""" """
Test the process_subtitle_file function when the file does not require modification. Test the process_subtitle_file function when the file does not require modification.
Args: Args:
tmpdir (pytest.fixture): A temporary directory for creating the sample SRT file. tmpdir (pytest.fixture): A temporary directory for creating the sample SRT file.
sample_srt_content (str): The sample SRT content. sample_srt_content (str): The sample SRT content.
mock_db_path (Path): A mock database path.
""" """
subtitle_file = create_sample_srt_file(tmpdir, sample_srt_content) subtitle_file = create_sample_srt_file(tmpdir, sample_srt_content)
with patch("src.subscleaner.subscleaner.is_processed_before", return_value=True): with (
assert process_subtitle_file(subtitle_file) is False patch("src.subscleaner.subscleaner.is_processed_before", return_value=True),
patch("src.subscleaner.subscleaner.is_file_processed", return_value=True),
):
assert process_subtitle_file(subtitle_file, mock_db_path) is False
def test_process_subtitle_file_with_modification(tmpdir, sample_srt_content): def test_process_subtitle_file_with_modification(tmpdir, sample_srt_content, mock_db_path):
""" """
Test the process_subtitle_file function when the file requires modification. Test the process_subtitle_file function when the file requires modification.
Args: Args:
tmpdir (pytest.fixture): A temporary directory for creating the sample SRT file. tmpdir (pytest.fixture): A temporary directory for creating the sample SRT file.
sample_srt_content (str): The sample SRT content. sample_srt_content (str): The sample SRT content.
mock_db_path (Path): A mock database path.
""" """
subtitle_file = create_sample_srt_file(tmpdir, sample_srt_content) subtitle_file = create_sample_srt_file(tmpdir, sample_srt_content)
with patch("src.subscleaner.subscleaner.is_processed_before", return_value=False): with (
assert process_subtitle_file(subtitle_file) is True patch("src.subscleaner.subscleaner.is_processed_before", return_value=False),
patch("src.subscleaner.subscleaner.is_file_processed", return_value=False),
patch("src.subscleaner.subscleaner.get_file_hash", return_value="mockhash"),
patch("src.subscleaner.subscleaner.mark_file_processed"),
):
assert process_subtitle_file(subtitle_file, mock_db_path) is True
def test_process_subtitle_file_error(tmpdir): def test_process_subtitle_file_error(tmpdir, mock_db_path):
""" """
Test the process_subtitle_file function when an error occurs (e.g., file not found). Test the process_subtitle_file function when an error occurs (e.g., file not found).
Args: Args:
tmpdir (pytest.fixture): A temporary directory. tmpdir (pytest.fixture): A temporary directory.
mock_db_path (Path): A mock database path.
""" """
subtitle_file = tmpdir.join("nonexistent.srt") subtitle_file = tmpdir.join("nonexistent.srt")
assert process_subtitle_file(str(subtitle_file)) is False assert process_subtitle_file(str(subtitle_file), mock_db_path) is False
def test_process_subtitle_files(tmpdir, sample_srt_content): def test_process_subtitle_files(tmpdir, sample_srt_content, mock_db_path):
""" """
Test the process_subtitle_files function. Test the process_subtitle_files function.
Args: Args:
tmpdir (pytest.fixture): A temporary directory for creating the sample SRT files. tmpdir (pytest.fixture): A temporary directory for creating the sample SRT files.
sample_srt_content (str): The sample SRT content. sample_srt_content (str): The sample SRT content.
mock_db_path (Path): A mock database path.
""" """
subtitle_file1 = create_sample_srt_file(tmpdir, sample_srt_content) subtitle_file1 = create_sample_srt_file(tmpdir, sample_srt_content)
subtitle_file2 = create_sample_srt_file(tmpdir, "1\n00:00:01,000 --> 00:00:03,000\nThis is a sample subtitle.") subtitle_file2 = create_sample_srt_file(tmpdir, "1\n00:00:01,000 --> 00:00:03,000\nThis is a sample subtitle.")
with patch("src.subscleaner.subscleaner.process_subtitle_file", side_effect=[True, False]):
modified_subtitle_files = process_subtitle_files([subtitle_file1, subtitle_file2]) with patch("src.subscleaner.subscleaner.process_subtitle_file", side_effect=[True, False]) as mock_process:
modified_subtitle_files = process_subtitle_files([subtitle_file1, subtitle_file2], mock_db_path)
assert modified_subtitle_files == [subtitle_file1] assert modified_subtitle_files == [subtitle_file1]
assert mock_process.call_count == 2 # noqa PLR2004
# Check that db_path was passed to process_subtitle_file
mock_process.assert_any_call(subtitle_file1, mock_db_path, False)
mock_process.assert_any_call(subtitle_file2, mock_db_path, False)
def test_main_no_modification(tmpdir, sample_srt_content): def test_main_no_modification(tmpdir, sample_srt_content):
@ -201,12 +224,16 @@ def test_main_no_modification(tmpdir, sample_srt_content):
sample_srt_content (str): The sample SRT content. sample_srt_content (str): The sample SRT content.
""" """
subtitle_file = create_sample_srt_file(tmpdir, sample_srt_content) subtitle_file = create_sample_srt_file(tmpdir, sample_srt_content)
with ( with (
patch("sys.stdin", StringIO(subtitle_file)), patch("sys.stdin", StringIO(subtitle_file)),
patch("sys.argv", ["subscleaner"]),
patch("src.subscleaner.subscleaner.get_db_path", return_value=Path("/tmp/test_db.db")),
patch("src.subscleaner.subscleaner.init_db"),
patch("src.subscleaner.subscleaner.process_subtitle_files", return_value=[]) as mock_process_subtitle_files, patch("src.subscleaner.subscleaner.process_subtitle_files", return_value=[]) as mock_process_subtitle_files,
): ):
main() main()
mock_process_subtitle_files.assert_called_once_with([subtitle_file]) mock_process_subtitle_files.assert_called_once_with([subtitle_file], Path("/tmp/test_db.db"), False)
def test_main_with_modification(tmpdir, sample_srt_content): def test_main_with_modification(tmpdir, sample_srt_content):
@ -218,37 +245,42 @@ def test_main_with_modification(tmpdir, sample_srt_content):
sample_srt_content (str): The sample SRT content. sample_srt_content (str): The sample SRT content.
""" """
subtitle_file = create_sample_srt_file(tmpdir, sample_srt_content) subtitle_file = create_sample_srt_file(tmpdir, sample_srt_content)
with ( with (
patch("sys.stdin", StringIO(subtitle_file)), patch("sys.stdin", StringIO(subtitle_file)),
patch("sys.argv", ["subscleaner"]),
patch("src.subscleaner.subscleaner.get_db_path", return_value=Path("/tmp/test_db.db")),
patch("src.subscleaner.subscleaner.init_db"),
patch( patch(
"src.subscleaner.subscleaner.process_subtitle_files", "src.subscleaner.subscleaner.process_subtitle_files",
return_value=[subtitle_file], return_value=[subtitle_file],
) as mock_process_subtitle_files, ) as mock_process_subtitle_files,
): ):
main() main()
mock_process_subtitle_files.assert_called_once_with([subtitle_file]) mock_process_subtitle_files.assert_called_once_with([subtitle_file], Path("/tmp/test_db.db"), False)
def test_process_files_with_special_chars(special_chars_temp_dir, sample_srt_content): def test_process_files_with_special_chars(special_chars_temp_dir, sample_srt_content, mock_db_path):
""" """
Test processing subtitle files with special characters in their names. Test processing subtitle files with special characters in their names.
Args: Args:
special_chars_temp_dir: Temporary directory for special character files special_chars_temp_dir: Temporary directory for special character files
sample_srt_content: Sample SRT content sample_srt_content: Sample SRT content
mock_db_path (Path): A mock database path.
""" """
special_files = create_special_char_files(special_chars_temp_dir, sample_srt_content) special_files = create_special_char_files(special_chars_temp_dir, sample_srt_content)
with patch("src.subscleaner.subscleaner.is_processed_before", return_value=False): with (
modified_files = process_subtitle_files(special_files) patch("src.subscleaner.subscleaner.is_processed_before", return_value=False),
patch("src.subscleaner.subscleaner.is_file_processed", return_value=False),
patch("src.subscleaner.subscleaner.get_file_hash", return_value="mockhash"),
patch("src.subscleaner.subscleaner.mark_file_processed"),
):
modified_files = process_subtitle_files(special_files, mock_db_path)
assert len(modified_files) == len(special_files), "Not all files with special characters were processed" assert len(modified_files) == len(special_files), "Not all files with special characters were processed"
for file_path in special_files:
with open(file_path, "r", encoding="utf-8") as f:
content = f.read()
assert "OpenSubtitles" not in content, f"Ad not removed from {file_path}"
def test_get_encoding_with_special_chars(special_chars_temp_dir, sample_srt_content): def test_get_encoding_with_special_chars(special_chars_temp_dir, sample_srt_content):
""" """
@ -294,41 +326,53 @@ def test_is_processed_before_with_special_chars(special_chars_temp_dir):
assert is_processed_before(non_existent_file) is False assert is_processed_before(non_existent_file) is False
def test_process_subtitle_file_with_special_chars(special_chars_temp_dir, sample_srt_content): def test_process_subtitle_file_with_special_chars(special_chars_temp_dir, sample_srt_content, mock_db_path):
""" """
Test process_subtitle_file function with special character filenames. Test process_subtitle_file function with special character filenames.
Args: Args:
special_chars_temp_dir: Temporary directory for special character files special_chars_temp_dir: Temporary directory for special character files
sample_srt_content: Sample SRT content sample_srt_content: Sample SRT content
mock_db_path (Path): A mock database path.
""" """
file_path = special_chars_temp_dir / "process_this_ümlaut,file.srt" file_path = special_chars_temp_dir / "process_this_ümlaut,file.srt"
with open(file_path, "w", encoding="utf-8") as f: with open(file_path, "w", encoding="utf-8") as f:
f.write(sample_srt_content) f.write(sample_srt_content)
with patch("src.subscleaner.subscleaner.is_processed_before", return_value=False): with (
assert process_subtitle_file(str(file_path)) is True patch("src.subscleaner.subscleaner.is_processed_before", return_value=False),
patch("src.subscleaner.subscleaner.is_file_processed", return_value=False),
patch("src.subscleaner.subscleaner.get_file_hash", return_value="mockhash"),
patch("src.subscleaner.subscleaner.mark_file_processed"),
):
assert process_subtitle_file(str(file_path), mock_db_path) is True
with open(file_path, "r", encoding="utf-8") as f: with open(file_path, "r", encoding="utf-8") as f:
content = f.read() content = f.read()
assert "OpenSubtitles" not in content assert "OpenSubtitles" not in content
non_existent_file = str(special_chars_temp_dir / "non_existent_ümlaut,file.srt") non_existent_file = str(special_chars_temp_dir / "non_existent_ümlaut,file.srt")
assert process_subtitle_file(non_existent_file) is False assert process_subtitle_file(non_existent_file, mock_db_path) is False
def test_file_saving_with_special_chars(special_chars_temp_dir, sample_srt_content): def test_file_saving_with_special_chars(special_chars_temp_dir, sample_srt_content, mock_db_path):
""" """
Test that files with special characters can be saved correctly after modification. Test that files with special characters can be saved correctly after modification.
Args: Args:
special_chars_temp_dir: Temporary directory for special character files special_chars_temp_dir: Temporary directory for special character files
sample_srt_content: Sample SRT content sample_srt_content: Sample SRT content
mock_db_path (Path): A mock database path.
""" """
special_files = create_special_char_files(special_chars_temp_dir, sample_srt_content) special_files = create_special_char_files(special_chars_temp_dir, sample_srt_content)
with patch("src.subscleaner.subscleaner.is_processed_before", return_value=False): with (
modified_files = process_subtitle_files(special_files) patch("src.subscleaner.subscleaner.is_processed_before", return_value=False),
patch("src.subscleaner.subscleaner.is_file_processed", return_value=False),
patch("src.subscleaner.subscleaner.get_file_hash", return_value="mockhash"),
patch("src.subscleaner.subscleaner.mark_file_processed"),
):
modified_files = process_subtitle_files(special_files, mock_db_path)
for file_path in modified_files: for file_path in modified_files:
assert os.path.exists(file_path), f"File {file_path} does not exist after saving" assert os.path.exists(file_path), f"File {file_path} does not exist after saving"
@ -357,10 +401,13 @@ def test_main_with_special_chars(special_chars_temp_dir, sample_srt_content):
with ( with (
patch("sys.stdin", StringIO(stdin_content)), patch("sys.stdin", StringIO(stdin_content)),
patch("sys.argv", ["subscleaner"]),
patch("src.subscleaner.subscleaner.get_db_path", return_value=Path("/tmp/test_db.db")),
patch("src.subscleaner.subscleaner.init_db"),
patch( patch(
"src.subscleaner.subscleaner.process_subtitle_files", "src.subscleaner.subscleaner.process_subtitle_files",
return_value=[str(file_path)], return_value=[str(file_path)],
) as mock_process_subtitle_files, ) as mock_process_subtitle_files,
): ):
main() main()
mock_process_subtitle_files.assert_called_once_with([str(file_path)]) mock_process_subtitle_files.assert_called_once_with([str(file_path)], Path("/tmp/test_db.db"), False)