def test_run_reports_handles_error(): reports = [ ReportConfig("nonexistent", None, ["*****@*****.**"], "subject1", 600, "a.ssignee"), ReportConfig("diagnostic", {}, ["*****@*****.**"], "subject2", 600, "a.ssignee") ] config = Config() wrapper = OrderlyWebClientWrapper(config) success = {} error = {} def success_callback(report, version): success[report.name] = version def error_callback(report, message): error[report.name] = message running_reports_repository = RunningReportsRepository() versions = run_reports(wrapper, "testGroup", "testDisease", "testTouchstone", config, reports, success_callback, error_callback, running_reports_repository) keys = list(versions.keys()) assert len(keys) == 1 assert versions[keys[0]]["published"] is True assert success["diagnostic"] == keys[0] assert "Failure for key" in error["nonexistent"] assert len(success) == 1 assert len(error) == 1
def test_tags_not_created_if_exists(): report = ReportConfig("TEST", {}, ["*****@*****.**"], "Hi", 100, "a.ssignee") mock_config: Config = MockConfig() mock_client = Mock(spec=YTClient("", "")) mock_client.create_issue = Mock(return_value="ISSUE") mock_client.get_issues = Mock(return_value=[]) mock_client.get_tags = Mock(return_value=fake_tags) create_ticket("g1", "d1", "t1", "s1", report, "1234", None, mock_client, mock_config) mock_client.create_tag.assert_has_calls([])
def test_create_ticket_logs_errors(logging): report = ReportConfig("TEST", {}, ["*****@*****.**"], "Hi", 100, "a.ssignee") mock_config: Config = MockConfig() mock_client = Mock(spec=YTClient("", "")) mock_client.get_issues = Mock(return_value=[]) mock_client.get_tags = Mock(return_value=fake_tags) test_ex = Exception("TEST EX") mock_client.create_issue = Mock(side_effect=test_ex) create_ticket("g1", "d1", "t1", "s1", report, "1234", None, mock_client, mock_config) logging.exception.assert_has_calls([call(test_ex)])
def test_update_ticket(): report = ReportConfig("TEST", {}, ["*****@*****.**"], "Hi", 100, "a.ssignee") mock_config: Config = MockConfig() mock_client = Mock(spec=YTClient("", "")) mock_client.get_issues = Mock(return_value=["ISSUE"]) mock_client.get_tags = Mock(return_value=fake_tags) create_ticket("g1", "d1", "t1", "s1", report, "1234", None, mock_client, mock_config) expected_command = call( "ISSUE", "Check & share diag report with g1 (d1) t1", "Report run triggered by upload to scenario: s1. " "http://orderly-web/report/TEST/1234/") mock_client.update_issue.assert_has_calls([expected_command])
def test_additional_recipients_not_used(send_email): name = "r1" report = ReportConfig(name, {}, ["*****@*****.**"], "Hi", 1000, "a.ssignee") fake_emailer = {} mock_config = MockConfig(use_additional_recipients=False) send_diagnostic_report_email(fake_emailer, report, "1234-abcd", "groupId", "diseaseId", "touchstoneId", "2020-11-04T12:22:53", "no_vaccination", mock_config, "*****@*****.**") url = "http://orderly-web/report/{}/1234-abcd/".format(name) send_email.assert_has_calls([ call(fake_emailer, report, "diagnostic_report", get_test_template_values(url), mock_config, list()) ])
def test_url_encodes_url_in_email(send_email): name = "'A silly, report" encoded = "%27A%20silly%2C%20report" report = ReportConfig(name, {}, ["*****@*****.**"], "Hi", 100, "a.ssignee") fake_emailer = {} mock_config = MockConfig() send_diagnostic_report_email(fake_emailer, report, "1234-abcd", "groupId", "diseaseId", "touchstoneId", "2020-11-04T12:22:53", "no_vaccination", mock_config) url = "http://orderly-web/report/{}/1234-abcd/".format(encoded, encoded) send_email.assert_has_calls([ call(fake_emailer, report, "diagnostic_report", get_test_template_values(url), mock_config, list()) ])
def test_create_ticket_with_version(): report = ReportConfig("TEST", {}, ["*****@*****.**"], "Hi", 100, "a.ssignee") mock_config: Config = MockConfig() mock_client = Mock(spec=YTClient("", "")) mock_client.create_issue = Mock(return_value="ISSUE") mock_client.get_issues = Mock(return_value=[]) mock_client.get_tags = Mock(return_value=fake_tags) create_ticket("g1", "d1", "t1", "s1", report, "1234", None, mock_client, mock_config) expected_create = call( Project(id="78-0"), "Check & share diag report with g1 (d1) t1", "Report run triggered by upload to scenario: s1. " "http://orderly-web/report/TEST/1234/") mock_client.create_issue.assert_has_calls([expected_create]) expected_command_query = \ "for a.ssignee implementer a.ssignee tag g1 tag d1 tag t1 tag TEST" expected_command = call( Command(issues=["ISSUE"], query=expected_command_query)) mock_client.run_command.assert_has_calls([expected_command])
from src.task_run_diagnostic_reports import send_diagnostic_report_email from src.config import ReportConfig from unittest.mock import patch, call from test.unit.test_run_reports import MockConfig reports = [ ReportConfig("r1", None, ["*****@*****.**"], "Subj: r1", 1000, "a.ssignee"), ReportConfig("r2", {"p1": "v1"}, ["*****@*****.**"], "Subj: r2", 2000, "a.ssignee") ] def get_test_template_values(url): return { "report_version_url": url, "disease": "diseaseId", "group": "groupId", "touchstone": "touchstoneId", "scenario": "no_vaccination", "utc_time": "Wed 04 Nov 2020 12:22:53 UTC", "eastern_time": "Wed 04 Nov 2020 07:22:53 ET" } @patch("src.task_run_diagnostic_reports.send_email") def test_url_encodes_url_in_email(send_email): name = "'A silly, report" encoded = "%27A%20silly%2C%20report" report = ReportConfig(name, {}, ["*****@*****.**"], "Hi", 100, "a.ssignee") fake_emailer = {}
from src.utils.run_reports import run_reports from src.config import ReportConfig from orderlyweb_api import ReportStatusResult from unittest.mock import patch, call from src.orderlyweb_client_wrapper import OrderlyWebClientWrapper from test import ExceptionMatching from test.unit.test_run_reports import MockConfig, MockRunningReportRepository reports = [ReportConfig("r1", None, ["*****@*****.**"], "Subj: r1", 1000, "a.ssignee")] report_response = ReportStatusResult({"status": "success", "version": "r1-version", "output": None}) group = "test_group" disease = "test_disease" touchstone = "2021test-1" class MockOrderlyWebAPIWithExpiredToken: def run_report(self, name, params, timeout): raise Exception("Token expired") def report_status(self, key): raise Exception("Token expired") def publish_report(self, name, version): raise Exception("Token expired")