buzz/tests/widgets/advanced_settings_dialog_test.py
2026-02-22 17:46:20 +02:00

153 lines
6.5 KiB
Python

import pytest
from pytestqt.qtbot import QtBot
from buzz.transcriber.transcriber import TranscriptionOptions
from buzz.widgets.transcriber.advanced_settings_dialog import AdvancedSettingsDialog
class TestAdvancedSettingsDialogSilenceThreshold:
def test_silence_threshold_spinbox_hidden_by_default(self, qtbot: QtBot):
"""Silence threshold UI is not shown when show_recording_settings=False."""
options = TranscriptionOptions()
dialog = AdvancedSettingsDialog(transcription_options=options)
qtbot.add_widget(dialog)
assert not hasattr(dialog, "silence_threshold_spin_box")
def test_silence_threshold_spinbox_shown_when_recording_settings(self, qtbot: QtBot):
"""Silence threshold spinbox is present when show_recording_settings=True."""
options = TranscriptionOptions()
dialog = AdvancedSettingsDialog(
transcription_options=options, show_recording_settings=True
)
qtbot.add_widget(dialog)
assert hasattr(dialog, "silence_threshold_spin_box")
assert dialog.silence_threshold_spin_box is not None
def test_silence_threshold_spinbox_initial_value(self, qtbot: QtBot):
"""Spinbox reflects the current silence_threshold from options."""
options = TranscriptionOptions(silence_threshold=0.0075)
dialog = AdvancedSettingsDialog(
transcription_options=options, show_recording_settings=True
)
qtbot.add_widget(dialog)
assert dialog.silence_threshold_spin_box.value() == pytest.approx(0.0075)
def test_silence_threshold_change_updates_options(self, qtbot: QtBot):
"""Changing spinbox value updates transcription_options.silence_threshold."""
options = TranscriptionOptions(silence_threshold=0.0025)
dialog = AdvancedSettingsDialog(
transcription_options=options, show_recording_settings=True
)
qtbot.add_widget(dialog)
dialog.silence_threshold_spin_box.setValue(0.005)
assert dialog.transcription_options.silence_threshold == pytest.approx(0.005)
def test_silence_threshold_change_emits_signal(self, qtbot: QtBot):
"""Changing the spinbox emits transcription_options_changed."""
options = TranscriptionOptions(silence_threshold=0.0025)
dialog = AdvancedSettingsDialog(
transcription_options=options, show_recording_settings=True
)
qtbot.add_widget(dialog)
emitted = []
dialog.transcription_options_changed.connect(lambda o: emitted.append(o))
dialog.silence_threshold_spin_box.setValue(0.005)
assert len(emitted) == 1
assert emitted[0].silence_threshold == pytest.approx(0.005)
class TestAdvancedSettingsDialogLineSeparator:
def test_line_separator_shown_when_recording_settings(self, qtbot: QtBot):
options = TranscriptionOptions()
dialog = AdvancedSettingsDialog(
transcription_options=options, show_recording_settings=True
)
qtbot.add_widget(dialog)
assert hasattr(dialog, "line_separator_line_edit")
assert dialog.line_separator_line_edit is not None
def test_line_separator_hidden_by_default(self, qtbot: QtBot):
options = TranscriptionOptions()
dialog = AdvancedSettingsDialog(transcription_options=options)
qtbot.add_widget(dialog)
assert not hasattr(dialog, "line_separator_line_edit")
def test_line_separator_initial_value_displayed_as_escape(self, qtbot: QtBot):
options = TranscriptionOptions(line_separator="\n\n")
dialog = AdvancedSettingsDialog(
transcription_options=options, show_recording_settings=True
)
qtbot.add_widget(dialog)
assert dialog.line_separator_line_edit.text() == r"\n\n"
def test_line_separator_change_updates_options(self, qtbot: QtBot):
options = TranscriptionOptions(line_separator="\n\n")
dialog = AdvancedSettingsDialog(
transcription_options=options, show_recording_settings=True
)
qtbot.add_widget(dialog)
dialog.line_separator_line_edit.setText(r"\n")
assert dialog.transcription_options.line_separator == "\n"
def test_line_separator_change_emits_signal(self, qtbot: QtBot):
options = TranscriptionOptions(line_separator="\n\n")
dialog = AdvancedSettingsDialog(
transcription_options=options, show_recording_settings=True
)
qtbot.add_widget(dialog)
emitted = []
dialog.transcription_options_changed.connect(lambda o: emitted.append(o))
dialog.line_separator_line_edit.setText(r"\n")
assert len(emitted) == 1
assert emitted[0].line_separator == "\n"
def test_line_separator_invalid_escape_does_not_crash(self, qtbot: QtBot):
options = TranscriptionOptions(line_separator="\n\n")
dialog = AdvancedSettingsDialog(
transcription_options=options, show_recording_settings=True
)
qtbot.add_widget(dialog)
dialog.line_separator_line_edit.setText("\\")
# Options unchanged — previous valid value kept
assert dialog.transcription_options.line_separator == "\n\n"
def test_line_separator_tab_character(self, qtbot: QtBot):
options = TranscriptionOptions()
dialog = AdvancedSettingsDialog(
transcription_options=options, show_recording_settings=True
)
qtbot.add_widget(dialog)
dialog.line_separator_line_edit.setText(r"\t")
assert dialog.transcription_options.line_separator == "\t"
def test_line_separator_plain_text(self, qtbot: QtBot):
options = TranscriptionOptions()
dialog = AdvancedSettingsDialog(
transcription_options=options, show_recording_settings=True
)
qtbot.add_widget(dialog)
dialog.line_separator_line_edit.setText(" | ")
assert dialog.transcription_options.line_separator == " | "
class TestTranscriptionOptionsLineSeparator:
def test_default_line_separator(self):
options = TranscriptionOptions()
assert options.line_separator == "\n\n"
def test_custom_line_separator(self):
options = TranscriptionOptions(line_separator="\n")
assert options.line_separator == "\n"
class TestTranscriptionOptionsSilenceThreshold:
def test_default_silence_threshold(self):
options = TranscriptionOptions()
assert options.silence_threshold == pytest.approx(0.0025)
def test_custom_silence_threshold(self):
options = TranscriptionOptions(silence_threshold=0.01)
assert options.silence_threshold == pytest.approx(0.01)