mirror of
https://github.com/chidiwilliams/buzz.git
synced 2026-03-14 22:55:46 +01:00
153 lines
6.5 KiB
Python
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)
|