"""Tests for persistence features: column widths and last sort reapplication.""" import tkinter as tk from tkinter import ttk import pytest from thechart.ui 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("thechart.core.preferences.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("thechart.core.preferences.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"