diff --git a/tests/widgets/main_window_test.py b/tests/widgets/main_window_test.py index 3fc7b39e..baccd2c8 100644 --- a/tests/widgets/main_window_test.py +++ b/tests/widgets/main_window_test.py @@ -1,5 +1,6 @@ import logging import os +import tempfile from typing import List from unittest.mock import patch, Mock @@ -293,6 +294,67 @@ class TestMainWindow: assert window.toolbar.open_transcript_action.isEnabled() is False window.close() + def test_import_folder_opens_file_transcriber_with_supported_files( + self, qtbot, transcription_service + ): + window = MainWindow(transcription_service) + qtbot.add_widget(window) + + with tempfile.TemporaryDirectory() as folder: + # Create supported and unsupported files + supported = ["audio.mp3", "video.mp4", "clip.wav"] + unsupported = ["document.txt", "image.png"] + subdir = os.path.join(folder, "sub") + os.makedirs(subdir) + nested = "nested.flac" + + for name in supported + unsupported: + open(os.path.join(folder, name), "w").close() + open(os.path.join(subdir, nested), "w").close() + + with patch("PyQt6.QtWidgets.QFileDialog.getExistingDirectory") as mock_dir, \ + patch.object(window, "open_file_transcriber_widget") as mock_open: + mock_dir.return_value = folder + window.on_import_folder_action_triggered() + + collected = mock_open.call_args[0][0] + collected_names = {os.path.basename(p) for p in collected} + assert collected_names == {"audio.mp3", "video.mp4", "clip.wav", "nested.flac"} + + window.close() + + def test_import_folder_does_nothing_when_cancelled( + self, qtbot, transcription_service + ): + window = MainWindow(transcription_service) + qtbot.add_widget(window) + + with patch("PyQt6.QtWidgets.QFileDialog.getExistingDirectory") as mock_dir, \ + patch.object(window, "open_file_transcriber_widget") as mock_open: + mock_dir.return_value = "" + window.on_import_folder_action_triggered() + + mock_open.assert_not_called() + window.close() + + def test_import_folder_does_nothing_when_no_supported_files( + self, qtbot, transcription_service + ): + window = MainWindow(transcription_service) + qtbot.add_widget(window) + + with tempfile.TemporaryDirectory() as folder: + open(os.path.join(folder, "readme.txt"), "w").close() + open(os.path.join(folder, "image.jpg"), "w").close() + + with patch("PyQt6.QtWidgets.QFileDialog.getExistingDirectory") as mock_dir, \ + patch.object(window, "open_file_transcriber_widget") as mock_open: + mock_dir.return_value = folder + window.on_import_folder_action_triggered() + + mock_open.assert_not_called() + window.close() + @staticmethod def _import_file_and_start_transcription( window: MainWindow, long_audio: bool = False diff --git a/tests/widgets/menu_bar_test.py b/tests/widgets/menu_bar_test.py index 5934ddea..6ee555a5 100644 --- a/tests/widgets/menu_bar_test.py +++ b/tests/widgets/menu_bar_test.py @@ -1,3 +1,5 @@ +from unittest.mock import patch, Mock + from PyQt6.QtCore import QSettings from buzz.widgets.menu_bar import MenuBar @@ -6,6 +8,18 @@ from buzz.widgets.preferences_dialog.preferences_dialog import PreferencesDialog class TestMenuBar: + def test_import_folder_action_emits_signal(self, qtbot, shortcuts): + menu_bar = MenuBar( + shortcuts=shortcuts, preferences=Preferences.load(QSettings()) + ) + qtbot.add_widget(menu_bar) + + signal_mock = Mock() + menu_bar.import_folder_action_triggered.connect(signal_mock) + menu_bar.import_folder_action.trigger() + + signal_mock.assert_called_once() + def test_open_preferences_dialog(self, qtbot, shortcuts): menu_bar = MenuBar( shortcuts=shortcuts, preferences=Preferences.load(QSettings())