From 6286b3dfb3bc62e5ebea89fe36b955ea0b2a5135 Mon Sep 17 00:00:00 2001 From: Nose Date: Tue, 30 Dec 2025 01:34:31 -0800 Subject: [PATCH] tests: use public pipeline state accessors (get_pipeline_state) --- tests/test_pipeline_state.py | 114 +++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 tests/test_pipeline_state.py diff --git a/tests/test_pipeline_state.py b/tests/test_pipeline_state.py new file mode 100644 index 0000000..f08606e --- /dev/null +++ b/tests/test_pipeline_state.py @@ -0,0 +1,114 @@ +import pytest + +from SYS import pipeline as ctx + + +def test_new_pipeline_state_isolation(): + # Ensure we start with a clean baseline + ctx.reset() + ctx.set_last_items(["global"]) + assert ctx.get_last_items() == ["global"] + + with ctx.new_pipeline_state(): + # New state should be fresh + assert ctx.get_last_items() == [] + ctx.set_last_items(["inner1"]) + assert ctx.get_last_items() == ["inner1"] + + with ctx.new_pipeline_state(): + # Nested fresh state + assert ctx.get_last_items() == [] + ctx.set_last_items(["inner2"]) + assert ctx.get_last_items() == ["inner2"] + + # After exiting inner, outer new state should still have its values + assert ctx.get_last_items() == ["inner1"] + + # After all contexts exit, global state remains unchanged + assert ctx.get_last_items() == ["global"] + + +def test_display_overlay_priority_and_restore(): + ctx.reset() + + # Set a base last result table and items + ctx.set_last_result_table("table-a", ["a1", "a2"], subject="sub-a") + assert ctx.get_last_result_items() == ["a1", "a2"] + + # Overlay should take precedence for selection + ctx.set_last_result_table_overlay("table-b", ["b1"], subject="sub-b") + assert ctx.get_last_result_items() == ["b1"] + assert ctx.get_last_result_subject() == "sub-b" + + # Restoring previous should revert to base + assert ctx.restore_previous_result_table() is True + assert ctx.get_last_result_items() == ["a1", "a2"] + assert ctx.get_last_result_subject() == "sub-a" + + +def test_pipeline_runner_snapshot_restore(): + from TUI.pipeline_runner import PipelineRunner + + runner = PipelineRunner() + ctx.reset() + + # Seed state with a few values + ctx.set_last_result_table("table-x", ["x1", "x2"], subject="sx") + ctx.set_last_items(["L1"]) + ctx.set_current_cmdlet_name("cmd-name") + ctx.set_pending_pipeline_tail([["stage1"], ["stage2"]], source_command="source") + + snap = runner._snapshot_ctx_state() + + # Mutate state + ctx.clear_last_result() + ctx.set_last_items([]) + ctx.set_current_cmdlet_name("other") + ctx.clear_pending_pipeline_tail() + + # Restore and verify + runner._restore_ctx_state(snap) + assert ctx.get_last_result_items() == ["x1", "x2"] + assert ctx.get_last_items() == ["L1"] + assert ctx.get_current_cmdlet_name() == "cmd-name" + assert ctx.get_pending_pipeline_tail() == [["stage1"], ["stage2"]] + + +def test_preserve_history_no_push(): + ctx.reset() + + ctx.set_last_result_table("t1", ["a"], subject="s1") + # Push second table + ctx.set_last_result_table("t2", ["b"], subject="s2") + state = ctx.get_pipeline_state() + assert len(state.result_table_history) == 1 + + # Preserve history update should NOT push a new history entry + ctx.set_last_result_table_preserve_history("t2b", ["c"], subject="s2b") + assert len(state.result_table_history) == 1 + assert ctx.get_last_result_items() == ["c"] + + +def test_forward_and_restore(): + ctx.reset() + + ctx.set_last_result_table("t1", ["a"], subject="s1") + ctx.set_last_result_table("t2", ["b"], subject="s2") + + assert ctx.restore_previous_result_table() is True + assert ctx.get_last_result_items() == ["a"] + + assert ctx.restore_next_result_table() is True + assert ctx.get_last_result_items() == ["b"] + + +def test_display_items_priority(): + ctx.reset() + + ctx.set_last_result_table("base", ["x1", "x2"]) + ctx.set_last_result_items_only(["d1", "d2"]) + + # display items take priority for selection + assert ctx.get_last_result_items() == ["d1", "d2"] + # but selectable items should ignore display-only items + assert ctx.get_last_selectable_result_items() == ["x1", "x2"]