diff --git a/orchestrator/utils/email_builder.py b/orchestrator/utils/email_builder.py index 8dc59e8..0aa2881 100644 --- a/orchestrator/utils/email_builder.py +++ b/orchestrator/utils/email_builder.py @@ -12,11 +12,6 @@ class EmailBuilder: self.report_template_file = './orchestrator/utils/templates/email_template.html' self.general_template_file = './orchestrator/utils/templates/general_template.html' - self.tag_template_file = './orchestrator/utils/templates/opc_tag_report_template.html' - self.opc_template_file = './orchestrator/utils/templates/opc_connection_report_template.html' - - self.partition_manager_template_file = './orchestrator/utils/templates/partition_manager_report_template.html' - with open(self.report_template_file, 'r') as file: self.report_template = file.read() with open(self.general_template_file, 'r') as file: @@ -28,9 +23,8 @@ class EmailBuilder: return template.render(parameters) - def parameters(self, report_data: dict, general_events: dict, mail_type: str) -> dict: + def parameters(self, general_events: dict, mail_type: str) -> dict: return { - 'project_name': report_data[0]['project'], 'mail_type': mail_type, 'error_events': self.replace_parameters(self.general_template, general_events['ERROR']) if general_events['ERROR']['models'] else '', @@ -66,10 +60,10 @@ class EmailBuilder: general_events[level]['models'][model_name]['events'].append( report) - print(general_events) for _type, content in general_events.items(): content['models'] = list(content['models'].values()) - return self.replace_parameters(self.report_template, self.parameters( - report_data, general_events, mail_type - )) + return self.replace_parameters( + self.report_template, self.parameters( + general_events, mail_type + )) diff --git a/tests/orchestrator/utils/test_email_builder.py b/tests/orchestrator/utils/test_email_builder.py new file mode 100644 index 0000000..d2145be --- /dev/null +++ b/tests/orchestrator/utils/test_email_builder.py @@ -0,0 +1,145 @@ +import json +from unittest.mock import MagicMock, patch +from pytest import fixture + +from orchestrator.utils.email_builder import EmailBuilder + + +@fixture +@patch('orchestrator.utils.email_builder.open') +def report_builder(open): + return EmailBuilder(MagicMock()) + + +@patch('orchestrator.utils.email_builder.Template') +def test_replace_parameters(template, report_builder): + output = report_builder.replace_parameters('template', {'key': 'value'}) + + assert output == template.return_value.render.return_value + + template.assert_called_once_with('template') + template.return_value.render.assert_called_once_with({'key': 'value'}) + + +def test_parameters(report_builder): + report_builder.replace_parameters = MagicMock() + general_events = { + 'ERROR': { + 'models': [ + {'model_name': 'model_name', 'events': [ + {'notification_id': 'ID_1', 'level': 'ERROR', 'project': 'project'}]}, + ] + }, + 'WARNING': { + 'models': [ + {'model_name': 'model_name', 'events': [ + {'notification_id': 'ID_2', 'level': 'WARNING', 'project': 'project'}]}, + ] + }, + 'INFO': { + 'models': [ + {'model_name': 'model_name', 'events': [ + {'notification_id': 'ID_3', 'level': 'INFO', 'project': 'project'}]}, + ] + } + } + + output = report_builder.parameters(general_events, 'model_name') + + assert output == { + 'mail_type': 'model_name', + 'error_events': report_builder.replace_parameters.return_value, + 'warning_events': report_builder.replace_parameters.return_value, + 'info_events': report_builder.replace_parameters.return_value, + } + + report_builder.replace_parameters.assert_any_call( + report_builder.general_template, + {'models': [ + {'model_name': 'model_name', 'events': [ + {'notification_id': 'ID_1', 'level': 'ERROR', 'project': 'project'}]}, + ]} + ) + report_builder.replace_parameters.assert_any_call( + report_builder.general_template, + {'models': [ + {'model_name': 'model_name', 'events': [ + {'notification_id': 'ID_2', 'level': 'WARNING', 'project': 'project'}]}, + ]} + ) + report_builder.replace_parameters.assert_any_call( + report_builder.general_template, + {'models': [ + {'model_name': 'model_name', 'events': [ + {'notification_id': 'ID_3', 'level': 'INFO', 'project': 'project'}]}, + ]} + ) + + +def test_build_email(report_builder): + report_builder.parameters = MagicMock() + report_builder.replace_parameters = MagicMock() + + report_data = [ + {'notification_id': 'ID_1', 'level': 'ERROR', + 'project': 'project', 'model_name': 'model_name'}, + {'notification_id': 'ID_2', 'level': 'WARNING', + 'project': 'project', 'model_name': 'model_name'}, + {'notification_id': 'ID_2', 'level': 'INFO', + 'project': 'project', 'model_name': 'model_name'}, + {'notification_id': 'ID_3', 'level': 'ERROR', + 'project': 'project', 'model_name': 'model_name'} + ] + + html = report_builder.build_email(report_data, 'type_1') + + report_builder.replace_parameters.assert_called_once_with( + report_builder.report_template, + report_builder.parameters.return_value + ) + + assert html == report_builder.replace_parameters.return_value + + report_builder.parameters.assert_called_once_with( + { + 'ERROR': { + 'section_name': 'Errors detected:', + 'models': [ + { + 'model_name': 'model_name', + 'events': [ + {'notification_id': 'ID_1', 'level': 'ERROR', + 'project': 'project', 'model_name': 'model_name'}, + {'notification_id': 'ID_3', 'level': 'ERROR', + 'project': 'project', 'model_name': 'model_name'} + ] + } + ] + }, + 'WARNING': { + 'section_name': 'Warnings detected:', + 'models': [ + { + 'model_name': 'model_name', + 'events': [ + {'notification_id': 'ID_2', 'level': 'WARNING', + 'project': 'project', 'model_name': 'model_name'} + ] + } + ] + }, + 'INFO': { + 'section_name': 'Infos detected:', + 'models': [ + { + 'model_name': 'model_name', + 'events': [ + {'notification_id': 'ID_2', 'level': 'INFO', + 'project': 'project', 'model_name': 'model_name'} + ] + } + ] + } + }, + 'type_1' + )