73 lines
2.2 KiB
Python
73 lines
2.2 KiB
Python
"""Tests for persistence features: column widths and last sort reapplication."""
|
|
|
|
import tkinter as tk
|
|
from tkinter import ttk
|
|
|
|
import pytest
|
|
|
|
from src.ui_manager import UIManager
|
|
|
|
|
|
@pytest.fixture
|
|
def root_window():
|
|
root = tk.Tk()
|
|
yield root
|
|
root.destroy()
|
|
|
|
|
|
@pytest.fixture
|
|
def ui_manager(root_window, mock_logger):
|
|
return UIManager(root_window, mock_logger)
|
|
|
|
|
|
def test_table_applies_saved_column_widths(ui_manager, root_window, monkeypatch):
|
|
# Provide a fake get_pref that returns widths for some columns
|
|
saved = {"column_widths": {"Date": 123, "Note": 456}}
|
|
|
|
def fake_get_pref(key, default=None): # type: ignore[override]
|
|
return saved.get(key, default)
|
|
|
|
monkeypatch.setattr("src.ui_manager.get_pref", fake_get_pref)
|
|
|
|
main = ttk.Frame(root_window)
|
|
table_ui = ui_manager.create_table_frame(main)
|
|
tree: ttk.Treeview = table_ui["tree"]
|
|
|
|
# Verify widths applied
|
|
assert int(tree.column("Date", option="width")) == 123
|
|
assert int(tree.column("Note", option="width")) == 456
|
|
|
|
|
|
def test_reapply_last_sort_descending(ui_manager, root_window, monkeypatch):
|
|
# Simulate last sort on 'Date' descending
|
|
saved = {"last_sort": {"column": "Date", "ascending": False}}
|
|
|
|
def fake_get_pref(key, default=None): # type: ignore[override]
|
|
return saved.get(key, default)
|
|
|
|
monkeypatch.setattr("src.ui_manager.get_pref", fake_get_pref)
|
|
|
|
main = ttk.Frame(root_window)
|
|
table_ui = ui_manager.create_table_frame(main)
|
|
tree: ttk.Treeview = table_ui["tree"]
|
|
|
|
# Insert a few rows with Date values that sort numerically
|
|
# Columns are dynamic; ensure we provide a value for each column
|
|
cols = list(tree["columns"])
|
|
idx_date = cols.index("Date")
|
|
|
|
def row_with_date(val: str):
|
|
row = [""] * len(cols)
|
|
row[idx_date] = val
|
|
return row
|
|
|
|
tree.insert("", "end", values=row_with_date("1"))
|
|
tree.insert("", "end", values=row_with_date("3"))
|
|
tree.insert("", "end", values=row_with_date("2"))
|
|
|
|
# Reapply last sort (descending) and verify first row has Date '3'
|
|
ui_manager.reapply_last_sort(tree)
|
|
first_item = tree.get_children("")[0]
|
|
first_vals = tree.item(first_item, "values")
|
|
assert str(first_vals[idx_date]) == "3"
|