diff --git a/tests/storage/dav/__init__.py b/tests/storage/dav/__init__.py index 40a96af..c9780b9 100644 --- a/tests/storage/dav/__init__.py +++ b/tests/storage/dav/__init__.py @@ -1 +1,54 @@ # -*- coding: utf-8 -*- + +import os + +import requests +import requests.exceptions + +from tests import assert_item_equals + +import vdirsyncer.exceptions as exceptions +from vdirsyncer.storage.base import Item + +from .. import StorageTests + + +dav_server = os.environ.get('DAV_SERVER', '').strip() or 'radicale' + + +def _get_server_mixin(server_name): + from . import __name__ as base + x = __import__('{}.servers.{}'.format(base, server_name), fromlist=['']) + return x.ServerMixin + +ServerMixin = _get_server_mixin(dav_server) + + +class DavStorageTests(ServerMixin, StorageTests): + dav_server = dav_server + + def test_dav_broken_item(self, s): + item = Item(u'HAHA:YES') + try: + s.upload(item) + except (exceptions.Error, requests.exceptions.HTTPError): + pass + assert not list(s.list()) + + def test_dav_empty_get_multi_performance(self, s, monkeypatch): + def breakdown(*a, **kw): + raise AssertionError('Expected not to be called.') + + monkeypatch.setattr('requests.sessions.Session.request', breakdown) + + assert list(s.get_multi([])) == [] + + def test_dav_unicode_href(self, s, get_item, monkeypatch): + if self.dav_server != 'radicale': + # Radicale is unable to deal with unicode hrefs + monkeypatch.setattr(s, '_get_href', + lambda item: item.ident + s.fileext) + item = get_item(uid=u'lolätvdirsynceröü град сатану') + href, etag = s.upload(item) + item2, etag2 = s.get(href) + assert_item_equals(item, item2) diff --git a/tests/storage/dav/test_main.py b/tests/storage/dav/test_caldav.py similarity index 68% rename from tests/storage/dav/test_main.py rename to tests/storage/dav/test_caldav.py index e37f240..636c9da 100644 --- a/tests/storage/dav/test_main.py +++ b/tests/storage/dav/test_caldav.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- import datetime -import os from textwrap import dedent import pytest @@ -9,55 +8,13 @@ import pytest import requests import requests.exceptions -from tests import EVENT_TEMPLATE, TASK_TEMPLATE, VCARD_TEMPLATE, \ - assert_item_equals +from tests import EVENT_TEMPLATE, TASK_TEMPLATE, VCARD_TEMPLATE -import vdirsyncer.exceptions as exceptions -from vdirsyncer.storage.base import Item -from vdirsyncer.storage.dav import CaldavStorage, CarddavStorage, _parse_xml +from vdirsyncer import exceptions +from vdirsyncer.storage.dav import CaldavStorage -from .. import StorageTests, format_item - - -dav_server = os.environ.get('DAV_SERVER', '').strip() or 'radicale' - - -def _get_server_mixin(server_name): - from . import __name__ as base - x = __import__('{}.servers.{}'.format(base, server_name), fromlist=['']) - return x.ServerMixin - -ServerMixin = _get_server_mixin(dav_server) - - -class DavStorageTests(ServerMixin, StorageTests): - dav_server = dav_server - - def test_dav_broken_item(self, s): - item = Item(u'HAHA:YES') - try: - s.upload(item) - except (exceptions.Error, requests.exceptions.HTTPError): - pass - assert not list(s.list()) - - def test_dav_empty_get_multi_performance(self, s, monkeypatch): - def breakdown(*a, **kw): - raise AssertionError('Expected not to be called.') - - monkeypatch.setattr('requests.sessions.Session.request', breakdown) - - assert list(s.get_multi([])) == [] - - def test_dav_unicode_href(self, s, get_item, monkeypatch): - if self.dav_server != 'radicale': - # Radicale is unable to deal with unicode hrefs - monkeypatch.setattr(s, '_get_href', - lambda item: item.ident + s.fileext) - item = get_item(uid=u'lolätvdirsynceröü град сатану') - href, etag = s.upload(item) - item2, etag2 = s.get(href) - assert_item_equals(item, item2) +from . import DavStorageTests, dav_server +from .. import format_item class TestCaldavStorage(DavStorageTests): @@ -186,18 +143,3 @@ class TestCaldavStorage(DavStorageTests): assert set(s.list()) == set([event]) s.item_types = () assert set(s.list()) == set([event, task]) - - -class TestCarddavStorage(DavStorageTests): - storage_class = CarddavStorage - - @pytest.fixture(params=['VCARD']) - def item_type(self, request): - return request.param - - -def test_broken_xml(capsys): - rv = _parse_xml(b'

\x10haha

') - assert rv.text == 'haha' - warnings = capsys.readouterr()[1] - assert 'partially invalid xml' in warnings.lower() diff --git a/tests/storage/dav/test_carddav.py b/tests/storage/dav/test_carddav.py new file mode 100644 index 0000000..d0f8042 --- /dev/null +++ b/tests/storage/dav/test_carddav.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- + +import pytest + +from vdirsyncer.storage.dav import CarddavStorage + +from . import DavStorageTests + + +class TestCarddavStorage(DavStorageTests): + storage_class = CarddavStorage + + @pytest.fixture(params=['VCARD']) + def item_type(self, request): + return request.param diff --git a/tests/storage/dav/test_utils.py b/tests/storage/dav/test_utils.py new file mode 100644 index 0000000..b9b3ed9 --- /dev/null +++ b/tests/storage/dav/test_utils.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- + +from vdirsyncer.storage.dav import _parse_xml + + +def test_broken_xml(capsys): + rv = _parse_xml(b'

\x10haha

') + assert rv.text == 'haha' + warnings = capsys.readouterr()[1] + assert 'partially invalid xml' in warnings.lower()