Fix reminders tests from segfaulting
All checks were successful
CI / test (push) Successful in 5m43s
Lint / test (push) Successful in 33s
Trivy / test (push) Successful in 24s

This commit is contained in:
Miguel Jacq 2025-12-02 09:45:54 +11:00
parent 422411f12e
commit 25f0c28582
Signed by: mig5
GPG key ID: 59B3F0C24135C6A9

View file

@ -1,6 +1,6 @@
import pytest import pytest
from unittest.mock import patch from unittest.mock import patch, MagicMock
from bouquin.reminders import ( from bouquin.reminders import (
Reminder, Reminder,
ReminderType, ReminderType,
@ -302,20 +302,24 @@ def test_upcoming_reminders_widget_add_reminder(qtbot, app, fresh_db):
widget = UpcomingRemindersWidget(fresh_db) widget = UpcomingRemindersWidget(fresh_db)
qtbot.addWidget(widget) qtbot.addWidget(widget)
with patch.object(ReminderDialog, "exec", return_value=QDialog.Accepted): new_reminder = Reminder(
with patch.object(ReminderDialog, "get_reminder") as mock_get: id=None,
mock_get.return_value = Reminder( text="New reminder",
id=None, time_str="10:00",
text="New reminder", reminder_type=ReminderType.DAILY,
time_str="10:00", )
reminder_type=ReminderType.DAILY,
)
widget._add_reminder() # Mock the entire ReminderDialog class to avoid Qt parent issues
mock_dialog = MagicMock()
mock_dialog.exec.return_value = QDialog.Accepted
mock_dialog.get_reminder.return_value = new_reminder
# Reminder should be saved with patch("bouquin.reminders.ReminderDialog", return_value=mock_dialog):
reminders = fresh_db.get_all_reminders() widget._add_reminder()
assert len(reminders) > 0
# Reminder should be saved
reminders = fresh_db.get_all_reminders()
assert len(reminders) > 0
def test_upcoming_reminders_widget_edit_reminder(qtbot, app, fresh_db): def test_upcoming_reminders_widget_edit_reminder(qtbot, app, fresh_db):
@ -338,17 +342,20 @@ def test_upcoming_reminders_widget_edit_reminder(qtbot, app, fresh_db):
if widget.reminder_list.count() > 0: if widget.reminder_list.count() > 0:
item = widget.reminder_list.item(0) item = widget.reminder_list.item(0)
with patch.object(ReminderDialog, "exec", return_value=QDialog.Accepted): updated = Reminder(
with patch.object(ReminderDialog, "get_reminder") as mock_get: id=1,
updated = Reminder( text="Updated",
id=1, time_str="11:00",
text="Updated", reminder_type=ReminderType.DAILY,
time_str="11:00", )
reminder_type=ReminderType.DAILY,
)
mock_get.return_value = updated
widget._edit_reminder(item) # Mock the entire ReminderDialog class to avoid Qt parent issues
mock_dialog = MagicMock()
mock_dialog.exec.return_value = QDialog.Accepted
mock_dialog.get_reminder.return_value = updated
with patch("bouquin.reminders.ReminderDialog", return_value=mock_dialog):
widget._edit_reminder(item)
def test_upcoming_reminders_widget_delete_selected_single(qtbot, app, fresh_db): def test_upcoming_reminders_widget_delete_selected_single(qtbot, app, fresh_db):
@ -463,19 +470,23 @@ def test_manage_reminders_dialog_add_reminder(qtbot, app, fresh_db):
initial_count = dialog.table.rowCount() initial_count = dialog.table.rowCount()
with patch.object(ReminderDialog, "exec", return_value=QDialog.Accepted): new_reminder = Reminder(
with patch.object(ReminderDialog, "get_reminder") as mock_get: id=None,
mock_get.return_value = Reminder( text="New",
id=None, time_str="10:00",
text="New", reminder_type=ReminderType.DAILY,
time_str="10:00", )
reminder_type=ReminderType.DAILY,
)
dialog._add_reminder() # Mock the entire ReminderDialog class to avoid Qt parent issues
mock_dialog = MagicMock()
mock_dialog.exec.return_value = QDialog.Accepted
mock_dialog.get_reminder.return_value = new_reminder
# Table should have one more row with patch("bouquin.reminders.ReminderDialog", return_value=mock_dialog):
assert dialog.table.rowCount() == initial_count + 1 dialog._add_reminder()
# Table should have one more row
assert dialog.table.rowCount() == initial_count + 1
def test_manage_reminders_dialog_edit_reminder(qtbot, app, fresh_db): def test_manage_reminders_dialog_edit_reminder(qtbot, app, fresh_db):
@ -492,16 +503,20 @@ def test_manage_reminders_dialog_edit_reminder(qtbot, app, fresh_db):
dialog = ManageRemindersDialog(fresh_db) dialog = ManageRemindersDialog(fresh_db)
qtbot.addWidget(dialog) qtbot.addWidget(dialog)
with patch.object(ReminderDialog, "exec", return_value=QDialog.Accepted): updated = Reminder(
with patch.object(ReminderDialog, "get_reminder") as mock_get: id=1,
mock_get.return_value = Reminder( text="Updated",
id=1, time_str="11:00",
text="Updated", reminder_type=ReminderType.DAILY,
time_str="11:00", )
reminder_type=ReminderType.DAILY,
)
dialog._edit_reminder(reminder) # Mock the entire ReminderDialog class to avoid Qt parent issues
mock_dialog = MagicMock()
mock_dialog.exec.return_value = QDialog.Accepted
mock_dialog.get_reminder.return_value = updated
with patch("bouquin.reminders.ReminderDialog", return_value=mock_dialog):
dialog._edit_reminder(reminder)
def test_manage_reminders_dialog_delete_reminder(qtbot, app, fresh_db): def test_manage_reminders_dialog_delete_reminder(qtbot, app, fresh_db):
@ -627,7 +642,11 @@ def test_upcoming_reminders_widget_manage_button(qtbot, app, fresh_db):
widget = UpcomingRemindersWidget(fresh_db) widget = UpcomingRemindersWidget(fresh_db)
qtbot.addWidget(widget) qtbot.addWidget(widget)
with patch.object(ManageRemindersDialog, "exec"): # Mock the entire ManageRemindersDialog class to avoid Qt parent issues
mock_dialog = MagicMock()
mock_dialog.exec.return_value = QDialog.Accepted
with patch("bouquin.reminders.ManageRemindersDialog", return_value=mock_dialog):
widget._manage_reminders() widget._manage_reminders()