from unittest.mock import MagicMock

import time_machine

from freqtrade.util import MeasureTime


def test_measure_time():
    callback = MagicMock()
    with time_machine.travel("2021-09-01 05:00:00 +00:00", tick=False) as t:
        measure = MeasureTime(callback, 5, ttl=60)
        with measure:
            pass

        assert callback.call_count == 0

        with measure:
            t.shift(10)

        assert callback.call_count == 1
        callback.reset_mock()
        with measure:
            t.shift(10)
        assert callback.call_count == 0

        callback.reset_mock()
        # Shift past the ttl
        t.shift(45)

        with measure:
            t.shift(10)
        assert callback.call_count == 1