mirror of
https://github.com/apache/superset.git
synced 2026-04-19 08:04:53 +00:00
fix(Dashboard): Sync/Async Dashboard Screenshot Generation and Default Cache (#30755)
Co-authored-by: Michael S. Molina <michael.s.molina@gmail.com> Co-authored-by: Michael S. Molina <70410625+michael-s-molina@users.noreply.github.com>
This commit is contained in:
@@ -3025,7 +3025,9 @@ class TestDashboardApi(ApiOwnersTestCaseMixin, InsertChartMixin, SupersetTestCas
|
||||
return self.client.get(uri)
|
||||
|
||||
@pytest.mark.usefixtures("create_dashboard_with_tag")
|
||||
def test_cache_dashboard_screenshot_success(self):
|
||||
@patch("superset.dashboards.api.is_feature_enabled")
|
||||
def test_cache_dashboard_screenshot_success(self, is_feature_enabled):
|
||||
is_feature_enabled.return_value = True
|
||||
self.login(ADMIN_USERNAME)
|
||||
dashboard = (
|
||||
db.session.query(Dashboard)
|
||||
@@ -3036,7 +3038,9 @@ class TestDashboardApi(ApiOwnersTestCaseMixin, InsertChartMixin, SupersetTestCas
|
||||
assert response.status_code == 202
|
||||
|
||||
@pytest.mark.usefixtures("create_dashboard_with_tag")
|
||||
def test_cache_dashboard_screenshot_dashboard_validation(self):
|
||||
@patch("superset.dashboards.api.is_feature_enabled")
|
||||
def test_cache_dashboard_screenshot_dashboard_validation(self, is_feature_enabled):
|
||||
is_feature_enabled.return_value = True
|
||||
self.login(ADMIN_USERNAME)
|
||||
dashboard = (
|
||||
db.session.query(Dashboard)
|
||||
@@ -3052,7 +3056,9 @@ class TestDashboardApi(ApiOwnersTestCaseMixin, InsertChartMixin, SupersetTestCas
|
||||
response = self._cache_screenshot(dashboard.id, invalid_payload)
|
||||
assert response.status_code == 400
|
||||
|
||||
def test_cache_dashboard_screenshot_dashboard_not_found(self):
|
||||
@patch("superset.dashboards.api.is_feature_enabled")
|
||||
def test_cache_dashboard_screenshot_dashboard_not_found(self, is_feature_enabled):
|
||||
is_feature_enabled.return_value = True
|
||||
self.login(ADMIN_USERNAME)
|
||||
non_existent_id = 999
|
||||
response = self._cache_screenshot(non_existent_id)
|
||||
@@ -3061,10 +3067,14 @@ class TestDashboardApi(ApiOwnersTestCaseMixin, InsertChartMixin, SupersetTestCas
|
||||
@pytest.mark.usefixtures("create_dashboard_with_tag")
|
||||
@patch("superset.dashboards.api.cache_dashboard_screenshot")
|
||||
@patch("superset.dashboards.api.DashboardScreenshot.get_from_cache_key")
|
||||
def test_screenshot_success_png(self, mock_get_cache, mock_cache_task):
|
||||
@patch("superset.dashboards.api.is_feature_enabled")
|
||||
def test_screenshot_success_png(
|
||||
self, is_feature_enabled, mock_get_cache, mock_cache_task
|
||||
):
|
||||
"""
|
||||
Validate screenshot returns png
|
||||
"""
|
||||
is_feature_enabled.return_value = True
|
||||
self.login(ADMIN_USERNAME)
|
||||
mock_cache_task.return_value = None
|
||||
mock_get_cache.return_value = BytesIO(b"fake image data")
|
||||
@@ -3087,12 +3097,14 @@ class TestDashboardApi(ApiOwnersTestCaseMixin, InsertChartMixin, SupersetTestCas
|
||||
@patch("superset.dashboards.api.cache_dashboard_screenshot")
|
||||
@patch("superset.dashboards.api.build_pdf_from_screenshots")
|
||||
@patch("superset.dashboards.api.DashboardScreenshot.get_from_cache_key")
|
||||
@patch("superset.dashboards.api.is_feature_enabled")
|
||||
def test_screenshot_success_pdf(
|
||||
self, mock_get_from_cache, mock_build_pdf, mock_cache_task
|
||||
self, is_feature_enabled, mock_get_from_cache, mock_build_pdf, mock_cache_task
|
||||
):
|
||||
"""
|
||||
Validate screenshot can return pdf.
|
||||
"""
|
||||
is_feature_enabled.return_value = True
|
||||
self.login(ADMIN_USERNAME)
|
||||
mock_cache_task.return_value = None
|
||||
mock_get_from_cache.return_value = BytesIO(b"fake image data")
|
||||
@@ -3115,7 +3127,11 @@ class TestDashboardApi(ApiOwnersTestCaseMixin, InsertChartMixin, SupersetTestCas
|
||||
@pytest.mark.usefixtures("create_dashboard_with_tag")
|
||||
@patch("superset.dashboards.api.cache_dashboard_screenshot")
|
||||
@patch("superset.dashboards.api.DashboardScreenshot.get_from_cache_key")
|
||||
def test_screenshot_not_in_cache(self, mock_get_cache, mock_cache_task):
|
||||
@patch("superset.dashboards.api.is_feature_enabled")
|
||||
def test_screenshot_not_in_cache(
|
||||
self, is_feature_enabled, mock_get_cache, mock_cache_task
|
||||
):
|
||||
is_feature_enabled.return_value = True
|
||||
self.login(ADMIN_USERNAME)
|
||||
mock_cache_task.return_value = None
|
||||
mock_get_cache.return_value = None
|
||||
@@ -3132,7 +3148,9 @@ class TestDashboardApi(ApiOwnersTestCaseMixin, InsertChartMixin, SupersetTestCas
|
||||
response = self._get_screenshot(dashboard.id, cache_key, "pdf")
|
||||
assert response.status_code == 404
|
||||
|
||||
def test_screenshot_dashboard_not_found(self):
|
||||
@patch("superset.dashboards.api.is_feature_enabled")
|
||||
def test_screenshot_dashboard_not_found(self, is_feature_enabled):
|
||||
is_feature_enabled.return_value = True
|
||||
self.login(ADMIN_USERNAME)
|
||||
non_existent_id = 999
|
||||
response = self._get_screenshot(non_existent_id, "some_cache_key", "png")
|
||||
@@ -3141,7 +3159,11 @@ class TestDashboardApi(ApiOwnersTestCaseMixin, InsertChartMixin, SupersetTestCas
|
||||
@pytest.mark.usefixtures("create_dashboard_with_tag")
|
||||
@patch("superset.dashboards.api.cache_dashboard_screenshot")
|
||||
@patch("superset.dashboards.api.DashboardScreenshot.get_from_cache_key")
|
||||
def test_screenshot_invalid_download_format(self, mock_get_cache, mock_cache_task):
|
||||
@patch("superset.dashboards.api.is_feature_enabled")
|
||||
def test_screenshot_invalid_download_format(
|
||||
self, is_feature_enabled, mock_get_cache, mock_cache_task
|
||||
):
|
||||
is_feature_enabled.return_value = True
|
||||
self.login(ADMIN_USERNAME)
|
||||
mock_cache_task.return_value = None
|
||||
mock_get_cache.return_value = BytesIO(b"fake png data")
|
||||
@@ -3158,3 +3180,20 @@ class TestDashboardApi(ApiOwnersTestCaseMixin, InsertChartMixin, SupersetTestCas
|
||||
|
||||
response = self._get_screenshot(dashboard.id, cache_key, "invalid")
|
||||
assert response.status_code == 404
|
||||
|
||||
@pytest.mark.usefixtures("create_dashboard_with_tag")
|
||||
@patch("superset.dashboards.api.is_feature_enabled")
|
||||
def test_cache_dashboard_screenshot_feature_disabled(self, is_feature_enabled):
|
||||
is_feature_enabled.return_value = False
|
||||
self.login(ADMIN_USERNAME)
|
||||
|
||||
dashboard = (
|
||||
db.session.query(Dashboard)
|
||||
.filter(Dashboard.dashboard_title == "dash with tag")
|
||||
.first()
|
||||
)
|
||||
|
||||
assert dashboard is not None
|
||||
|
||||
response = self._cache_screenshot(dashboard.id)
|
||||
assert response.status_code == 404
|
||||
|
||||
Reference in New Issue
Block a user