vorta/tests/test_schedule.py

79 lines
2.3 KiB
Python

from datetime import datetime as dt
from datetime import timedelta
from unittest.mock import MagicMock
import pytest
from PyQt5 import QtCore
import vorta.scheduler
from vorta.application import VortaApp
from vorta.store.models import BackupProfileModel, EventLogModel
PROFILE_NAME = 'Default'
@pytest.fixture
def clockmock(monkeypatch):
datetime_mock = MagicMock(wraps=dt)
monkeypatch.setattr(vorta.scheduler, "dt", datetime_mock)
return datetime_mock
def test_schedule_tab(qapp: VortaApp, qtbot, clockmock):
main = qapp.main_window
tab = main.scheduleTab
# setup
time_now = dt(2020, 5, 6, 4, 30)
clockmock.now.return_value = time_now
# Work around
# because already 'deleted' scheduletabs are still connected to the signal
qapp.scheduler.schedule_changed.connect(lambda *args: tab.draw_next_scheduled_backup())
# Test
qtbot.mouseClick(tab.scheduleOffRadio, QtCore.Qt.LeftButton)
assert tab.nextBackupDateTimeLabel.text() == 'None scheduled'
tab.scheduleIntervalCount.setValue(5)
qtbot.mouseClick(tab.scheduleIntervalRadio, QtCore.Qt.LeftButton)
assert "None" not in tab.nextBackupDateTimeLabel.text()
tab.scheduleFixedTime.setTime(QtCore.QTime(23, 59))
# Clicking currently broken for this button on github.com only
# qtbot.mouseClick(tab.scheduleFixedRadio, QtCore.Qt.LeftButton)
# Workaround for github
tab.scheduleFixedRadio.setChecked(True)
tab.scheduleFixedRadio.clicked.emit()
assert tab.nextBackupDateTimeLabel.text() == 'Run a manual backup first'
next_backup = time_now.replace(hour=23, minute=59)
last_time = time_now - timedelta(days=2)
# setup model
profile = BackupProfileModel.get(name=PROFILE_NAME)
profile.schedule_make_up_missed = False
profile.save()
event = EventLogModel(
subcommand='create',
profile=profile.id,
returncode=0,
category='scheduled',
start_time=last_time,
end_time=last_time,
)
event.save()
qapp.scheduler.set_timer_for_profile(profile.id)
tab.draw_next_scheduled_backup()
assert tab.nextBackupDateTimeLabel.text() not in [
"Run a manual backup first",
"None scheduled",
]
assert qapp.scheduler.next_job_for_profile(profile.id).time == next_backup
qapp.scheduler.remove_job(profile.id)