Skip to content

Commit

Permalink
integration tests for report tabs
Browse files Browse the repository at this point in the history
  • Loading branch information
fisjac committed Jun 25, 2024
1 parent 10d7df1 commit a86e642
Show file tree
Hide file tree
Showing 3 changed files with 101 additions and 3 deletions.
6 changes: 3 additions & 3 deletions superset/commands/report/execute.py
Original file line number Diff line number Diff line change
Expand Up @@ -169,15 +169,15 @@ def _get_url(
force=force,
**kwargs,
)

# If we need to render dashboard in a specific state, use stateful permalink
if dashboard_state := self._report_schedule.extra.get("dashboard"):
if (

Check warning on line 173 in superset/commands/report/execute.py

View check run for this annotation

Codecov / codecov/patch

superset/commands/report/execute.py#L173

Added line #L173 was not covered by tests
dashboard_state := self._report_schedule.extra.get("dashboard")
) and feature_flag_manager.is_feature_enabled("ALERT_REPORT_TABS"):
permalink_key = CreateDashboardPermalinkCommand(
dashboard_id=str(self._report_schedule.dashboard.uuid),
state=dashboard_state,
).run()
return get_url_path("Superset.dashboard_permalink", key=permalink_key)

dashboard = self._report_schedule.dashboard
dashboard_id_or_slug = (
dashboard.uuid if dashboard and dashboard.uuid else dashboard.id
Expand Down
92 changes: 92 additions & 0 deletions tests/integration_tests/reports/commands_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@
)
from superset.commands.report.log_prune import AsyncPruneReportScheduleLogCommand
from superset.exceptions import SupersetException
from superset.key_value.models import KeyValueEntry
from superset.models.core import Database
from superset.models.dashboard import Dashboard
from superset.models.slice import Slice
Expand All @@ -82,6 +83,9 @@
load_birth_names_dashboard_with_slices, # noqa: F401
load_birth_names_data, # noqa: F401
)
from tests.integration_tests.fixtures.tabbed_dashboard import (
tabbed_dashboard, # noqa: F401
)
from tests.integration_tests.fixtures.world_bank_dashboard import (
load_world_bank_dashboard_with_slices_module_scope, # noqa: F401
load_world_bank_data, # noqa: F401
Expand All @@ -91,6 +95,7 @@
create_report_notification,
CSV_FILE,
DEFAULT_OWNER_EMAIL,
reset_key_values,
SCREENSHOT_FILE,
TEST_ID,
)
Expand Down Expand Up @@ -1064,6 +1069,93 @@ def test_email_dashboard_report_schedule(
statsd_mock.assert_called_once_with("reports.email.send.ok", 1)


@pytest.mark.usefixtures("tabbed_dashboard")
@patch("superset.utils.screenshots.DashboardScreenshot.get_screenshot")
@patch("superset.reports.notifications.email.send_email_smtp")
@patch.dict(
"superset.extensions.feature_flag_manager._feature_flags", ALERT_REPORT_TABS=True
)
def test_email_dashboard_report_schedule_with_tab_anchor(
_email_mock,
_screenshot_mock,
):
"""
ExecuteReport Command: Test dashboard email report schedule with tab metadata
"""
with freeze_time("2020-01-01T00:00:00Z"):
with patch.object(current_app.config["STATS_LOGGER"], "gauge") as statsd_mock:
# get tabbed dashboard fixture
dashboard = db.session.query(Dashboard).all()[1]
# build report_schedule
report_schedule = create_report_notification(
email_target="[email protected]",
dashboard=dashboard,
extra={"dashboard": {"anchor": "TAB-L2AB"}},
)
AsyncExecuteReportScheduleCommand(
TEST_ID, report_schedule.id, datetime.utcnow()
).run()

# Assert logs are correct
assert_log(ReportState.SUCCESS)
statsd_mock.assert_called_once_with("reports.email.send.ok", 1)

pl = (
db.session.query(KeyValueEntry)
.order_by(KeyValueEntry.id.desc())
.first()
)

value = json.loads(pl.value)
# test that report schedule extra json matches permalink state
assert report_schedule.extra["dashboard"] == value["state"]

# remove report_schedule
cleanup_report_schedule(report_schedule)
# remove permalink kvalues
reset_key_values()


@pytest.mark.usefixtures("tabbed_dashboard")
@patch("superset.utils.screenshots.DashboardScreenshot.get_screenshot")
@patch("superset.reports.notifications.email.send_email_smtp")
@patch.dict(
"superset.extensions.feature_flag_manager._feature_flags", ALERT_REPORT_TABS=False
)
def test_email_dashboard_report_schedule_disabled_tabs(
_email_mock,
_screenshot_mock,
):
"""
ExecuteReport Command: Test dashboard email report schedule with tab metadata
"""
with freeze_time("2020-01-01T00:00:00Z"):
with patch.object(current_app.config["STATS_LOGGER"], "gauge") as statsd_mock:
# get tabbed dashboard fixture
dashboard = db.session.query(Dashboard).all()[1]
# build report_schedule
report_schedule = create_report_notification(
email_target="[email protected]",
dashboard=dashboard,
extra={"dashboard": {"anchor": "TAB-L2AB"}},
)
AsyncExecuteReportScheduleCommand(
TEST_ID, report_schedule.id, datetime.utcnow()
).run()

# Assert logs are correct
assert_log(ReportState.SUCCESS)
statsd_mock.assert_called_once_with("reports.email.send.ok", 1)

permalinks = db.session.query(KeyValueEntry).all()

# test that report schedule extra json matches permalink state
assert len(permalinks) == 0

# remove report_schedule
cleanup_report_schedule(report_schedule)


@pytest.mark.usefixtures(
"load_birth_names_dashboard_with_slices",
"create_report_email_dashboard_force_screenshot",
Expand Down
6 changes: 6 additions & 0 deletions tests/integration_tests/reports/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
from flask_appbuilder.security.sqla.models import User

from superset import db, security_manager
from superset.key_value.models import KeyValueEntry
from superset.models.core import Database
from superset.models.dashboard import Dashboard
from superset.models.slice import Slice
Expand Down Expand Up @@ -199,3 +200,8 @@ def create_dashboard_report(dashboard, extra, **kwargs):

if error:
raise error


def reset_key_values() -> None:
db.session.query(KeyValueEntry).delete()
db.session.commit()

0 comments on commit a86e642

Please sign in to comment.