feat: Add filter presets, persistent column widths, and enhanced export options
This commit is contained in:
72
tests/test_persistence_features.py
Normal file
72
tests/test_persistence_features.py
Normal file
@@ -0,0 +1,72 @@
|
||||
"""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"
|
||||
Reference in New Issue
Block a user