Add / filter for the plugin menu list
This commit is contained in:
@@ -11,7 +11,7 @@ from zipfile import ZipFile
|
||||
|
||||
from rich.text import Text
|
||||
from textual.coordinate import Coordinate
|
||||
from textual.widgets import DataTable
|
||||
from textual.widgets import DataTable, Input
|
||||
|
||||
from plugin_helper.bootstrap import _run_ipa, build_bootstrap_command, ensure_healthy_bootstrap
|
||||
from plugin_helper.bsipa import check_bsipa_health, planning_requires_bootstrap
|
||||
@@ -2606,8 +2606,8 @@ class PluginHelperTuiTests(unittest.IsolatedAsyncioTestCase):
|
||||
table = app.query_one(DataTable)
|
||||
self.assertEqual(table.row_count, 2)
|
||||
self.assertEqual(app.mode, "installations")
|
||||
self.assertEqual(str(table.get_cell_at(Coordinate(0, 3))), "/tmp/state-linux/installs/linux")
|
||||
self.assertEqual(str(table.get_cell_at(Coordinate(1, 3))), "/tmp/state-windows/installs/windows")
|
||||
self.assertEqual(table.get_cell_at(Coordinate(0, 3)), str(Path("/tmp/state-linux/installs/linux")))
|
||||
self.assertEqual(table.get_cell_at(Coordinate(1, 3)), str(Path("/tmp/state-windows/installs/windows")))
|
||||
|
||||
async def test_single_instance_skips_installation_picker(self) -> None:
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
@@ -2809,6 +2809,50 @@ class PluginHelperTuiTests(unittest.IsolatedAsyncioTestCase):
|
||||
self.assertNotIn("example", updated.get("disabledPlugins", {}))
|
||||
self.assertIn("hash mismatch", app.status_message)
|
||||
|
||||
async def test_slash_filters_plugin_list(self) -> None:
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
app, _instance, _state = _make_two_plugin_tui_fixture(Path(tmp))
|
||||
|
||||
async with app.run_test() as pilot:
|
||||
table = app.query_one(DataTable)
|
||||
self.assertEqual(table.row_count, 2)
|
||||
await pilot.press("/")
|
||||
await pilot.pause()
|
||||
filter_input = app.query_one("#filter", Input)
|
||||
self.assertFalse(filter_input.has_class("-hidden"))
|
||||
self.assertTrue(filter_input.has_focus)
|
||||
await pilot.press("b", "e", "t")
|
||||
await pilot.pause()
|
||||
self.assertEqual(app.filter_query, "bet")
|
||||
self.assertEqual(table.row_count, 1)
|
||||
self.assertEqual(app._filtered_plugins()[0]["id"], "beta")
|
||||
await pilot.press("enter")
|
||||
await pilot.pause()
|
||||
self.assertFalse(filter_input.has_focus)
|
||||
self.assertEqual(table.row_count, 1)
|
||||
await pilot.press("space")
|
||||
await pilot.pause()
|
||||
self.assertEqual(app.plugin_rows[1]["id"], "beta")
|
||||
self.assertEqual(app.plugin_rows[1]["status"], "disabled")
|
||||
|
||||
async def test_escape_clears_plugin_filter(self) -> None:
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
app, _instance, _state = _make_two_plugin_tui_fixture(Path(tmp))
|
||||
|
||||
async with app.run_test() as pilot:
|
||||
table = app.query_one(DataTable)
|
||||
await pilot.press("/")
|
||||
await pilot.press("a", "l")
|
||||
await pilot.pause()
|
||||
self.assertEqual(table.row_count, 1)
|
||||
self.assertEqual(app._filtered_plugins()[0]["id"], "alpha")
|
||||
await pilot.press("escape")
|
||||
await pilot.pause()
|
||||
self.assertEqual(app.filter_query, "")
|
||||
self.assertEqual(table.row_count, 2)
|
||||
self.assertTrue(app.query_one("#filter", Input).has_class("-hidden"))
|
||||
self.assertIn("Filter cleared", app.status_message)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user