mirror of
https://github.com/apache/superset.git
synced 2026-04-19 16:14:52 +00:00
feat: add header_data into emails (#20903)
* test sparkpost * added logging info * header function implementation * added test * daniel revisions * daniel revision * elizabeth review
This commit is contained in:
@@ -58,6 +58,37 @@ class TestEmailSmtp(SupersetTestCase):
|
||||
mimeapp = MIMEApplication("attachment")
|
||||
assert msg.get_payload()[-1].get_payload() == mimeapp.get_payload()
|
||||
|
||||
@mock.patch("superset.utils.core.send_mime_email")
|
||||
def test_send_smtp_with_email_mutator(self, mock_send_mime):
|
||||
attachment = tempfile.NamedTemporaryFile()
|
||||
attachment.write(b"attachment")
|
||||
attachment.seek(0)
|
||||
|
||||
# putting this into a variable so that we can reset after the test
|
||||
base_email_mutator = app.config["EMAIL_HEADER_MUTATOR"]
|
||||
|
||||
def mutator(msg, **kwargs):
|
||||
msg["foo"] = "bar"
|
||||
return msg
|
||||
|
||||
app.config["EMAIL_HEADER_MUTATOR"] = mutator
|
||||
utils.send_email_smtp(
|
||||
"to", "subject", "content", app.config, files=[attachment.name]
|
||||
)
|
||||
assert mock_send_mime.called
|
||||
call_args = mock_send_mime.call_args[0]
|
||||
logger.debug(call_args)
|
||||
assert call_args[0] == app.config["SMTP_MAIL_FROM"]
|
||||
assert call_args[1] == ["to"]
|
||||
msg = call_args[2]
|
||||
assert msg["Subject"] == "subject"
|
||||
assert msg["From"] == app.config["SMTP_MAIL_FROM"]
|
||||
assert msg["foo"] == "bar"
|
||||
assert len(msg.get_payload()) == 2
|
||||
mimeapp = MIMEApplication("attachment")
|
||||
assert msg.get_payload()[-1].get_payload() == mimeapp.get_payload()
|
||||
app.config["EMAIL_HEADER_MUTATOR"] = base_email_mutator
|
||||
|
||||
@mock.patch("superset.utils.core.send_mime_email")
|
||||
def test_send_smtp_data(self, mock_send_mime):
|
||||
utils.send_email_smtp(
|
||||
|
||||
@@ -25,6 +25,7 @@ from superset.dashboards.permalink.commands.create import (
|
||||
)
|
||||
from superset.models.dashboard import Dashboard
|
||||
from superset.reports.commands.execute import AsyncExecuteReportScheduleCommand
|
||||
from superset.reports.models import ReportSourceFormat
|
||||
from tests.integration_tests.fixtures.tabbed_dashboard import tabbed_dashboard
|
||||
from tests.integration_tests.reports.utils import create_dashboard_report
|
||||
|
||||
@@ -66,3 +67,47 @@ def test_report_for_dashboard_with_tabs(
|
||||
assert digest == dashboard.digest
|
||||
assert send_email_smtp_mock.call_count == 1
|
||||
assert len(send_email_smtp_mock.call_args.kwargs["images"]) == 1
|
||||
|
||||
|
||||
@patch("superset.reports.notifications.email.send_email_smtp")
|
||||
@patch(
|
||||
"superset.reports.commands.execute.DashboardScreenshot",
|
||||
)
|
||||
@patch(
|
||||
"superset.dashboards.permalink.commands.create.CreateDashboardPermalinkCommand.run"
|
||||
)
|
||||
def test_report_with_header_data(
|
||||
create_dashboard_permalink_mock: MagicMock,
|
||||
dashboard_screenshot_mock: MagicMock,
|
||||
send_email_smtp_mock: MagicMock,
|
||||
tabbed_dashboard: Dashboard,
|
||||
) -> None:
|
||||
create_dashboard_permalink_mock.return_value = "permalink"
|
||||
dashboard_screenshot_mock.get_screenshot.return_value = b"test-image"
|
||||
current_app.config["ALERT_REPORTS_NOTIFICATION_DRY_RUN"] = False
|
||||
|
||||
with create_dashboard_report(
|
||||
dashboard=tabbed_dashboard,
|
||||
extra={"active_tabs": ["TAB-L1B"]},
|
||||
name="test report tabbed dashboard",
|
||||
) as report_schedule:
|
||||
dashboard: Dashboard = report_schedule.dashboard
|
||||
AsyncExecuteReportScheduleCommand(
|
||||
str(uuid4()), report_schedule.id, datetime.utcnow()
|
||||
).run()
|
||||
dashboard_state = report_schedule.extra.get("dashboard", {})
|
||||
permalink_key = CreateDashboardPermalinkCommand(
|
||||
dashboard.id, dashboard_state
|
||||
).run()
|
||||
|
||||
assert dashboard_screenshot_mock.call_count == 1
|
||||
(url, digest) = dashboard_screenshot_mock.call_args.args
|
||||
assert url.endswith(f"/superset/dashboard/p/{permalink_key}/")
|
||||
assert digest == dashboard.digest
|
||||
assert send_email_smtp_mock.call_count == 1
|
||||
header_data = send_email_smtp_mock.call_args.kwargs["header_data"]
|
||||
assert header_data.get("dashboard_id") == dashboard.id
|
||||
assert header_data.get("notification_format") == report_schedule.report_format
|
||||
assert header_data.get("notification_source") == ReportSourceFormat.DASHBOARD
|
||||
assert header_data.get("notification_type") == report_schedule.type
|
||||
assert len(send_email_smtp_mock.call_args.kwargs["header_data"]) == 7
|
||||
|
||||
@@ -34,6 +34,15 @@ def test_render_description_with_html() -> None:
|
||||
}
|
||||
),
|
||||
description='<p>This is <a href="#">a test</a> alert</p><br />',
|
||||
header_data={
|
||||
"notification_format": "PNG",
|
||||
"notification_type": "Alert",
|
||||
"owners": [1],
|
||||
"notification_source": None,
|
||||
"chart_id": None,
|
||||
"dashboard_id": None,
|
||||
"error_text": None,
|
||||
},
|
||||
)
|
||||
email_body = (
|
||||
EmailNotification(
|
||||
|
||||
Reference in New Issue
Block a user