mirror of
https://github.com/samsonjs/vdirsyncer.git
synced 2026-03-25 08:55:50 +00:00
73 lines
2 KiB
Python
73 lines
2 KiB
Python
# encoding: utf-8
|
|
|
|
from textwrap import dedent
|
|
|
|
import pytest
|
|
|
|
|
|
@pytest.fixture
|
|
def storage(tmpdir, runner):
|
|
runner.write_with_general(dedent('''
|
|
[storage foo]
|
|
type = "filesystem"
|
|
path = "{base}/foo/"
|
|
fileext = ".txt"
|
|
''').format(base=str(tmpdir)))
|
|
|
|
return tmpdir.mkdir('foo')
|
|
|
|
|
|
@pytest.mark.parametrize('collection', [None, "foocoll"])
|
|
def test_basic(storage, runner, collection):
|
|
if collection is not None:
|
|
storage = storage.mkdir(collection)
|
|
collection_arg = 'foo/{}'.format(collection)
|
|
else:
|
|
collection_arg = 'foo'
|
|
|
|
argv = ['repair', collection_arg]
|
|
|
|
result = runner.invoke(argv, input='y')
|
|
assert not result.exception
|
|
|
|
storage.join('item.txt').write('BEGIN:VCARD\nEND:VCARD')
|
|
storage.join('toobroken.txt').write('')
|
|
|
|
result = runner.invoke(argv, input='y')
|
|
assert not result.exception
|
|
assert 'No UID' in result.output
|
|
assert '\'toobroken.txt\' is malformed beyond repair' \
|
|
in result.output
|
|
new_fname, = [x for x in storage.listdir() if 'toobroken' not in str(x)]
|
|
assert 'UID:' in new_fname.read()
|
|
|
|
|
|
@pytest.mark.parametrize('repair_uids', [None, True, False])
|
|
def test_repair_uids(storage, runner, repair_uids):
|
|
f = storage.join('baduid.txt')
|
|
orig_f = 'BEGIN:VCARD\nUID:!!!!!\nEND:VCARD'
|
|
f.write(orig_f)
|
|
|
|
if repair_uids is None:
|
|
opt = []
|
|
elif repair_uids:
|
|
opt = ['--repair-unsafe-uid']
|
|
else:
|
|
opt = ['--no-repair-unsafe-uid']
|
|
|
|
result = runner.invoke(['repair'] + opt + ['foo'], input='y')
|
|
assert not result.exception
|
|
|
|
if repair_uids:
|
|
assert 'UID or href is unsafe, assigning random UID' in result.output
|
|
assert not f.exists()
|
|
new_f, = storage.listdir()
|
|
s = new_f.read().strip()
|
|
|
|
assert s.startswith('BEGIN:VCARD')
|
|
assert s.endswith('END:VCARD')
|
|
assert s != orig_f
|
|
else:
|
|
assert 'UID may cause problems, add --repair-unsafe-uid to repair.' \
|
|
in result.output
|
|
assert f.read() == orig_f
|