223 lines
8.1 KiB
Python
223 lines
8.1 KiB
Python
# Licensed to the Apache Software Foundation (ASF) under one
|
|
# or more contributor license agreements. See the NOTICE file
|
|
# distributed with this work for additional information
|
|
# regarding copyright ownership. The ASF licenses this file
|
|
# to you under the Apache License, Version 2.0 (the
|
|
# "License"); you may not use this file except in compliance
|
|
# with the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing,
|
|
# software distributed under the License is distributed on an
|
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
# KIND, either express or implied. See the License for the
|
|
# specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
from pytest_mock import MockerFixture
|
|
|
|
from superset.commands.report.execute import BaseReportState
|
|
from superset.reports.models import (
|
|
ReportRecipientType,
|
|
ReportSchedule,
|
|
ReportSourceFormat,
|
|
)
|
|
from superset.utils.core import HeaderDataType
|
|
|
|
|
|
def test_log_data_with_chart(mocker: MockerFixture) -> None:
|
|
mock_report_schedule: ReportSchedule = mocker.Mock(spec=ReportSchedule)
|
|
mock_report_schedule.chart = True
|
|
mock_report_schedule.chart_id = 123
|
|
mock_report_schedule.dashboard_id = None
|
|
mock_report_schedule.type = "report_type"
|
|
mock_report_schedule.report_format = "report_format"
|
|
mock_report_schedule.owners = [1, 2]
|
|
mock_report_schedule.recipients = []
|
|
|
|
class_instance: BaseReportState = BaseReportState(
|
|
mock_report_schedule, "January 1, 2021", "execution_id_example"
|
|
)
|
|
class_instance._report_schedule = mock_report_schedule
|
|
|
|
result: HeaderDataType = class_instance._get_log_data()
|
|
|
|
expected_result: HeaderDataType = {
|
|
"notification_type": "report_type",
|
|
"notification_source": ReportSourceFormat.CHART,
|
|
"notification_format": "report_format",
|
|
"chart_id": 123,
|
|
"dashboard_id": None,
|
|
"owners": [1, 2],
|
|
"slack_channels": None,
|
|
}
|
|
|
|
assert result == expected_result
|
|
|
|
|
|
def test_log_data_with_dashboard(mocker: MockerFixture) -> None:
|
|
mock_report_schedule: ReportSchedule = mocker.Mock(spec=ReportSchedule)
|
|
mock_report_schedule.chart = False
|
|
mock_report_schedule.chart_id = None
|
|
mock_report_schedule.dashboard_id = 123
|
|
mock_report_schedule.type = "report_type"
|
|
mock_report_schedule.report_format = "report_format"
|
|
mock_report_schedule.owners = [1, 2]
|
|
mock_report_schedule.recipients = []
|
|
|
|
class_instance: BaseReportState = BaseReportState(
|
|
mock_report_schedule, "January 1, 2021", "execution_id_example"
|
|
)
|
|
class_instance._report_schedule = mock_report_schedule
|
|
|
|
result: HeaderDataType = class_instance._get_log_data()
|
|
|
|
expected_result: HeaderDataType = {
|
|
"notification_type": "report_type",
|
|
"notification_source": ReportSourceFormat.DASHBOARD,
|
|
"notification_format": "report_format",
|
|
"chart_id": None,
|
|
"dashboard_id": 123,
|
|
"owners": [1, 2],
|
|
"slack_channels": None,
|
|
}
|
|
|
|
assert result == expected_result
|
|
|
|
|
|
def test_log_data_with_email_recipients(mocker: MockerFixture) -> None:
|
|
mock_report_schedule: ReportSchedule = mocker.Mock(spec=ReportSchedule)
|
|
mock_report_schedule.chart = False
|
|
mock_report_schedule.chart_id = None
|
|
mock_report_schedule.dashboard_id = 123
|
|
mock_report_schedule.type = "report_type"
|
|
mock_report_schedule.report_format = "report_format"
|
|
mock_report_schedule.owners = [1, 2]
|
|
mock_report_schedule.recipients = []
|
|
mock_report_schedule.recipients = [
|
|
mocker.Mock(type=ReportRecipientType.EMAIL, recipient_config_json="email_1"),
|
|
mocker.Mock(type=ReportRecipientType.EMAIL, recipient_config_json="email_2"),
|
|
]
|
|
|
|
class_instance: BaseReportState = BaseReportState(
|
|
mock_report_schedule, "January 1, 2021", "execution_id_example"
|
|
)
|
|
class_instance._report_schedule = mock_report_schedule
|
|
|
|
result: HeaderDataType = class_instance._get_log_data()
|
|
|
|
expected_result: HeaderDataType = {
|
|
"notification_type": "report_type",
|
|
"notification_source": ReportSourceFormat.DASHBOARD,
|
|
"notification_format": "report_format",
|
|
"chart_id": None,
|
|
"dashboard_id": 123,
|
|
"owners": [1, 2],
|
|
"slack_channels": [],
|
|
}
|
|
|
|
assert result == expected_result
|
|
|
|
|
|
def test_log_data_with_slack_recipients(mocker: MockerFixture) -> None:
|
|
mock_report_schedule: ReportSchedule = mocker.Mock(spec=ReportSchedule)
|
|
mock_report_schedule.chart = False
|
|
mock_report_schedule.chart_id = None
|
|
mock_report_schedule.dashboard_id = 123
|
|
mock_report_schedule.type = "report_type"
|
|
mock_report_schedule.report_format = "report_format"
|
|
mock_report_schedule.owners = [1, 2]
|
|
mock_report_schedule.recipients = []
|
|
mock_report_schedule.recipients = [
|
|
mocker.Mock(type=ReportRecipientType.SLACK, recipient_config_json="channel_1"),
|
|
mocker.Mock(type=ReportRecipientType.SLACK, recipient_config_json="channel_2"),
|
|
]
|
|
|
|
class_instance: BaseReportState = BaseReportState(
|
|
mock_report_schedule, "January 1, 2021", "execution_id_example"
|
|
)
|
|
class_instance._report_schedule = mock_report_schedule
|
|
|
|
result: HeaderDataType = class_instance._get_log_data()
|
|
|
|
expected_result: HeaderDataType = {
|
|
"notification_type": "report_type",
|
|
"notification_source": ReportSourceFormat.DASHBOARD,
|
|
"notification_format": "report_format",
|
|
"chart_id": None,
|
|
"dashboard_id": 123,
|
|
"owners": [1, 2],
|
|
"slack_channels": ["channel_1", "channel_2"],
|
|
}
|
|
|
|
assert result == expected_result
|
|
|
|
|
|
def test_log_data_no_owners(mocker: MockerFixture) -> None:
|
|
mock_report_schedule: ReportSchedule = mocker.Mock(spec=ReportSchedule)
|
|
mock_report_schedule.chart = False
|
|
mock_report_schedule.chart_id = None
|
|
mock_report_schedule.dashboard_id = 123
|
|
mock_report_schedule.type = "report_type"
|
|
mock_report_schedule.report_format = "report_format"
|
|
mock_report_schedule.owners = []
|
|
mock_report_schedule.recipients = [
|
|
mocker.Mock(type=ReportRecipientType.SLACK, recipient_config_json="channel_1"),
|
|
mocker.Mock(type=ReportRecipientType.SLACK, recipient_config_json="channel_2"),
|
|
]
|
|
|
|
class_instance: BaseReportState = BaseReportState(
|
|
mock_report_schedule, "January 1, 2021", "execution_id_example"
|
|
)
|
|
class_instance._report_schedule = mock_report_schedule
|
|
|
|
result: HeaderDataType = class_instance._get_log_data()
|
|
|
|
expected_result: HeaderDataType = {
|
|
"notification_type": "report_type",
|
|
"notification_source": ReportSourceFormat.DASHBOARD,
|
|
"notification_format": "report_format",
|
|
"chart_id": None,
|
|
"dashboard_id": 123,
|
|
"owners": [],
|
|
"slack_channels": ["channel_1", "channel_2"],
|
|
}
|
|
|
|
assert result == expected_result
|
|
|
|
|
|
def test_log_data_with_missing_values(mocker: MockerFixture) -> None:
|
|
mock_report_schedule: ReportSchedule = mocker.Mock(spec=ReportSchedule)
|
|
mock_report_schedule.chart = None
|
|
mock_report_schedule.chart_id = None
|
|
mock_report_schedule.dashboard_id = None
|
|
mock_report_schedule.type = "report_type"
|
|
mock_report_schedule.report_format = "report_format"
|
|
mock_report_schedule.owners = [1, 2]
|
|
mock_report_schedule.recipients = [
|
|
mocker.Mock(type=ReportRecipientType.SLACK, recipient_config_json="channel_1"),
|
|
mocker.Mock(
|
|
type=ReportRecipientType.SLACKV2, recipient_config_json="channel_2"
|
|
),
|
|
]
|
|
|
|
class_instance: BaseReportState = BaseReportState(
|
|
mock_report_schedule, "January 1, 2021", "execution_id_example"
|
|
)
|
|
class_instance._report_schedule = mock_report_schedule
|
|
|
|
result: HeaderDataType = class_instance._get_log_data()
|
|
|
|
expected_result: HeaderDataType = {
|
|
"notification_type": "report_type",
|
|
"notification_source": ReportSourceFormat.DASHBOARD,
|
|
"notification_format": "report_format",
|
|
"chart_id": None,
|
|
"dashboard_id": None,
|
|
"owners": [1, 2],
|
|
"slack_channels": ["channel_1", "channel_2"],
|
|
}
|
|
|
|
assert result == expected_result
|