# Copyright 2025 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import datetime
import time
from unittest.mock import MagicMock

from bigframes.session.bigquery_session import RecurringTaskDaemon


def test_recurring_task_daemon_calls():
    mock_task = MagicMock()
    daemon = RecurringTaskDaemon(
        task=mock_task, frequency=datetime.timedelta(seconds=0.1)
    )
    daemon.start()
    time.sleep(1.0)
    daemon.stop()
    time.sleep(0.5)
    # be lenient, but number of calls should be in this ballpark regardless of scheduling hiccups
    assert mock_task.call_count > 6
    assert mock_task.call_count < 12


def test_recurring_task_daemon_never_started():
    mock_task = MagicMock()
    _ = RecurringTaskDaemon(
        task=mock_task, frequency=datetime.timedelta(seconds=0.0001)
    )
    time.sleep(0.1)
    assert mock_task.call_count == 0
