diff --git a/tests/test_cli.py b/tests/test_cli.py index dfb0816..4cb20e6 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -6,10 +6,60 @@ :copyright: (c) 2014 Markus Unterwaditzer :license: MIT, see LICENSE for more details. ''' +from textwrap import dedent import vdirsyncer.cli as cli import vdirsyncer.exceptions as exceptions +def test_load_config(tmpdir, monkeypatch): + f = tmpdir.join('test.cfg') + f.write(dedent(''' + [general] + status_path = ~/.vdirsyncer/status/ + foo = 1 -class TestCli(object): - pass + [pair bob] + a = bob_a + b = bob_b + foo = bar + bam = true + + [storage bob_a] + type = filesystem + path = ~/.contacts/ + fileext = .vcf + yesno = off + number = 42 + + [storage bob_b] + type = carddav + + [bogus] + lol = true + ''').strip()) + + fname = str(tmpdir) + '/test.cfg' + errors = [] + monkeypatch.setattr('vdirsyncer.cli.cli_logger.error', errors.append) + general, pairs, storages = cli.load_config(fname, pair_options=('bam',)) + assert general == {'foo': 1, 'status_path': '~/.vdirsyncer/status/'} + assert pairs == {'bob': ('bob_a', 'bob_b', {'bam': True}, {'foo': 'bar'})} + assert storages == { + 'bob_a': {'type': 'filesystem', 'path': '~/.contacts/', + 'fileext': '.vcf', 'yesno': False, 'number': 42}, + 'bob_b': {'type': 'carddav'} + } + + assert len(errors) == 1 + assert errors[0].startswith('Unknown section') + assert 'bogus' in errors[0] + +def test_storage_instance_from_config(monkeypatch): + def lol(**kw): + assert kw == {'foo': 'bar', 'baz': 1} + return 'OK' + + import vdirsyncer.storage + monkeypatch.setitem(vdirsyncer.storage.storage_names, 'lol', lol) + config = {'type': 'lol', 'foo': 'bar', 'baz': 1} + assert cli.storage_instance_from_config(config) == 'OK' diff --git a/tests/test_utils.py b/tests/test_utils.py index 9c0b9b9..f15195e 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -14,6 +14,7 @@ import vdirsyncer.utils as utils def test_parse_options(): o = { 'foo': 'yes', + 'hah': 'true', 'bar': '', 'baz': 'whatever', 'bam': '123', @@ -22,6 +23,7 @@ def test_parse_options(): assert dict(utils.parse_options(o.items())) == { 'foo': True, + 'hah': True, 'bar': '', 'baz': 'whatever', 'bam': 123, diff --git a/vdirsyncer/utils.py b/vdirsyncer/utils.py index 0f9d05d..926f485 100644 --- a/vdirsyncer/utils.py +++ b/vdirsyncer/utils.py @@ -67,10 +67,10 @@ def get_password(username, resource): """ import getpass - try: - from urlparse import urlsplit, urlunsplit - except ImportError: + try: # pragma: no cover from urllib.parse import urlsplit, urlunsplit + except ImportError: # pragma: no cover + from urlparse import urlsplit, urlunsplit try: import keyring