import os
import pytest
import tempfile
import threading
import time

tmp_files = []
tmp_files_ready = threading.Event()
test_timeout = 10
expected_cron_file_content = 'The cronjob ran successfully!'


@pytest.fixture(scope='module', autouse=True)
def tmp_file(*_):
    tmp_file = tempfile.NamedTemporaryFile(prefix='platypush-test-cron-',
                                           suffix='.txt', delete=False)
    tmp_files.append(tmp_file.name)
    tmp_files_ready.set()
    yield tmp_file.name

    for f in tmp_files:
        if os.path.isfile(f):
            os.unlink(f)


def test_cron_execution(tmp_file):
    """
    Test that the cronjob in ``../etc/scripts/test_cron.py`` runs successfully.
    """
    actual_cron_file_content = None
    test_start = time.time()

    while actual_cron_file_content != expected_cron_file_content and \
            time.time() - test_start < test_timeout:
        with open(tmp_file, 'r') as f:
            actual_cron_file_content = f.read()
        time.sleep(0.5)

    assert actual_cron_file_content == expected_cron_file_content, \
        'cron_test failed to run within {} seconds'.format(test_timeout)


if __name__ == '__main__':
    pytest.main()


# vim:sw=4:ts=4:et: