mirror of
https://github.com/samsonjs/vdirsyncer.git
synced 2026-04-27 14:57:41 +00:00
Split up caldav and carddav tests
This commit is contained in:
parent
4b0a896303
commit
f0e842ac41
4 changed files with 83 additions and 63 deletions
|
|
@ -1 +1,54 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- 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)
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
import os
|
|
||||||
from textwrap import dedent
|
from textwrap import dedent
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
@ -9,55 +8,13 @@ import pytest
|
||||||
import requests
|
import requests
|
||||||
import requests.exceptions
|
import requests.exceptions
|
||||||
|
|
||||||
from tests import EVENT_TEMPLATE, TASK_TEMPLATE, VCARD_TEMPLATE, \
|
from tests import EVENT_TEMPLATE, TASK_TEMPLATE, VCARD_TEMPLATE
|
||||||
assert_item_equals
|
|
||||||
|
|
||||||
import vdirsyncer.exceptions as exceptions
|
from vdirsyncer import exceptions
|
||||||
from vdirsyncer.storage.base import Item
|
from vdirsyncer.storage.dav import CaldavStorage
|
||||||
from vdirsyncer.storage.dav import CaldavStorage, CarddavStorage, _parse_xml
|
|
||||||
|
|
||||||
from .. import StorageTests, format_item
|
from . import DavStorageTests, dav_server
|
||||||
|
from .. import 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)
|
|
||||||
|
|
||||||
|
|
||||||
class TestCaldavStorage(DavStorageTests):
|
class TestCaldavStorage(DavStorageTests):
|
||||||
|
|
@ -186,18 +143,3 @@ class TestCaldavStorage(DavStorageTests):
|
||||||
assert set(s.list()) == set([event])
|
assert set(s.list()) == set([event])
|
||||||
s.item_types = ()
|
s.item_types = ()
|
||||||
assert set(s.list()) == set([event, task])
|
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'<h1>\x10haha</h1>')
|
|
||||||
assert rv.text == 'haha'
|
|
||||||
warnings = capsys.readouterr()[1]
|
|
||||||
assert 'partially invalid xml' in warnings.lower()
|
|
||||||
15
tests/storage/dav/test_carddav.py
Normal file
15
tests/storage/dav/test_carddav.py
Normal file
|
|
@ -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
|
||||||
10
tests/storage/dav/test_utils.py
Normal file
10
tests/storage/dav/test_utils.py
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from vdirsyncer.storage.dav import _parse_xml
|
||||||
|
|
||||||
|
|
||||||
|
def test_broken_xml(capsys):
|
||||||
|
rv = _parse_xml(b'<h1>\x10haha</h1>')
|
||||||
|
assert rv.text == 'haha'
|
||||||
|
warnings = capsys.readouterr()[1]
|
||||||
|
assert 'partially invalid xml' in warnings.lower()
|
||||||
Loading…
Reference in a new issue