def test_clean_tabs_happy_path(self): tab2 = Tab("tab-2", "Tab 2") tab2_output = arrow_table({"B": [1]}) tab3 = Tab("tab-3", "Tab 3") tab3_output = arrow_table({"C": [1]}) context = self._render_context(tab_results={ tab2: RenderResult(tab2_output), tab3: RenderResult(tab3_output), }) result = clean_value(ParamDType.Multitab(), ["tab-2", "tab-3"], context) self.assertEqual( result, [TabOutput(tab2, tab2_output), TabOutput(tab3, tab3_output)])
def test_clean_tabs_preserve_ordering(self): tab2 = Tab("tab-2", "Tab 2") tab2_output = arrow_table({"B": [1]}) tab3 = Tab("tab-3", "Tab 3") tab3_output = arrow_table({"C": [1]}) context = self._render_context( # RenderContext's dict ordering determines desired tab order. # (Python 3.7 spec: dict is ordered in insertion order. CPython 3.6 # and PyPy 7 do this, too.) tab_results={ tab3: RenderResult(tab3_output), tab2: RenderResult(tab2_output), }) # Supply wrongly-ordered tabs; renderprep should reorder them. result = clean_value(ParamDType.Multitab(), ["tab-2", "tab-3"], context) self.assertEqual([t.tab.slug for t in result], ["tab-3", "tab-2"])
def test_clean_tabs_tab_unreachable(self): tab = Tab("tab-1", "Tab 1") context = self._render_context(tab_results={tab: RenderResult()}) with self.assertRaises(TabOutputUnreachableError): clean_value(ParamDType.Multitab(), ["tab-1"], context)
def test_clean_tabs_tab_cycle(self): tab = Tab("tab-1", "Tab 1") context = self._render_context(tab_results={tab: None}) with self.assertRaises(TabCycleError): clean_value(ParamDType.Multitab(), ["tab-1"], context)
def test_clean_tabs_nix_missing_tab(self): context = self._render_context(tab_results={}) result = clean_value(ParamDType.Multitab(), ["tab-missing"], context) self.assertEqual(result, [])
def test_clean_multitab_unsupported(self): with self.assertRaisesRegex(RuntimeError, "Unsupported: fetch multitab"): clean_value(ParamDType.Multitab(), "", None)