Run hooks on the code base.

This adds trailing lines to files,
removes trailing white space in all the other lines and unifies line endings.
Additionally it formats the test code with `black`.
This commit is contained in:
real-yfprojects 2022-08-15 19:02:40 +02:00
parent 63b2eb1089
commit ca497f8815
46 changed files with 375 additions and 338 deletions

1
.gitignore vendored
View File

@ -21,4 +21,3 @@ src/vorta/i18n/ts/vorta.en.ts
src/vorta/i18n/ts/vorta.en_US.ts
flatpak/app/
flatpak/.flatpak-builder/

View File

@ -7,4 +7,3 @@ minimum_perc = 80
source_file = src/vorta/i18n/ts/vorta.en.ts
source_lang = en
type = QT

View File

@ -23,4 +23,3 @@ index 7a18c11..1667db2 100644
return -1;
--
2.17.0.rc2

View File

@ -81,4 +81,3 @@ app = BUNDLE(coll,
'PATH': '/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/homebrew/bin'
}
})

View File

@ -20,8 +20,17 @@ from vorta.store.models import (
)
from vorta.views.main_window import MainWindow
models = [RepoModel, RepoPassword, BackupProfileModel, SourceFileModel,
SettingsModel, ArchiveModel, WifiSettingModel, EventLogModel, SchemaVersion]
models = [
RepoModel,
RepoPassword,
BackupProfileModel,
SourceFileModel,
SettingsModel,
ArchiveModel,
WifiSettingModel,
EventLogModel,
SchemaVersion,
]
def pytest_configure(config):
@ -38,6 +47,7 @@ def qapp(tmpdir_factory):
vorta.store.connection.init_db(mock_db)
from vorta.application import VortaApp
VortaApp.set_borg_details_action = MagicMock() # Can't use pytest-mock in session scope
VortaApp.scheduler = MagicMock()
@ -51,7 +61,12 @@ def qapp(tmpdir_factory):
@pytest.fixture(scope='function', autouse=True)
def init_db(qapp, qtbot, tmpdir_factory):
tmp_db = tmpdir_factory.mktemp('Vorta').join('settings.sqlite')
mock_db = SqliteDatabase(str(tmp_db), pragmas={'journal_mode': 'wal', })
mock_db = SqliteDatabase(
str(tmp_db),
pragmas={
'journal_mode': 'wal',
},
)
vorta.store.connection.init_db(mock_db)
default_profile = BackupProfileModel(name='Default')
@ -72,8 +87,7 @@ def init_db(qapp, qtbot, tmpdir_factory):
test_archive1 = ArchiveModel(snapshot_id='99998', name='test-archive1', time=dt(2000, 1, 1, 0, 0), repo=1)
test_archive1.save()
source_dir = SourceFileModel(dir='/tmp/another', repo=new_repo, dir_size=100, dir_files_count=18,
path_isdir=True)
source_dir = SourceFileModel(dir='/tmp/another', repo=new_repo, dir_size=100, dir_files_count=18, path_isdir=True)
source_dir.save()
qapp.main_window.deleteLater()
@ -110,6 +124,7 @@ def borg_json_output():
stdout = open(f'tests/borg_json_output/{subcommand}_stdout.json')
stderr = open(f'tests/borg_json_output/{subcommand}_stderr.json')
return stdout, stderr
return _read_json

View File

@ -2,10 +2,13 @@ import pytest
from vorta.network_status import darwin
@pytest.mark.parametrize('getpacket_output_name, expected', [
@pytest.mark.parametrize(
'getpacket_output_name, expected',
[
('normal_router', False),
('phone', True),
])
],
)
def test_is_network_metered(getpacket_output_name, expected, monkeypatch):
def mock_getpacket(device):
assert device == 'en0'
@ -80,7 +83,7 @@ router (ip_mult): {192.168.43.242}
domain_name_server (ip_mult): {192.168.43.242}
vendor_specific (opaque):
0000 41 4e 44 52 4f 49 44 5f 4d 45 54 45 52 45 44 ANDROID_METERED
"""
""",
}
NETWORKSETUP_OUTPUT = b"""\

View File

@ -14,10 +14,7 @@ from vorta.network_status.network_manager import (
@pytest.fixture
def mock_adapter():
return MagicMock(
spec_set=NetworkManagerDBusAdapter,
wraps=UncallableNetworkManagerDBusAdapter()
)
return MagicMock(spec_set=NetworkManagerDBusAdapter, wraps=UncallableNetworkManagerDBusAdapter())
@pytest.fixture
@ -29,13 +26,16 @@ def test_is_network_status_available(nm_monitor):
assert nm_monitor.is_network_status_available() is True
@pytest.mark.parametrize('global_metered_status, expected', [
@pytest.mark.parametrize(
'global_metered_status, expected',
[
(NMMetered.UNKNOWN, False),
(NMMetered.YES, True),
(NMMetered.NO, False),
(NMMetered.GUESS_YES, True),
(NMMetered.GUESS_NO, False),
])
],
)
def test_is_network_metered(global_metered_status, expected, nm_monitor):
nm_monitor._nm.get_global_metered_status.return_value = global_metered_status
@ -44,17 +44,22 @@ def test_is_network_metered(global_metered_status, expected, nm_monitor):
assert result == expected
@pytest.mark.parametrize('connection_path, connection_type, type_settings, expected', [
('/org/freedesktop/NetworkManager/ActiveConnection/1',
'802-11-wireless', {'ssid': bytes([84, 69, 83, 84])}, 'TEST'),
('/org/freedesktop/NetworkManager/ActiveConnection/2',
'802-11-ethernet', {}, None),
])
@pytest.mark.parametrize(
'connection_path, connection_type, type_settings, expected',
[
(
'/org/freedesktop/NetworkManager/ActiveConnection/1',
'802-11-wireless',
{'ssid': bytes([84, 69, 83, 84])},
'TEST',
),
('/org/freedesktop/NetworkManager/ActiveConnection/2', '802-11-ethernet', {}, None),
],
)
def test_get_current_wifi(connection_path, connection_type, type_settings, expected, nm_monitor):
nm_monitor._nm.get_primary_connection_path.return_value = connection_path
nm_monitor._nm.get_active_connection_info.return_value = ActiveConnectionInfo(
connection='/org/freedesktop/NetworkManager/Settings/12',
type=connection_type
connection='/org/freedesktop/NetworkManager/Settings/12', type=connection_type
)
nm_monitor._nm.get_settings.side_effect = [{connection_type: type_settings}]
@ -78,10 +83,12 @@ def test_get_known_wifis(nm_monitor):
result = nm_monitor.get_known_wifis()
assert result == [SystemWifiInfo(
assert result == [
SystemWifiInfo(
ssid='TEST',
last_connected=datetime(2020, 8, 13, 7, 28, 56),
)]
)
]
def test_get_known_wifis_with_never_used_connection(nm_monitor):
@ -93,10 +100,12 @@ def test_get_known_wifis_with_never_used_connection(nm_monitor):
result = nm_monitor.get_known_wifis()
assert result == [SystemWifiInfo(
assert result == [
SystemWifiInfo(
ssid='TEST',
last_connected=None,
)]
)
]
def test_get_known_wifis_partial_failure(nm_monitor):
@ -114,10 +123,12 @@ def test_get_known_wifis_partial_failure(nm_monitor):
result = nm_monitor.get_known_wifis()
assert result == [SystemWifiInfo(
assert result == [
SystemWifiInfo(
ssid='TEST',
last_connected=None,
)]
)
]
def test_get_known_wifis_with_no_wifi_connections(nm_monitor):
@ -132,11 +143,14 @@ def test_get_known_wifis_with_no_wifi_connections(nm_monitor):
assert result == []
@pytest.mark.parametrize('ssid_bytes, expected', [
@pytest.mark.parametrize(
'ssid_bytes, expected',
[
([84, 69, 83, 84], 'TEST'),
([240, 159, 150, 150], '🖖'),
([0, 1, 2, 10, 34, 39], '\\x00\\x01\\x02\\n"\''),
])
],
)
def test_decode_ssid(ssid_bytes, expected):
result = decode_ssid(ssid_bytes)
assert result == expected

View File

@ -76,8 +76,7 @@ def test_repo_compact(qapp, qtbot, mocker, borg_json_output):
qtbot.mouseClick(tab.compactButton, QtCore.Qt.LeftButton)
qtbot.waitUntil(
lambda: 'compaction freed about 56.00 kB repository space' in main.logText.text(),
**pytest._wait_defaults
lambda: 'compaction freed about 56.00 kB repository space' in main.logText.text(), **pytest._wait_defaults
)
vorta.utils.borg_compat.version = '1.1.0'
@ -102,9 +101,7 @@ def test_mount(qapp, qtbot, mocker, borg_json_output, monkeypatch, choose_file_d
DiskPartitions = namedtuple('DiskPartitions', ['device', 'mountpoint'])
return [DiskPartitions('borgfs', '/tmp')]
monkeypatch.setattr(
psutil, "disk_partitions", psutil_disk_partitions
)
monkeypatch.setattr(psutil, "disk_partitions", psutil_disk_partitions)
main = qapp.main_window
tab = main.archiveTab
@ -116,9 +113,7 @@ def test_mount(qapp, qtbot, mocker, borg_json_output, monkeypatch, choose_file_d
popen_result = mocker.MagicMock(stdout=stdout, stderr=stderr, returncode=0)
mocker.patch.object(vorta.borg.borg_job, 'Popen', return_value=popen_result)
monkeypatch.setattr(
vorta.views.archive_tab, "choose_file_dialog", choose_file_dialog
)
monkeypatch.setattr(vorta.views.archive_tab, "choose_file_dialog", choose_file_dialog)
tab.bmountarchive_clicked()
qtbot.waitUntil(lambda: tab.mountErrors.text().startswith('Mounted'), **pytest._wait_defaults)

View File

@ -7,8 +7,9 @@ import vorta.views.archive_tab
from vorta.views.diff_result import ChangeType, DiffData, DiffTree, FileType, parse_diff_json, parse_diff_lines
@pytest.mark.parametrize('json_mock_file,folder_root', [
('diff_archives', 'test'), ('diff_archives_dict_issue', 'Users')])
@pytest.mark.parametrize(
'json_mock_file,folder_root', [('diff_archives', 'test'), ('diff_archives_dict_issue', 'Users')]
)
def test_archive_diff(qapp, qtbot, mocker, borg_json_output, json_mock_file, folder_root):
main = qapp.main_window
tab = main.archiveTab
@ -27,6 +28,7 @@ def test_archive_diff(qapp, qtbot, mocker, borg_json_output, json_mock_file, fol
if feature_name == 'DIFF_JSON_LINES':
return False
return vorta.utils.BorgCompatibility.check(compat, feature_name)
mocker.patch.object(vorta.utils.borg_compat, 'check', check)
selection_model: QItemSelectionModel = tab.archiveTable.selectionModel()
@ -52,42 +54,74 @@ def test_archive_diff(qapp, qtbot, mocker, borg_json_output, json_mock_file, fol
@pytest.mark.parametrize(
'line, expected',
[
('changed link some/changed/link',
('some/changed/link', FileType.LINK, ChangeType.CHANGED_LINK, 0, 0,
None, None, None)),
(' +77.8 kB -77.8 kB some/changed/file',
('some/changed/file', FileType.FILE, ChangeType.MODIFIED, 2 * 77800,
0, None, None,
(77800, 77800))),
(' +77.8 kB -77.8 kB [-rw-rw-rw- -> -rw-r--r--] some/changed/file',
('some/changed/file', FileType.FILE, ChangeType.MODIFIED, 2 * 77800, 0,
('-rw-rw-rw-', '-rw-r--r--'), None, (77800, 77800))),
('[-rw-rw-rw- -> -rw-r--r--] some/changed/file',
('some/changed/file', FileType.FILE, ChangeType.MODE, 0, 0,
('-rw-rw-rw-', '-rw-r--r--'), None, None)),
('added directory some/changed/dir',
('some/changed/dir', FileType.DIRECTORY, ChangeType.ADDED, 0, 0, None,
None, None)),
('removed directory some/changed/dir',
('some/changed/dir', FileType.DIRECTORY, ChangeType.REMOVED_DIR, 0, 0,
None, None, None)),
(
'changed link some/changed/link',
('some/changed/link', FileType.LINK, ChangeType.CHANGED_LINK, 0, 0, None, None, None),
),
(
' +77.8 kB -77.8 kB some/changed/file',
('some/changed/file', FileType.FILE, ChangeType.MODIFIED, 2 * 77800, 0, None, None, (77800, 77800)),
),
(
' +77.8 kB -77.8 kB [-rw-rw-rw- -> -rw-r--r--] some/changed/file',
(
'some/changed/file',
FileType.FILE,
ChangeType.MODIFIED,
2 * 77800,
0,
('-rw-rw-rw-', '-rw-r--r--'),
None,
(77800, 77800),
),
),
(
'[-rw-rw-rw- -> -rw-r--r--] some/changed/file',
('some/changed/file', FileType.FILE, ChangeType.MODE, 0, 0, ('-rw-rw-rw-', '-rw-r--r--'), None, None),
),
(
'added directory some/changed/dir',
('some/changed/dir', FileType.DIRECTORY, ChangeType.ADDED, 0, 0, None, None, None),
),
(
'removed directory some/changed/dir',
('some/changed/dir', FileType.DIRECTORY, ChangeType.REMOVED_DIR, 0, 0, None, None, None),
),
# Example from https://github.com/borgbase/vorta/issues/521
('[user:user -> nfsnobody:nfsnobody] home/user/arrays/test.txt',
('home/user/arrays/test.txt', FileType.FILE, ChangeType.OWNER, 0, 0,
None, ('user', 'user', 'nfsnobody', 'nfsnobody'), None)),
(
'[user:user -> nfsnobody:nfsnobody] home/user/arrays/test.txt',
(
'home/user/arrays/test.txt',
FileType.FILE,
ChangeType.OWNER,
0,
0,
None,
('user', 'user', 'nfsnobody', 'nfsnobody'),
None,
),
),
# Very short owner change, to check stripping whitespace from file path
('[a:a -> b:b] home/user/arrays/test.txt',
('home/user/arrays/test.txt', FileType.FILE, ChangeType.OWNER, 0, 0,
None, ('a', 'a', 'b', 'b'), None)),
(
'[a:a -> b:b] home/user/arrays/test.txt',
('home/user/arrays/test.txt', FileType.FILE, ChangeType.OWNER, 0, 0, None, ('a', 'a', 'b', 'b'), None),
),
# All file-related changes in one test
(' +77.8 kB -800 B [user:user -> nfsnobody:nfsnobody] [-rw-rw-rw- -> -rw-r--r--] home/user/arrays/test.txt',
('home/user/arrays/test.txt', FileType.FILE, ChangeType.OWNER,
77800 + 800, 77000, ('-rw-rw-rw-', '-rw-r--r--'),
('user', 'user', 'nfsnobody', 'nfsnobody'), (77800, 800))),
])
(
' +77.8 kB -800 B [user:user -> nfsnobody:nfsnobody] [-rw-rw-rw- -> -rw-r--r--] home/user/arrays/test.txt',
(
'home/user/arrays/test.txt',
FileType.FILE,
ChangeType.OWNER,
77800 + 800,
77000,
('-rw-rw-rw-', '-rw-r--r--'),
('user', 'user', 'nfsnobody', 'nfsnobody'),
(77800, 800),
),
),
],
)
def test_archive_diff_parser(line, expected):
model = DiffTree()
model.setMode(model.DisplayMode.FLAT)
@ -103,113 +137,110 @@ def test_archive_diff_parser(line, expected):
@pytest.mark.parametrize(
'line, expected',
[
({
'path': 'some/changed/link',
'changes': [{
'type': 'changed link'
}]
}, ('some/changed/link', FileType.LINK, ChangeType.CHANGED_LINK, 0, 0,
None, None, None)),
({
(
{'path': 'some/changed/link', 'changes': [{'type': 'changed link'}]},
('some/changed/link', FileType.LINK, ChangeType.CHANGED_LINK, 0, 0, None, None, None),
),
(
{'path': 'some/changed/file', 'changes': [{'type': 'modified', 'added': 77800, 'removed': 77800}]},
('some/changed/file', FileType.FILE, ChangeType.MODIFIED, 2 * 77800, 0, None, None, (77800, 77800)),
),
(
{
'path': 'some/changed/file',
'changes': [{
'type': 'modified',
'added': 77800,
'removed': 77800
}]
}, ('some/changed/file', FileType.FILE, ChangeType.MODIFIED, 2 * 77800,
0, None, None, (77800, 77800))),
({
'path':
'changes': [
{'type': 'modified', 'added': 77800, 'removed': 800},
{'type': 'mode', 'old_mode': '-rw-rw-rw-', 'new_mode': '-rw-r--r--'},
],
},
(
'some/changed/file',
'changes': [{
'type': 'modified',
'added': 77800,
'removed': 800
}, {
'type': 'mode',
'old_mode': '-rw-rw-rw-',
'new_mode': '-rw-r--r--'
}]
}, ('some/changed/file', FileType.FILE, ChangeType.MODIFIED,
77800 + 800, 77000, ('-rw-rw-rw-', '-rw-r--r--'), None,
(77800, 800))),
({
'path':
'some/changed/file',
'changes': [{
'type': 'mode',
'old_mode': '-rw-rw-rw-',
'new_mode': '-rw-r--r--'
}]
}, ('some/changed/file', FileType.FILE, ChangeType.MODE, 0, 0,
('-rw-rw-rw-', '-rw-r--r--'), None, None)),
({
'path': 'some/changed/dir',
'changes': [{
'type': 'added directory'
}]
}, ('some/changed/dir', FileType.DIRECTORY, ChangeType.ADDED, 0, 0,
None, None, None)),
({
'path': 'some/changed/dir',
'changes': [{
'type': 'removed directory'
}]
}, ('some/changed/dir', FileType.DIRECTORY, ChangeType.REMOVED_DIR, 0,
0, None, None, None)),
FileType.FILE,
ChangeType.MODIFIED,
77800 + 800,
77000,
('-rw-rw-rw-', '-rw-r--r--'),
None,
(77800, 800),
),
),
(
{
'path': 'some/changed/file',
'changes': [{'type': 'mode', 'old_mode': '-rw-rw-rw-', 'new_mode': '-rw-r--r--'}],
},
('some/changed/file', FileType.FILE, ChangeType.MODE, 0, 0, ('-rw-rw-rw-', '-rw-r--r--'), None, None),
),
(
{'path': 'some/changed/dir', 'changes': [{'type': 'added directory'}]},
('some/changed/dir', FileType.DIRECTORY, ChangeType.ADDED, 0, 0, None, None, None),
),
(
{'path': 'some/changed/dir', 'changes': [{'type': 'removed directory'}]},
('some/changed/dir', FileType.DIRECTORY, ChangeType.REMOVED_DIR, 0, 0, None, None, None),
),
# Example from https://github.com/borgbase/vorta/issues/521
({
'path':
'home/user/arrays/test.txt',
'changes': [{
(
{
'path': 'home/user/arrays/test.txt',
'changes': [
{
'type': 'owner',
'old_user': 'user',
'new_user': 'nfsnobody',
'old_group': 'user',
'new_group': 'nfsnobody'
}]
}, ('home/user/arrays/test.txt', FileType.FILE, ChangeType.OWNER, 0, 0,
None, ('user', 'user', 'nfsnobody', 'nfsnobody'), None)),
'new_group': 'nfsnobody',
}
],
},
(
'home/user/arrays/test.txt',
FileType.FILE,
ChangeType.OWNER,
0,
0,
None,
('user', 'user', 'nfsnobody', 'nfsnobody'),
None,
),
),
# Very short owner change, to check stripping whitespace from file path
({
'path':
'home/user/arrays/test.txt',
'changes': [{
'type': 'owner',
'old_user': 'a',
'new_user': 'b',
'old_group': 'a',
'new_group': 'b'
}]
}, ('home/user/arrays/test.txt', FileType.FILE, ChangeType.OWNER, 0, 0,
None, ('a', 'a', 'b', 'b'), None)),
(
{
'path': 'home/user/arrays/test.txt',
'changes': [{'type': 'owner', 'old_user': 'a', 'new_user': 'b', 'old_group': 'a', 'new_group': 'b'}],
},
('home/user/arrays/test.txt', FileType.FILE, ChangeType.OWNER, 0, 0, None, ('a', 'a', 'b', 'b'), None),
),
# All file-related changes in one test
({
'path':
'home/user/arrays/test.txt',
'changes': [{
'type': 'modified',
'added': 77800,
'removed': 77800
}, {
'type': 'mode',
'old_mode': '-rw-rw-rw-',
'new_mode': '-rw-r--r--'
}, {
(
{
'path': 'home/user/arrays/test.txt',
'changes': [
{'type': 'modified', 'added': 77800, 'removed': 77800},
{'type': 'mode', 'old_mode': '-rw-rw-rw-', 'new_mode': '-rw-r--r--'},
{
'type': 'owner',
'old_user': 'user',
'new_user': 'nfsnobody',
'old_group': 'user',
'new_group': 'nfsnobody'
}]
}, ('home/user/arrays/test.txt', FileType.FILE, ChangeType.OWNER,
2 * 77800, 0, ('-rw-rw-rw-', '-rw-r--r--'),
('user', 'user', 'nfsnobody', 'nfsnobody'), (77800, 77800))),
])
'new_group': 'nfsnobody',
},
],
},
(
'home/user/arrays/test.txt',
FileType.FILE,
ChangeType.OWNER,
2 * 77800,
0,
('-rw-rw-rw-', '-rw-r--r--'),
('user', 'user', 'nfsnobody', 'nfsnobody'),
(77800, 77800),
),
),
],
)
def test_archive_diff_json_parser(line, expected):
model = DiffTree()
model.setMode(model.DisplayMode.FLAT)

View File

@ -52,9 +52,7 @@ def test_import_fail_not_json(qapp, rootdir, monkeypatch):
def getOpenFileName(*args, **kwargs):
return [BAD_FILE]
monkeypatch.setattr(
QFileDialog, "getOpenFileName", getOpenFileName
)
monkeypatch.setattr(QFileDialog, "getOpenFileName", getOpenFileName)
alert_message = None
@ -62,9 +60,7 @@ def test_import_fail_not_json(qapp, rootdir, monkeypatch):
nonlocal alert_message
alert_message = message
monkeypatch.setattr(
QMessageBox, "critical", critical
)
monkeypatch.setattr(QMessageBox, "critical", critical)
main = qapp.main_window
main.profile_import_action()
@ -79,9 +75,7 @@ def test_export_success(qapp, qtbot, tmpdir, monkeypatch):
def getSaveFileName(*args, **kwargs):
return [FILE_PATH]
monkeypatch.setattr(
QFileDialog, "getSaveFileName", getSaveFileName
)
monkeypatch.setattr(QFileDialog, "getSaveFileName", getSaveFileName)
main = qapp.main_window
main.profile_export_action()
@ -99,9 +93,7 @@ def test_export_fail_unwritable(qapp, qtbot, tmpdir, monkeypatch):
def getSaveFileName(*args, **kwargs):
return [FILE_PATH]
monkeypatch.setattr(
QFileDialog, "getSaveFileName", getSaveFileName
)
monkeypatch.setattr(QFileDialog, "getSaveFileName", getSaveFileName)
alert_message = None
@ -109,9 +101,7 @@ def test_export_fail_unwritable(qapp, qtbot, tmpdir, monkeypatch):
nonlocal alert_message
alert_message = message
monkeypatch.setattr(
QMessageBox, "critical", critical
)
monkeypatch.setattr(QMessageBox, "critical", critical)
main = qapp.main_window
main.profile_export_action()

View File

@ -14,8 +14,7 @@ def test_autostart(qapp, qtbot):
def click_autostart():
for x in range(0, tab.checkboxLayout.count()):
item = tab.checkboxLayout.itemAt(x,
QFormLayout.ItemRole.FieldRole)
item = tab.checkboxLayout.itemAt(x, QFormLayout.ItemRole.FieldRole)
if not item:
continue
checkbox = item.widget()
@ -29,14 +28,16 @@ def test_autostart(qapp, qtbot):
click_autostart()
if sys.platform == 'linux':
autostart_path = Path(os.environ.get(
"XDG_CONFIG_HOME", os.path.expanduser("~") + '/.config') + "/autostart") / "vorta.desktop"
autostart_path = (
Path(os.environ.get("XDG_CONFIG_HOME", os.path.expanduser("~") + '/.config') + "/autostart")
/ "vorta.desktop"
)
qtbot.waitUntil(lambda: autostart_path.exists(), **pytest._wait_defaults)
with open(autostart_path) as desktop_file:
desktop_file_text = desktop_file.read()
assert (desktop_file_text.startswith("[Desktop Entry]"))
assert desktop_file_text.startswith("[Desktop Entry]")
click_autostart()
if sys.platform == 'linux':

View File

@ -57,8 +57,9 @@ def test_repo_unlink(qapp, qtbot):
qtbot.mouseClick(main.createStartBtn, QtCore.Qt.LeftButton)
# -1 is the repo id in this test
qtbot.waitUntil(lambda: main.progressText.text().startswith('Add a backup repository first.'),
**pytest._wait_defaults)
qtbot.waitUntil(
lambda: main.progressText.text().startswith('Add a backup repository first.'), **pytest._wait_defaults
)
assert main.progressText.text() == 'Add a backup repository first.'
@ -74,7 +75,7 @@ def test_password_autofill(qapp, qtbot):
qtbot.keyClicks(add_repo_window.repoURL, test_repo_url)
assert (add_repo_window.passwordLineEdit.text() == password)
assert add_repo_window.passwordLineEdit.text() == password
def test_repo_add_success(qapp, qtbot, mocker, borg_json_output):
@ -93,9 +94,9 @@ def test_repo_add_success(qapp, qtbot, mocker, borg_json_output):
mocker.patch.object(vorta.borg.borg_job, 'Popen', return_value=popen_result)
add_repo_window.run()
qtbot.waitUntil(lambda: EventLogModel.select()
.where(EventLogModel.returncode == 0).count() == 2,
**pytest._wait_defaults)
qtbot.waitUntil(
lambda: EventLogModel.select().where(EventLogModel.returncode == 0).count() == 2, **pytest._wait_defaults
)
assert RepoModel.get(id=2).url == test_repo_url

View File

@ -56,12 +56,14 @@ def test_schedule_tab(qapp: VortaApp, qtbot, clockmock):
profile = BackupProfileModel.get(name=PROFILE_NAME)
profile.schedule_make_up_missed = False
profile.save()
event = EventLogModel(subcommand='create',
event = EventLogModel(
subcommand='create',
profile=profile.id,
returncode=0,
category='scheduled',
start_time=last_time,
end_time=last_time)
end_time=last_time,
)
event.save()
qapp.scheduler.set_timer_for_profile(profile.id)

View File

@ -25,15 +25,12 @@ def clockmock(monkeypatch):
def prepare(func):
"""Decorator adding common preparation steps."""
@wraps(func)
def do(qapp, qtbot, mocker, borg_json_output):
stdout, stderr = borg_json_output('create')
popen_result = mocker.MagicMock(stdout=stdout,
stderr=stderr,
returncode=0)
mocker.patch.object(vorta.borg.borg_job,
'Popen',
return_value=popen_result)
popen_result = mocker.MagicMock(stdout=stdout, stderr=stderr, returncode=0)
mocker.patch.object(vorta.borg.borg_job, 'Popen', return_value=popen_result)
return func(qapp, qtbot, mocker, borg_json_output)
@ -81,12 +78,9 @@ def test_simple_schedule(clockmock):
profile.schedule_interval_count = 3
profile.save()
event = EventLogModel(subcommand='create',
profile=profile.id,
returncode=0,
category='scheduled',
start_time=time,
end_time=time)
event = EventLogModel(
subcommand='create', profile=profile.id, returncode=0, category='scheduled', start_time=time, end_time=time
)
event.save()
# test set timer and next_job
@ -94,7 +88,8 @@ def test_simple_schedule(clockmock):
assert len(scheduler.timers) == 1
assert scheduler.next_job() == '07:30 ({})'.format(PROFILE_NAME)
assert scheduler.next_job_for_profile(profile.id) == ScheduleStatus(
ScheduleStatusType.SCHEDULED, dt(2020, 5, 6, 7, 30))
ScheduleStatusType.SCHEDULED, dt(2020, 5, 6, 7, 30)
)
# test remove_job and next_job
scheduler.remove_job(profile.id)
@ -109,21 +104,17 @@ def test_simple_schedule(clockmock):
[
# simple
(td(), td(hours=4, minutes=30), 'hours', 3, td(hours=3)),
# next day
(td(), td(hours=4, minutes=30), 'hours', 20, td(hours=20)),
# passed by less than interval
(td(hours=2), td(hours=4, minutes=30), 'hours', 3, td(hours=1)),
# passed by exactly interval
(td(hours=3), td(hours=4, minutes=30), 'hours', 3, td(hours=3)),
# passed by multiple times the interval
(td(hours=7), td(hours=4, minutes=30), 'hours', 3, td(hours=2))
])
def test_interval(clockmock, passed_time, scheduled, now, unit, count,
added_time):
(td(hours=7), td(hours=4, minutes=30), 'hours', 3, td(hours=2)),
],
)
def test_interval(clockmock, passed_time, scheduled, now, unit, count, added_time):
"""Test scheduling in interval mode."""
# setup
scheduler = VortaScheduler()
@ -138,12 +129,14 @@ def test_interval(clockmock, passed_time, scheduled, now, unit, count,
profile.schedule_interval_count = count
profile.save()
event = EventLogModel(subcommand='create',
event = EventLogModel(
subcommand='create',
profile=profile.id,
returncode=0,
category='scheduled' if scheduled else '',
start_time=time - passed_time,
end_time=time - passed_time)
end_time=time - passed_time,
)
event.save()
# run test
@ -152,19 +145,16 @@ def test_interval(clockmock, passed_time, scheduled, now, unit, count,
@mark.parametrize("scheduled", [True, False])
@mark.parametrize(
"passed_time",
[td(hours=0), td(hours=5),
td(hours=14), td(hours=27)])
@mark.parametrize("passed_time", [td(hours=0), td(hours=5), td(hours=14), td(hours=27)])
@mark.parametrize(
"now, hour, minute",
[
# same day
(td(hours=4, minutes=30), 15, 00),
# next day
(td(hours=4, minutes=30), 3, 30),
])
],
)
def test_fixed(clockmock, passed_time, scheduled, now, hour, minute):
"""Test scheduling in fixed mode."""
# setup
@ -181,12 +171,14 @@ def test_fixed(clockmock, passed_time, scheduled, now, hour, minute):
profile.save()
last_time = time - passed_time
event = EventLogModel(subcommand='create',
event = EventLogModel(
subcommand='create',
profile=profile.id,
returncode=0,
category='scheduled' if scheduled else '',
start_time=last_time,
end_time=last_time)
end_time=last_time,
)
event.save()
# run test

View File

@ -3,9 +3,7 @@ import vorta.views
def test_add_folder(qapp, qtbot, mocker, monkeypatch, choose_file_dialog):
monkeypatch.setattr(
vorta.views.source_tab, "choose_file_dialog", choose_file_dialog
)
monkeypatch.setattr(vorta.views.source_tab, "choose_file_dialog", choose_file_dialog)
main = qapp.main_window
main.tabWidget.setCurrentIndex(1)
tab = main.sourceTab

View File

@ -142,8 +142,7 @@ class TestFileTreeModel:
assert item is not None and item.data == 3
# test parent
assert (model.parent(model.indexPath(
PurePath('test/subtest'))) == model.indexPath(PurePath('test')))
assert model.parent(model.indexPath(PurePath('test/subtest'))) == model.indexPath(PurePath('test'))
# test index
item1 = model.getItem(('test',))