from datetime import datetime from unittest.mock import patch import pytest from minitor.main import Alert from minitor.main import Monitor from tests.util import assert_called_once_with class TestAlert(object): @pytest.fixture def monitor(self): return Monitor( { "name": "Dummy Monitor", "command": ["echo", "foo"], } ) @pytest.fixture def echo_alert(self): return Alert( "log", { "command": [ "echo", ( "{monitor_name} has failed {failure_count} time(s)!\n" "We have alerted {alert_count} time(s)\n" "Last success was {last_success}\n" "Last output was: {last_output}" ), ] }, ) @pytest.mark.parametrize( "last_success,expected_success", [(None, "Never"), (datetime(2018, 4, 10), "2018-04-10T00:00:00")], ) def test_simple_alert(self, monitor, echo_alert, last_success, expected_success): monitor.alert_count = 1 monitor.last_output = "beep boop" monitor.last_success = last_success monitor.total_failure_count = 1 with patch.object(echo_alert._logger, "error") as mock_error: echo_alert.alert("Exception message", monitor) assert_called_once_with( mock_error, "Dummy Monitor has failed 1 time(s)!\n" "We have alerted 1 time(s)\n" "Last success was " + expected_success + "\n" "Last output was: beep boop", )