from unittest.mock import ANY

from app.statsd_decorators import statsd
import app


class AnyStringWith(str):
    def __eq__(self, other):
        return self in other


def test_should_call_statsd(notify_api, mocker):
    mocker.patch('app.statsd_client.incr')
    mocker.patch('app.statsd_client.timing')
    mock_logger = mocker.patch.object(notify_api.logger, 'info')

    @statsd(namespace="test")
    def test_function():
        return True

    assert test_function()
    app.statsd_client.incr.assert_called_once_with("test.test_function")
    app.statsd_client.timing.assert_called_once_with("test.test_function", ANY)
    mock_logger.assert_called_once_with(AnyStringWith("test call test_function took "))
