Skip to content

Commit

Permalink
add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
dpgaspar committed May 26, 2022
1 parent 6d90422 commit ad9257b
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 26 deletions.
2 changes: 1 addition & 1 deletion superset/reports/notifications/email.py
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ def _get_subject(self) -> str:
def _get_to(self) -> str:
return json.loads(self._recipient.recipient_config_json)["target"]

@statsd_gauge("email.send")
@statsd_gauge("reports.email.send")
def send(self) -> None:
subject = self._get_subject()
content = self._get_content()
Expand Down
2 changes: 1 addition & 1 deletion superset/reports/notifications/slack.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ def _get_inline_files(self) -> Sequence[Union[str, IOBase, bytes]]:
return []

@backoff.on_exception(backoff.expo, SlackApiError, factor=10, base=2, max_tries=5)
@statsd_gauge("slack.send")
@statsd_gauge("reports.slack.send")
def send(self) -> None:
files = self._get_inline_files()
title = self._content.name
Expand Down
53 changes: 30 additions & 23 deletions tests/integration_tests/reports/commands_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
from uuid import uuid4

import pytest
from flask import current_app
from flask_sqlalchemy import BaseQuery
from freezegun import freeze_time
from sqlalchemy.sql import func
Expand Down Expand Up @@ -1026,20 +1027,23 @@ def test_email_dashboard_report_schedule(
screenshot_mock.return_value = SCREENSHOT_FILE

with freeze_time("2020-01-01T00:00:00Z"):
AsyncExecuteReportScheduleCommand(
TEST_ID, create_report_email_dashboard.id, datetime.utcnow()
).run()
with patch.object(current_app.config["STATS_LOGGER"], "gauge") as statsd_mock:

notification_targets = get_target_from_report_schedule(
create_report_email_dashboard
)
# 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)
AsyncExecuteReportScheduleCommand(
TEST_ID, create_report_email_dashboard.id, datetime.utcnow()
).run()

notification_targets = get_target_from_report_schedule(
create_report_email_dashboard
)
# 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)
statsd_mock.assert_called_once_with("reports.email.send.ok", 1)


@pytest.mark.usefixtures(
Expand Down Expand Up @@ -1094,19 +1098,22 @@ def test_slack_chart_report_schedule(
screenshot_mock.return_value = SCREENSHOT_FILE

with freeze_time("2020-01-01T00:00:00Z"):
AsyncExecuteReportScheduleCommand(
TEST_ID, create_report_slack_chart.id, datetime.utcnow()
).run()
with patch.object(current_app.config["STATS_LOGGER"], "gauge") as statsd_mock:

notification_targets = get_target_from_report_schedule(
create_report_slack_chart
)
AsyncExecuteReportScheduleCommand(
TEST_ID, create_report_slack_chart.id, datetime.utcnow()
).run()

assert file_upload_mock.call_args[1]["channels"] == notification_targets[0]
assert file_upload_mock.call_args[1]["file"] == SCREENSHOT_FILE
notification_targets = get_target_from_report_schedule(
create_report_slack_chart
)

# Assert logs are correct
assert_log(ReportState.SUCCESS)
assert file_upload_mock.call_args[1]["channels"] == notification_targets[0]
assert file_upload_mock.call_args[1]["file"] == SCREENSHOT_FILE

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


@pytest.mark.usefixtures(
Expand Down
20 changes: 19 additions & 1 deletion tests/integration_tests/utils/decorators_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,10 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
from unittest.mock import call, Mock
from unittest.mock import call, Mock, patch

import pytest
from flask import current_app

from superset.utils import decorators
from tests.integration_tests.base_tests import SupersetTestCase
Expand All @@ -41,3 +44,18 @@ def myfunc(arg1: int, arg2: int, kwarg1: str = "abc", kwarg2: int = 2):
result = myfunc(1, 0, kwarg1="haha", kwarg2=2)
mock.assert_has_calls([call(1, "abc"), call(1, "haha")])
self.assertEqual(result, 3)

def test_statsd_gauge(self):
@decorators.statsd_gauge("custom.prefix")
def my_func(fail: bool, *args, **kwargs):
if fail:
raise ValueError("Error")
return "OK"

with patch.object(current_app.config["STATS_LOGGER"], "gauge") as mock:
my_func(False, 1, 2)
mock.assert_called_once_with("custom.prefix.ok", 1)

with pytest.raises(ValueError):
my_func(True, 1, 2)
mock.assert_called_once_with("custom.prefix.error", 1)

0 comments on commit ad9257b

Please sign in to comment.