mirror of
https://github.com/samsonjs/vdirsyncer.git
synced 2026-03-25 08:55:50 +00:00
78 lines
2.5 KiB
Python
78 lines
2.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
'''
|
|
vdirsyncer.tests.storage
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
:copyright: (c) 2014 Markus Unterwaditzer
|
|
:license: MIT, see LICENSE for more details.
|
|
'''
|
|
|
|
from vdirsyncer.storage.base import Item
|
|
import vdirsyncer.exceptions as exceptions
|
|
|
|
|
|
class StorageTests(object):
|
|
|
|
def _create_bogus_item(self, uid):
|
|
return Item(u'UID:{}'.format(uid))
|
|
|
|
def _get_storage(self, **kwargs):
|
|
raise NotImplementedError()
|
|
|
|
def test_generic(self):
|
|
items = map(self._create_bogus_item, range(1, 10))
|
|
for i, item in enumerate(items):
|
|
assert item.uid == unicode(i + 1), item.raw
|
|
s = self._get_storage()
|
|
hrefs = []
|
|
for item in items:
|
|
hrefs.append(s.upload(item))
|
|
hrefs.sort()
|
|
assert hrefs == sorted(s.list())
|
|
for href, etag in hrefs:
|
|
assert s.has(href)
|
|
obj, etag2 = s.get(href)
|
|
assert etag == etag2
|
|
assert 'UID:{}'.format(obj.uid) in obj.raw
|
|
|
|
def test_upload_already_existing(self):
|
|
s = self._get_storage()
|
|
item = self._create_bogus_item(1)
|
|
s.upload(item)
|
|
self.assertRaises(exceptions.PreconditionFailed, s.upload, item)
|
|
|
|
def test_update(self):
|
|
s = self._get_storage()
|
|
item = self._create_bogus_item(1)
|
|
href, etag = s.upload(item)
|
|
assert s.get(href)[0].raw == item.raw
|
|
new_item = Item(item.raw + u'\nX-SOMETHING: YES\n')
|
|
s.update(href, new_item, etag)
|
|
assert s.get(href)[0].raw == new_item.raw
|
|
|
|
def test_update_nonexisting(self):
|
|
s = self._get_storage()
|
|
item = self._create_bogus_item(1)
|
|
self.assertRaises(
|
|
exceptions.PreconditionFailed, s.update, s._get_href('1'), item, 123)
|
|
self.assertRaises(
|
|
exceptions.PreconditionFailed, s.update, 'huehue', item, 123)
|
|
|
|
def test_wrong_etag(self):
|
|
s = self._get_storage()
|
|
obj = self._create_bogus_item(1)
|
|
href, etag = s.upload(obj)
|
|
self.assertRaises(
|
|
exceptions.PreconditionFailed, s.update, href, obj, 'lolnope')
|
|
self.assertRaises(
|
|
exceptions.PreconditionFailed, s.delete, href, 'lolnope')
|
|
|
|
def test_delete_nonexisting(self):
|
|
s = self._get_storage()
|
|
self.assertRaises(exceptions.PreconditionFailed, s.delete, '1', 123)
|
|
|
|
def test_list(self):
|
|
s = self._get_storage()
|
|
assert not list(s.list())
|
|
s.upload(self._create_bogus_item('1'))
|
|
assert list(s.list())
|