78 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# tests/test_main_window.py
 | 
						|
import pytest
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def patched_main_window(monkeypatch, qtbot, fake_db_cls, fake_key_prompt_cls):
 | 
						|
    """Construct MainWindow with faked DB + KeyPrompt so tests are deterministic."""
 | 
						|
    mw_mod = pytest.importorskip("bouquin.main_window")
 | 
						|
    # Swap DBManager with in-memory fake
 | 
						|
    monkeypatch.setattr(mw_mod, "DBManager", fake_db_cls, raising=True)
 | 
						|
    # Make the unlock dialog auto-accept with a known key
 | 
						|
    monkeypatch.setattr(mw_mod, "KeyPrompt", fake_key_prompt_cls, raising=True)
 | 
						|
 | 
						|
    MainWindow = mw_mod.MainWindow
 | 
						|
    win = MainWindow()
 | 
						|
    qtbot.addWidget(win)
 | 
						|
    win.show()
 | 
						|
    return win, mw_mod, fake_db_cls, fake_key_prompt_cls
 | 
						|
 | 
						|
 | 
						|
def test_always_prompts_for_key_and_uses_it(patched_main_window):
 | 
						|
    win, mw_mod, FakeDB, FakeKP = patched_main_window
 | 
						|
    # The fake DB instance is on win.db; it records the key provided by the UI flow
 | 
						|
    assert isinstance(win.db, FakeDB)
 | 
						|
    assert win.db.connected_key == "sekret"
 | 
						|
    assert FakeKP.accepted_count >= 1  # was prompted at startup
 | 
						|
 | 
						|
 | 
						|
def test_manual_save_current_day(patched_main_window, qtbot):
 | 
						|
    win, *_ = patched_main_window
 | 
						|
 | 
						|
    # Type into the editor and save
 | 
						|
    win.editor.setHtml("Test note")
 | 
						|
    win._save_current(explicit=True)  # call directly to avoid waiting timers
 | 
						|
 | 
						|
    day = win._current_date_iso()
 | 
						|
    assert "Test note" in win.db.get_entry(day)
 | 
						|
 | 
						|
 | 
						|
def test_switch_day_saves_previous(patched_main_window, qtbot):
 | 
						|
    from PySide6.QtCore import QDate
 | 
						|
 | 
						|
    win, *_ = patched_main_window
 | 
						|
 | 
						|
    # Write on Day 1
 | 
						|
    d1 = win.calendar.selectedDate()
 | 
						|
    d1_iso = f"{d1.year():04d}-{d1.month():02d}-{d1.day():02d}"
 | 
						|
    win.editor.setHtml("Notes day 1")
 | 
						|
 | 
						|
    # Trigger a day change (this path calls _on_date_changed via signal)
 | 
						|
    d2 = d1.addDays(1)
 | 
						|
    win.calendar.setSelectedDate(d2)
 | 
						|
    # After changing, previous day should be saved; editor now shows day 2 content (empty)
 | 
						|
    assert "Notes day 1" in win.db.get_entry(d1_iso)
 | 
						|
    assert win.editor.toPlainText() == ""
 | 
						|
 | 
						|
 | 
						|
def test_calendar_marks_refresh(patched_main_window, qtbot):
 | 
						|
    from PySide6.QtCore import QDate
 | 
						|
    from PySide6.QtGui import QTextCharFormat, QFont
 | 
						|
 | 
						|
    win, *_ = patched_main_window
 | 
						|
 | 
						|
    # Put content on two dates and refresh marks
 | 
						|
    today = win.calendar.selectedDate()
 | 
						|
    win.db.upsert_entry(f"{today.year():04d}-{today.month():02d}-{today.day():02d}", "x")
 | 
						|
    another = today.addDays(2)
 | 
						|
    win.db.upsert_entry(f"{another.year():04d}-{another.month():02d}-{another.day():02d}", "y")
 | 
						|
 | 
						|
    win._refresh_calendar_marks()
 | 
						|
 | 
						|
    fmt_today = win.calendar.dateTextFormat(today)
 | 
						|
    fmt_other = win.calendar.dateTextFormat(another)
 | 
						|
 | 
						|
    # Both should be bold (DemiBold or Bold depending on platform); we just assert non-Normal
 | 
						|
    assert fmt_today.fontWeight() != QFont.Weight.Normal
 | 
						|
    assert fmt_other.fontWeight() != QFont.Weight.Normal
 | 
						|
 |