Refactor tests
This commit is contained in:
parent
ebb0fd6e11
commit
a29fc9423e
10 changed files with 1069 additions and 121 deletions
110
tests/test_search_history.py
Normal file
110
tests/test_search_history.py
Normal file
|
|
@ -0,0 +1,110 @@
|
|||
from PySide6.QtCore import Qt
|
||||
from PySide6.QtTest import QTest
|
||||
from PySide6.QtWidgets import QListWidget, QWidget, QAbstractButton
|
||||
|
||||
from tests.qt_helpers import (
|
||||
trigger_menu_action,
|
||||
wait_for_widget,
|
||||
find_line_edit_by_placeholder,
|
||||
)
|
||||
|
||||
|
||||
def test_search_and_open_date(open_window, qtbot):
|
||||
win = open_window
|
||||
|
||||
win.editor.setPlainText("lorem ipsum target")
|
||||
win._save_current(explicit=True)
|
||||
base = win.calendar.selectedDate()
|
||||
d2 = base.addDays(7)
|
||||
win.calendar.setSelectedDate(d2)
|
||||
win.editor.setPlainText("target appears here, too")
|
||||
win._save_current(explicit=True)
|
||||
|
||||
search_box = find_line_edit_by_placeholder(win, "search")
|
||||
assert search_box is not None, "Search input not found"
|
||||
search_box.setText("target")
|
||||
QTest.qWait(150)
|
||||
|
||||
results = getattr(getattr(win, "search", None), "results", None)
|
||||
if isinstance(results, QListWidget) and results.count() > 0:
|
||||
# Click until we land on d2
|
||||
landed = False
|
||||
for i in range(results.count()):
|
||||
item = results.item(i)
|
||||
rect = results.visualItemRect(item)
|
||||
QTest.mouseDClick(results.viewport(), Qt.LeftButton, pos=rect.center())
|
||||
qtbot.wait(120)
|
||||
if win.calendar.selectedDate() == d2:
|
||||
landed = True
|
||||
break
|
||||
assert landed, "Search results did not navigate to the expected date"
|
||||
else:
|
||||
assert "target" in win.editor.toPlainText().lower()
|
||||
|
||||
|
||||
def test_history_dialog_revert(open_window, qtbot):
|
||||
win = open_window
|
||||
|
||||
# Create two versions on the current day
|
||||
win.editor.setPlainText("v1 text")
|
||||
win._save_current(explicit=True)
|
||||
win.editor.setPlainText("v2 text")
|
||||
win._save_current(explicit=True)
|
||||
|
||||
# Open the History UI (label varies)
|
||||
try:
|
||||
trigger_menu_action(win, "View History")
|
||||
except AssertionError:
|
||||
trigger_menu_action(win, "History")
|
||||
|
||||
# Find ANY top-level window that looks like the History dialog
|
||||
def _is_history(w: QWidget):
|
||||
if not w.isWindow() or not w.isVisible():
|
||||
return False
|
||||
title = (w.windowTitle() or "").lower()
|
||||
return "history" in title or bool(w.findChildren(QListWidget))
|
||||
|
||||
hist = wait_for_widget(QWidget, predicate=_is_history, timeout_ms=15000)
|
||||
|
||||
# Wait for population and pick the list with the most items
|
||||
chosen = None
|
||||
for _ in range(120): # up to ~3s
|
||||
lists = hist.findChildren(QListWidget)
|
||||
if lists:
|
||||
chosen = max(lists, key=lambda lw: lw.count())
|
||||
if chosen.count() >= 2:
|
||||
break
|
||||
QTest.qWait(25)
|
||||
|
||||
assert (
|
||||
chosen is not None and chosen.count() >= 2
|
||||
), "History list never populated with 2+ versions"
|
||||
|
||||
# Click the older version row so the Revert button enables
|
||||
idx = 1 # row 0 is most-recent "v2 text", row 1 is "v1 text"
|
||||
rect = chosen.visualItemRect(chosen.item(idx))
|
||||
QTest.mouseClick(chosen.viewport(), Qt.LeftButton, pos=rect.center())
|
||||
QTest.qWait(100)
|
||||
|
||||
# Find any enabled button whose text/tooltip/objectName contains 'revert'
|
||||
revert_btn = None
|
||||
for _ in range(120): # wait until it enables
|
||||
for btn in hist.findChildren(QAbstractButton):
|
||||
meta = " ".join(
|
||||
[btn.text() or "", btn.toolTip() or "", btn.objectName() or ""]
|
||||
).lower()
|
||||
if "revert" in meta:
|
||||
revert_btn = btn
|
||||
break
|
||||
if revert_btn and revert_btn.isEnabled():
|
||||
break
|
||||
QTest.qWait(25)
|
||||
|
||||
assert (
|
||||
revert_btn is not None and revert_btn.isEnabled()
|
||||
), "Revert button not found/enabled"
|
||||
QTest.mouseClick(revert_btn, Qt.LeftButton)
|
||||
|
||||
# AutoResponder will accept confirm/success boxes
|
||||
QTest.qWait(150)
|
||||
assert "v1 text" in win.editor.toPlainText()
|
||||
Loading…
Add table
Add a link
Reference in a new issue