mirror of
https://github.com/apache/superset.git
synced 2026-04-20 08:34:37 +00:00
fix: add parent_slice_id for multilayer charts to embed (#38243)
This commit is contained in:
committed by
GitHub
parent
7f476a79b3
commit
95f61bd223
@@ -1433,3 +1433,117 @@ def test_prefetch_rls_filters_works_for_guest_user(
|
||||
# Cache should be populated with (username, table_id) keys and empty lists
|
||||
assert mock_g._rls_filter_cache[("guest_user", 10)] == []
|
||||
assert mock_g._rls_filter_cache[("guest_user", 20)] == []
|
||||
|
||||
|
||||
def test_validate_child_in_parent_multilayer_valid(
|
||||
app_context: None, mocker: MockerFixture
|
||||
) -> None:
|
||||
"""Test validation succeeds for valid multi-layer child"""
|
||||
sm = SupersetSecurityManager(appbuilder)
|
||||
|
||||
parent_slice = mocker.MagicMock(spec=Slice)
|
||||
parent_slice.params = json.dumps(
|
||||
{"viz_type": "deck_multi", "deck_slices": [1, 2, 3]}
|
||||
)
|
||||
|
||||
# Child 2 is in parent's deck_slices
|
||||
assert sm._validate_child_in_parent_multilayer(
|
||||
child_slice_id=2, parent_slice=parent_slice
|
||||
)
|
||||
|
||||
|
||||
def test_validate_child_in_parent_multilayer_invalid_child(
|
||||
app_context: None, mocker: MockerFixture
|
||||
) -> None:
|
||||
"""Test validation fails for child not in parent config"""
|
||||
sm = SupersetSecurityManager(appbuilder)
|
||||
|
||||
parent_slice = mocker.MagicMock(spec=Slice)
|
||||
parent_slice.params = json.dumps(
|
||||
{"viz_type": "deck_multi", "deck_slices": [1, 2, 3]}
|
||||
)
|
||||
|
||||
# Child 5 is NOT in parent's deck_slices
|
||||
assert not sm._validate_child_in_parent_multilayer(
|
||||
child_slice_id=5, parent_slice=parent_slice
|
||||
)
|
||||
|
||||
|
||||
def test_validate_child_in_parent_multilayer_wrong_viz_type(
|
||||
app_context: None, mocker: MockerFixture
|
||||
) -> None:
|
||||
"""Test validation fails for non-multilayer charts"""
|
||||
sm = SupersetSecurityManager(appbuilder)
|
||||
|
||||
parent_slice = mocker.MagicMock(spec=Slice)
|
||||
parent_slice.params = json.dumps(
|
||||
{
|
||||
"viz_type": "line", # Not deck_multi
|
||||
"deck_slices": [1, 2, 3],
|
||||
}
|
||||
)
|
||||
|
||||
assert not sm._validate_child_in_parent_multilayer(
|
||||
child_slice_id=2, parent_slice=parent_slice
|
||||
)
|
||||
|
||||
|
||||
def test_validate_child_in_parent_multilayer_empty_deck_slices(
|
||||
app_context: None, mocker: MockerFixture
|
||||
) -> None:
|
||||
"""Test validation fails when deck_slices is empty"""
|
||||
sm = SupersetSecurityManager(appbuilder)
|
||||
|
||||
parent_slice = mocker.MagicMock(spec=Slice)
|
||||
parent_slice.params = json.dumps({"viz_type": "deck_multi", "deck_slices": []})
|
||||
|
||||
assert not sm._validate_child_in_parent_multilayer(
|
||||
child_slice_id=1, parent_slice=parent_slice
|
||||
)
|
||||
|
||||
|
||||
def test_validate_child_in_parent_multilayer_no_deck_slices(
|
||||
app_context: None, mocker: MockerFixture
|
||||
) -> None:
|
||||
"""Test validation fails when deck_slices is missing"""
|
||||
sm = SupersetSecurityManager(appbuilder)
|
||||
|
||||
parent_slice = mocker.MagicMock(spec=Slice)
|
||||
parent_slice.params = json.dumps(
|
||||
{
|
||||
"viz_type": "deck_multi"
|
||||
# No deck_slices key
|
||||
}
|
||||
)
|
||||
|
||||
assert not sm._validate_child_in_parent_multilayer(
|
||||
child_slice_id=1, parent_slice=parent_slice
|
||||
)
|
||||
|
||||
|
||||
def test_validate_child_in_parent_multilayer_malformed_json(
|
||||
app_context: None, mocker: MockerFixture
|
||||
) -> None:
|
||||
"""Test validation fails gracefully with malformed JSON"""
|
||||
sm = SupersetSecurityManager(appbuilder)
|
||||
|
||||
parent_slice = mocker.MagicMock(spec=Slice)
|
||||
parent_slice.params = "not valid json {{"
|
||||
|
||||
assert not sm._validate_child_in_parent_multilayer(
|
||||
child_slice_id=1, parent_slice=parent_slice
|
||||
)
|
||||
|
||||
|
||||
def test_validate_child_in_parent_multilayer_null_params(
|
||||
app_context: None, mocker: MockerFixture
|
||||
) -> None:
|
||||
"""Test validation fails gracefully with null params"""
|
||||
sm = SupersetSecurityManager(appbuilder)
|
||||
|
||||
parent_slice = mocker.MagicMock(spec=Slice)
|
||||
parent_slice.params = None
|
||||
|
||||
assert not sm._validate_child_in_parent_multilayer(
|
||||
child_slice_id=1, parent_slice=parent_slice
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user