Files
borgmatic/tests/unit/actions/test_recreate.py

187 lines
7.0 KiB
Python

import pytest
from flexmock import flexmock
from borgmatic.actions import recreate as module
def test_run_recreate_does_not_raise():
flexmock(module.logger).answer = lambda message: None
flexmock(module.borgmatic.config.validate).should_receive('repositories_match').and_return(True)
flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(
flexmock(),
)
flexmock(module.borgmatic.borg.repo_list).should_receive('resolve_archive_name').and_return(
None,
)
flexmock(module.borgmatic.borg.recreate).should_receive('recreate_archive')
module.run_recreate(
repository={'path': 'repo'},
config={},
local_borg_version=None,
recreate_arguments=flexmock(repository=flexmock(), archive=None),
global_arguments=flexmock(),
local_path=None,
remote_path=None,
)
def test_run_recreate_with_archive_does_not_raise():
flexmock(module.logger).answer = lambda message: None
flexmock(module.borgmatic.config.validate).should_receive('repositories_match').and_return(True)
flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(
flexmock(),
)
flexmock(module.borgmatic.borg.repo_list).should_receive('resolve_archive_name').and_return(
'test-archive',
)
flexmock(module.borgmatic.borg.recreate).should_receive('recreate_archive')
module.run_recreate(
repository={'path': 'repo'},
config={},
local_borg_version=None,
recreate_arguments=flexmock(repository=flexmock(), archive='test-archive'),
global_arguments=flexmock(),
local_path=None,
remote_path=None,
)
def test_run_recreate_with_leftover_recreate_archive_raises():
flexmock(module.logger).answer = lambda message: None
flexmock(module.borgmatic.config.validate).should_receive('repositories_match').and_return(True)
flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(
flexmock(),
)
flexmock(module.borgmatic.borg.repo_list).should_receive('resolve_archive_name').and_return(
'test-archive.recreate',
)
flexmock(module.borgmatic.borg.recreate).should_receive('recreate_archive')
with pytest.raises(ValueError):
module.run_recreate(
repository={'path': 'repo'},
config={},
local_borg_version=None,
recreate_arguments=flexmock(repository=flexmock(), archive='test-archive.recreate'),
global_arguments=flexmock(),
local_path=None,
remote_path=None,
)
def test_run_recreate_with_latest_archive_resolving_to_leftover_recreate_archive_raises():
flexmock(module.logger).answer = lambda message: None
flexmock(module.borgmatic.config.validate).should_receive('repositories_match').and_return(True)
flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(
flexmock(),
)
flexmock(module.borgmatic.borg.repo_list).should_receive('resolve_archive_name').and_return(
'test-archive.recreate',
)
flexmock(module.borgmatic.borg.recreate).should_receive('recreate_archive')
with pytest.raises(ValueError):
module.run_recreate(
repository={'path': 'repo'},
config={},
local_borg_version=None,
recreate_arguments=flexmock(repository=flexmock(), archive='latest'),
global_arguments=flexmock(),
local_path=None,
remote_path=None,
)
def test_run_recreate_with_archive_already_exists_error_raises():
flexmock(module.logger).answer = lambda message: None
flexmock(module.borgmatic.config.validate).should_receive('repositories_match').and_return(True)
flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(
flexmock(),
)
flexmock(module.borgmatic.borg.repo_list).should_receive('resolve_archive_name').and_return(
'test-archive',
)
flexmock(module.borgmatic.borg.recreate).should_receive('recreate_archive').and_raise(
module.subprocess.CalledProcessError(
returncode=module.BORG_EXIT_CODE_ARCHIVE_ALREADY_EXISTS,
cmd='borg recreate or whatever',
),
)
with pytest.raises(ValueError):
module.run_recreate(
repository={'path': 'repo'},
config={},
local_borg_version=None,
recreate_arguments=flexmock(repository=flexmock(), archive='test-archive', target=None),
global_arguments=flexmock(),
local_path=None,
remote_path=None,
)
def test_run_recreate_with_target_and_archive_already_exists_error_raises():
flexmock(module.logger).answer = lambda message: None
flexmock(module.borgmatic.config.validate).should_receive('repositories_match').and_return(True)
flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(
flexmock(),
)
flexmock(module.borgmatic.borg.repo_list).should_receive('resolve_archive_name').and_return(
'test-archive',
)
flexmock(module.borgmatic.borg.recreate).should_receive('recreate_archive').and_raise(
module.subprocess.CalledProcessError(
returncode=module.BORG_EXIT_CODE_ARCHIVE_ALREADY_EXISTS,
cmd='borg recreate or whatever',
),
)
with pytest.raises(ValueError):
module.run_recreate(
repository={'path': 'repo'},
config={},
local_borg_version=None,
recreate_arguments=flexmock(
repository=flexmock(),
archive='test-archive',
target='target-archive',
),
global_arguments=flexmock(),
local_path=None,
remote_path=None,
)
def test_run_recreate_with_other_called_process_error_passes_it_through():
flexmock(module.logger).answer = lambda message: None
flexmock(module.borgmatic.config.validate).should_receive('repositories_match').and_return(True)
flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(
flexmock(),
)
flexmock(module.borgmatic.borg.repo_list).should_receive('resolve_archive_name').and_return(
'test-archive',
)
flexmock(module.borgmatic.borg.recreate).should_receive('recreate_archive').and_raise(
module.subprocess.CalledProcessError(
returncode=1,
cmd='borg recreate or whatever',
),
)
with pytest.raises(module.subprocess.CalledProcessError):
module.run_recreate(
repository={'path': 'repo'},
config={},
local_borg_version=None,
recreate_arguments=flexmock(
repository=flexmock(),
archive='test-archive',
target='target-archive',
),
global_arguments=flexmock(),
local_path=None,
remote_path=None,
)