minitor/tests/alert_test.py

63 lines
1.7 KiB
Python

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'
)