You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by be...@apache.org on 2021/12/22 16:39:55 UTC
[superset] 04/04: Add tests
This is an automated email from the ASF dual-hosted git repository.
beto pushed a commit to branch ch24621b
in repository https://gitbox.apache.org/repos/asf/superset.git
commit 94392a17ab7093e69f07b61d6c73942168f4c86a
Author: Beto Dealmeida <ro...@dealmeida.net>
AuthorDate: Sun Dec 12 10:16:33 2021 -0800
Add tests
---
superset/db_engine_specs/postgres.py | 12 ++++-
tests/integration_tests/reports/commands_tests.py | 58 +++++++++++++++++++++++
tests/integration_tests/reports/utils.py | 2 +
3 files changed, 70 insertions(+), 2 deletions(-)
diff --git a/superset/db_engine_specs/postgres.py b/superset/db_engine_specs/postgres.py
index c2951c3..73da187 100644
--- a/superset/db_engine_specs/postgres.py
+++ b/superset/db_engine_specs/postgres.py
@@ -195,8 +195,16 @@ class PostgresEngineSpec(PostgresBaseEngineSpec, BasicParametersMixin):
lambda match: ARRAY(int(match[2])) if match[2] else String(),
utils.GenericDataType.STRING,
),
- (re.compile(r"^json.*", re.IGNORECASE), JSON(), utils.GenericDataType.STRING,),
- (re.compile(r"^enum.*", re.IGNORECASE), ENUM(), utils.GenericDataType.STRING,),
+ (
+ re.compile(r"^json.*", re.IGNORECASE),
+ JSON(),
+ utils.GenericDataType.STRING,
+ ),
+ (
+ re.compile(r"^enum.*", re.IGNORECASE),
+ ENUM(),
+ utils.GenericDataType.STRING,
+ ),
)
@classmethod
diff --git a/tests/integration_tests/reports/commands_tests.py b/tests/integration_tests/reports/commands_tests.py
index 54629e3..cd730cd 100644
--- a/tests/integration_tests/reports/commands_tests.py
+++ b/tests/integration_tests/reports/commands_tests.py
@@ -135,6 +135,7 @@ def create_report_notification(
grace_period: Optional[int] = None,
report_format: Optional[ReportDataFormat] = None,
name: Optional[str] = None,
+ force_screenshot: bool = False,
) -> ReportSchedule:
report_type = report_type or ReportScheduleType.REPORT
target = email_target or slack_channel
@@ -174,6 +175,7 @@ def create_report_notification(
validator_config_json=validator_config_json,
grace_period=grace_period,
report_format=report_format or ReportDataFormat.VISUALIZATION,
+ force_screenshot=force_screenshot,
)
return report_schedule
@@ -219,6 +221,18 @@ def create_report_email_chart():
@pytest.fixture()
+def create_report_email_chart_force_screenshot():
+ with app.app_context():
+ chart = db.session.query(Slice).first()
+ report_schedule = create_report_notification(
+ email_target="target@email.com", chart=chart, force_screenshot=True
+ )
+ yield report_schedule
+
+ cleanup_report_schedule(report_schedule)
+
+
+@pytest.fixture()
def create_report_email_chart_with_csv():
with app.app_context():
chart = db.session.query(Slice).first()
@@ -482,6 +496,7 @@ def create_alert_email_chart(request):
validator_config_json=param_config[request.param][
"validator_config_json"
],
+ force_screenshot=True,
)
yield report_schedule
@@ -683,6 +698,49 @@ def test_email_chart_report_schedule(
@pytest.mark.usefixtures(
+ "load_birth_names_dashboard_with_slices",
+ "create_report_email_chart_force_screenshot",
+)
+@patch("superset.reports.notifications.email.send_email_smtp")
+@patch("superset.utils.screenshots.ChartScreenshot.get_screenshot")
+def test_email_chart_report_schedule_force_screenshot(
+ screenshot_mock, email_mock, create_report_email_chart_force_screenshot,
+):
+ """
+ ExecuteReport Command: Test chart email report schedule with screenshot
+
+ In this test ``force_screenshot`` is true, and the screenshot URL should
+ reflect that.
+ """
+ # setup screenshot mock
+ screenshot_mock.return_value = SCREENSHOT_FILE
+
+ with freeze_time("2020-01-01T00:00:00Z"):
+ AsyncExecuteReportScheduleCommand(
+ TEST_ID, create_report_email_chart_force_screenshot.id, datetime.utcnow()
+ ).run()
+
+ notification_targets = get_target_from_report_schedule(
+ create_report_email_chart_force_screenshot
+ )
+ # assert that the link sent is correct
+ assert (
+ '<a href="http://0.0.0.0:8080/superset/explore/?'
+ "form_data=%7B%22slice_id%22%3A+"
+ f"{create_report_email_chart_force_screenshot.chart.id}%7D&"
+ 'standalone=true&force=true">Explore in Superset</a>'
+ in email_mock.call_args[0][2]
+ )
+ # Assert the email smtp address
+ assert email_mock.call_args[0][0] == notification_targets[0]
+ # Assert the email inline screenshot
+ smtp_images = email_mock.call_args[1]["images"]
+ assert smtp_images[list(smtp_images.keys())[0]] == SCREENSHOT_FILE
+ # Assert logs are correct
+ assert_log(ReportState.SUCCESS)
+
+
+@pytest.mark.usefixtures(
"load_birth_names_dashboard_with_slices", "create_alert_email_chart"
)
@patch("superset.reports.notifications.email.send_email_smtp")
diff --git a/tests/integration_tests/reports/utils.py b/tests/integration_tests/reports/utils.py
index 6cf55a1..2adf9cc 100644
--- a/tests/integration_tests/reports/utils.py
+++ b/tests/integration_tests/reports/utils.py
@@ -51,6 +51,7 @@ def insert_report_schedule(
recipients: Optional[List[ReportRecipients]] = None,
report_format: Optional[ReportDataFormat] = None,
logs: Optional[List[ReportExecutionLog]] = None,
+ force_screenshot: bool = False,
) -> ReportSchedule:
owners = owners or []
recipients = recipients or []
@@ -75,6 +76,7 @@ def insert_report_schedule(
logs=logs,
last_state=last_state,
report_format=report_format,
+ force_screenshot=force_screenshot,
)
db.session.add(report_schedule)
db.session.commit()