import pytest from fasthtml.components import * from myfasthtml.controls.TabsManager import TabsManager from myfasthtml.core.instances import InstancesManager from myfasthtml.test.matcher import matches, NoChildren from .conftest import session @pytest.fixture() def tabs_manager(session): yield TabsManager(session) InstancesManager.reset() class TestTabsManagerBehaviour: def test_tabs_manager_is_registered(self, session, tabs_manager): from_instance_manager = InstancesManager.get(session, tabs_manager.get_id()) assert from_instance_manager == tabs_manager def test_i_can_add_tab(self, tabs_manager): tab_id = tabs_manager.add_tab("Users", Div("Content 1")) assert tab_id is not None assert tab_id in tabs_manager.get_state().tabs assert tabs_manager.get_state().tabs[tab_id]["label"] == "Users" assert tabs_manager.get_state().tabs[tab_id]["component_type"] is None # Div is not BaseInstance assert tabs_manager.get_state().tabs[tab_id]["component_id"] is None # Div is not BaseInstance assert tabs_manager.get_state().tabs_order == [tab_id] assert tabs_manager.get_state().active_tab == tab_id def test_i_can_add_multiple_tabs(self, tabs_manager): tab_id1 = tabs_manager.add_tab("Users", Div("Content 1")) tab_id2 = tabs_manager.add_tab("User2", Div("Content 2")) assert len(tabs_manager.get_state().tabs) == 2 assert tabs_manager.get_state().tabs_order == [tab_id1, tab_id2] assert tabs_manager.get_state().active_tab == tab_id2 class TestTabsManagerRender: def test_i_can_render_when_no_tabs(self, tabs_manager): res = tabs_manager.render() expected = Div( Div(NoChildren(), id=f"{tabs_manager.get_id()}-header"), Div(id=f"{tabs_manager.get_id()}-content"), id=tabs_manager.get_id(), ) assert matches(res, expected) def test_i_can_render_when_one_tab(self, tabs_manager): tabs_manager.add_tab("Users", Div("Content 1")) res = tabs_manager.render() expected = Div( Div( Button(), id=f"{tabs_manager.get_id()}-header" ), Div( Div("Content 1") ), id=tabs_manager.get_id(), ) assert matches(res, expected) def test_i_can_render_when_multiple_tabs(self, tabs_manager): tabs_manager.add_tab("Users1", Div("Content 1")) tabs_manager.add_tab("Users2", Div("Content 2")) tabs_manager.add_tab("Users3", Div("Content 3")) res = tabs_manager.render() expected = Div( Div( Button(), Button(), Button(), id=f"{tabs_manager.get_id()}-header" ), Div( Div("Content 3") ), id=tabs_manager.get_id(), ) assert matches(res, expected)