def test_clean_tab_missing_tab_selected_gives_none(self): """ If the user has selected a nonexistent tab, pretend tab is blank. JS sees nonexistent tab slugs. render() doesn't. """ context = self._render_context(tab_results={}) result = clean_value(ParamDType.Tab(), "tab-XXX", context) self.assertEqual(result, None)
def test_clean_multicolumn_from_other_tab_that_does_not_exist(self): # The other tab would not exist if the user selected and then deleted # it. schema = ParamDType.Dict({ "tab": ParamDType.Tab(), "columns": ParamDType.Multicolumn(tab_parameter="tab"), }) params = {"tab": "tab-missing", "columns": ["A-from-tab-1"]} context = self._render_context( input_table=arrow_table({"A-from-tab-1": [1]}), tab_results={}, params=params, ) result = clean_value(schema, params, context) # result['tab'] is not what we're testing here self.assertEqual(result["columns"], [])
def test_clean_multicolumn_from_other_tab(self): tab2 = Tab("tab-2", "Tab 2") tab2_output_table = arrow_table({"A-from-tab-2": [1, 2]}) schema = ParamDType.Dict({ "tab": ParamDType.Tab(), "columns": ParamDType.Multicolumn(tab_parameter="tab"), }) params = {"tab": "tab-2", "columns": ["A-from-tab-1", "A-from-tab-2"]} context = self._render_context( input_table=arrow_table({"A-from-tab-1": [1]}), tab_results={tab2: RenderResult(tab2_output_table)}, params=params, ) result = clean_value(schema, params, context) # result['tab'] is not what we're testing here self.assertEqual(result["columns"], ["A-from-tab-2"])
def test_clean_tab_unreachable(self): tab = Tab("tab-error", "Buggy Tab") context = self._render_context(tab_results={tab: RenderResult()}) with self.assertRaises(TabOutputUnreachableError): clean_value(ParamDType.Tab(), "tab-error", context)
def test_clean_tab_cycle(self): tab = Tab("tab-1", "Tab 1") context = self._render_context(tab_results={tab: None}) with self.assertRaises(TabCycleError): clean_value(ParamDType.Tab(), "tab-1", context)
def test_clean_tab_no_tab_selected_gives_none(self): context = self._render_context(tab_results={}) result = clean_value(ParamDType.Tab(), "", context) self.assertEqual(result, None)
def test_clean_tab_happy_path(self): tab = Tab("tab-1", "Tab 1") table = arrow_table({"A": [1, 2]}) context = self._render_context(tab_results={tab: RenderResult(table)}) result = clean_value(ParamDType.Tab(), "tab-1", context) self.assertEqual(result, TabOutput(tab, table))
def test_clean_tab_unsupported(self): with self.assertRaisesRegex(RuntimeError, "Unsupported: fetch tab"): clean_value(ParamDType.Tab(), "", None)