Fix http storage tests

This commit is contained in:
Markus Unterwaditzer 2014-03-28 20:45:02 +01:00
parent 8b7b55cdc2
commit 8f1531a4b2
2 changed files with 79 additions and 71 deletions

View file

@ -7,86 +7,94 @@
:license: MIT, see LICENSE for more details. :license: MIT, see LICENSE for more details.
''' '''
import mock
from .. import assert_item_equals from .. import assert_item_equals
from textwrap import dedent from textwrap import dedent
from vdirsyncer.storage.http import HttpStorage, Item from vdirsyncer.storage.http import HttpStorage, Item
from requests import Response
class TestHttpStorage(object): class TestHttpStorage(object):
def test_list(self): def test_list(self, monkeypatch):
collection_url = 'http://127.0.0.1/calendar/collection/' collection_url = 'http://127.0.0.1/calendar/collection/'
with mock.patch('requests.get') as p: responses = [
p.return_value = r = mock.Mock() dedent(b'''
BEGIN:VCALENDAR
VERSION:2.0
PRODID:http://www.example.com/calendarapplication/
METHOD:PUBLISH
BEGIN:VEVENT
UID:461092315540@example.com
LOCATION:Somewhere
SUMMARY:Eine Kurzinfo
DESCRIPTION:Beschreibung des Termines
CLASS:PUBLIC
DTSTART:20060910T220000Z
DTEND:20060919T215900Z
DTSTAMP:20060812T125900Z
END:VEVENT
BEGIN:VEVENT
UID:461092315asdasd540@example.com
LOCATION:Somewhere else
SUMMARY:Eine zweite Kurzinfo
DESCRIPTION:Beschreibung des anderen Termines
BEGIN:VALARM
ACTION:AUDIO
TRIGGER:19980403T120000
ATTACH;FMTTYPE=audio/basic:http://host.com/pub/ssbanner.aud
REPEAT:4
DURATION:PT1H
END:VALARM
END:VEVENT
END:VCALENDAR
''')
]
def get(*a, **kw):
r = Response()
r.status_code = 200 r.status_code = 200
r.text = dedent(u''' assert responses
BEGIN:VCALENDAR r._content = responses.pop()
VERSION:2.0 return r
PRODID:http://www.example.com/calendarapplication/
METHOD:PUBLISH
BEGIN:VEVENT
UID:461092315540@example.com
LOCATION:Somewhere
SUMMARY:Eine Kurzinfo
DESCRIPTION:Beschreibung des Termines
CLASS:PUBLIC
DTSTART:20060910T220000Z
DTEND:20060919T215900Z
DTSTAMP:20060812T125900Z
END:VEVENT
BEGIN:VEVENT
UID:461092315asdasd540@example.com
LOCATION:Somewhere else
SUMMARY:Eine zweite Kurzinfo
DESCRIPTION:Beschreibung des anderen Termines
BEGIN:VALARM
ACTION:AUDIO
TRIGGER:19980403T120000
ATTACH;FMTTYPE=audio/basic:http://host.com/pub/ssbanner.aud
REPEAT:4
DURATION:PT1H
END:VALARM
END:VEVENT
END:VCALENDAR
''')
s = HttpStorage(url=collection_url)
l = list(s.list()) monkeypatch.setattr('requests.get', get)
r.side_effect = IOError('Nope.')
hrefs = set(href for href, etag in l)
href1 = u'461092315540@example.com'
href2 = u'461092315asdasd540@example.com'
assert hrefs == set((href1, href2))
item, etag = s.get(href1) s = HttpStorage(url=collection_url)
assert_item_equals(item, Item(dedent(u''' l = list(s.list())
BEGIN:VEVENT
UID:461092315540@example.com
LOCATION:Somewhere
SUMMARY:Eine Kurzinfo
DESCRIPTION:Beschreibung des Termines
CLASS:PUBLIC
DTSTART:20060910T220000Z
DTEND:20060919T215900Z
DTSTAMP:20060812T125900Z
END:VEVENT
''').strip()))
item, etag = s.get(href2) hrefs = set(href for href, etag in l)
assert_item_equals(item, Item(dedent(u''' href1 = u'461092315540@example.com'
BEGIN:VEVENT href2 = u'461092315asdasd540@example.com'
UID:461092315asdasd540@example.com assert hrefs == set((href1, href2))
LOCATION:Somewhere else
SUMMARY:Eine zweite Kurzinfo item, etag = s.get(href1)
DESCRIPTION:Beschreibung des anderen Termines assert_item_equals(item, Item(dedent(u'''
BEGIN:VALARM BEGIN:VEVENT
ACTION:AUDIO UID:461092315540@example.com
TRIGGER:19980403T120000 LOCATION:Somewhere
ATTACH;FMTTYPE=audio/basic:http://host.com/pub/ssbanner.aud SUMMARY:Eine Kurzinfo
REPEAT:4 DESCRIPTION:Beschreibung des Termines
DURATION:PT1H CLASS:PUBLIC
END:VALARM DTSTART:20060910T220000Z
END:VEVENT DTEND:20060919T215900Z
''').strip())) DTSTAMP:20060812T125900Z
END:VEVENT
''').strip()))
item, etag = s.get(href2)
assert_item_equals(item, Item(dedent(u'''
BEGIN:VEVENT
UID:461092315asdasd540@example.com
LOCATION:Somewhere else
SUMMARY:Eine zweite Kurzinfo
DESCRIPTION:Beschreibung des anderen Termines
BEGIN:VALARM
ACTION:AUDIO
TRIGGER:19980403T120000
ATTACH;FMTTYPE=audio/basic:http://host.com/pub/ssbanner.aud
REPEAT:4
DURATION:PT1H
END:VALARM
END:VEVENT
''').strip()))

View file

@ -109,7 +109,7 @@ class HttpStorage(HttpStorageBase):
def list(self): def list(self):
if self._items is None: if self._items is None:
r = requests.get(self.url, **self._settings) r = requests.get(self.url, **self._settings)
r.raise_on_status() r.raise_for_status()
self._items = {} self._items = {}
for item in split_collection(r.text): for item in split_collection(r.text):
self._items[item.uid] = item self._items[item.uid] = item