def test_clean_tabs_tab_cycle(self): with self.assertRaises(TabCycleError): self._call_clean_value( ParamSchema.Multitab(), ["tab-1"], tab_results={Tab("tab-1", "Tab 1"): None}, )
def test_clean_tabs_tab_unreachable(self): with self.assertRaises(TabOutputUnreachableError): self._call_clean_value( ParamSchema.Multitab(), ["tab-1"], tab_results={ Tab("tab-1", "Tab 1"): StepResult(Path("tab-1.arrow"), []) }, )
def test_clean_tabs_happy_path(self): self.assertEqual( self._call_prep_params( ParamSchema.Dict({"x": ParamSchema.Multitab()}), {"x": ["tab-2", "tab-3"]}, tab_results={ Tab("tab-2", "Tab 2"): StepResult(Path("tab-2.arrow"), [NUMBER("B")]), Tab("tab-3", "Tab 3"): StepResult(Path("tab-3.arrow"), [NUMBER("C")]), }, ), PrepParamsResult( {"x": ["tab-2", "tab-3"]}, { "tab-2": TabOutput("Tab 2", "tab-2.arrow"), "tab-3": TabOutput("Tab 3", "tab-3.arrow"), }, uploaded_files={}, ), )
def test_clean_tabs_preserve_ordering(self): # "x" gives wrongly-ordered tabs; renderprep should reorder them. result = self._call_prep_params( ParamSchema.Dict({"x": ParamSchema.Multitab()}), {"x": ["tab-2", "tab-3"]}, tab_results={ Tab("tab-3", "Tab 3"): StepResult(Path("tab-3.arrow"), [NUMBER("C")]), Tab("tab-2", "Tab 2"): StepResult(Path("tab-2.arrow"), [NUMBER("B")]), }, ) self.assertEqual( result, PrepParamsResult( {"x": ["tab-3", "tab-2"]}, { "tab-3": TabOutput("Tab 3", "tab-3.arrow"), "tab-2": TabOutput("Tab 2", "tab-2.arrow"), }, uploaded_files={}, ), )
def test_clean_multitab_unsupported(self): with self.assertRaisesRegex(RuntimeError, "Unsupported: fetch multitab"): clean_value(ParamSchema.Multitab(), "", None)
def test_validate_empty_tab_is_error(self): with pytest.raises(ValueError, match="Empty tab not allowed"): S.Multitab().validate([""])
def test_validate_str_is_error(self): with pytest.raises(ValueError): S.Multitab().validate("X,Y")
def test_validate_list_of_non_str_is_error(self): with pytest.raises(ValueError): S.Multitab().validate([1, 2])
def test_validate_list_of_str_ok(self): S.Multitab().validate(["tab-1", "tab-2"]),
def test_default(self): assert S.Multitab().default == []
def test_clean_tabs_nix_missing_tab(self): self.assertEqual( self._call_clean_value(ParamSchema.Multitab(), ["tab-missing"]), [])