blob: ce299d9db548daaf778476325a3b9de4efbab5ab [file] [log] [blame] [edit]
import pytest
def test_cache_control_object_max_age_None():
from webob.cachecontrol import CacheControl
cc = CacheControl({}, 'a')
cc.properties['max-age'] = None
assert cc.max_age == -1
class TestUpdateDict(object):
def setup_method(self, method):
self.call_queue = []
def callback(args):
self.call_queue.append("Called with: %s" % repr(args))
self.callback = callback
def make_one(self, callback):
from webob.cachecontrol import UpdateDict
ud = UpdateDict()
ud.updated = callback
return ud
def test_clear(self):
newone = self.make_one(self.callback)
newone['first'] = 1
assert len(newone) == 1
newone.clear()
assert len(newone) == 0
def test_update(self):
newone = self.make_one(self.callback)
d = {'one': 1}
newone.update(d)
assert newone == d
def test_set_delete(self):
newone = self.make_one(self.callback)
newone['first'] = 1
assert len(self.call_queue) == 1
assert self.call_queue[-1] == "Called with: {'first': 1}"
del newone['first']
assert len(self.call_queue) == 2
assert self.call_queue[-1] == 'Called with: {}'
def test_setdefault(self):
newone = self.make_one(self.callback)
assert newone.setdefault('haters', 'gonna-hate') == 'gonna-hate'
assert len(self.call_queue) == 1
assert self.call_queue[-1] == "Called with: {'haters': 'gonna-hate'}"
# no effect if failobj is not set
assert newone.setdefault('haters', 'gonna-love') == 'gonna-hate'
assert len(self.call_queue) == 1
def test_pop(self):
newone = self.make_one(self.callback)
newone['first'] = 1
newone.pop('first')
assert len(self.call_queue) == 2
assert self.call_queue[-1] == 'Called with: {}', self.call_queue[-1]
def test_popitem(self):
newone = self.make_one(self.callback)
newone['first'] = 1
assert newone.popitem() == ('first', 1)
assert len(self.call_queue) == 2
assert self.call_queue[-1] == 'Called with: {}', self.call_queue[-1]
class TestExistProp(object):
"""
Test webob.cachecontrol.exists_property
"""
def setUp(self):
pass
def make_one(self):
from webob.cachecontrol import exists_property
class Dummy(object):
properties = dict(prop=1)
type = 'dummy'
prop = exists_property('prop', 'dummy')
badprop = exists_property('badprop', 'big_dummy')
return Dummy
def test_get_on_class(self):
from webob.cachecontrol import exists_property
Dummy = self.make_one()
assert isinstance(Dummy.prop, exists_property), Dummy.prop
def test_get_on_instance(self):
obj = self.make_one()()
assert obj.prop is True
def test_type_mismatch_raise(self):
with pytest.raises(AttributeError):
obj = self.make_one()()
obj.badprop = True
def test_set_w_value(self):
obj = self.make_one()()
obj.prop = True
assert obj.prop is True
assert obj.properties['prop'] is None
def test_del_value(self):
obj = self.make_one()()
del obj.prop
assert 'prop' not in obj.properties
class TestValueProp(object):
"""
Test webob.cachecontrol.exists_property
"""
def setUp(self):
pass
def make_one(self):
from webob.cachecontrol import value_property
class Dummy(object):
properties = dict(prop=1)
type = 'dummy'
prop = value_property('prop', 'dummy')
badprop = value_property('badprop', 'big_dummy')
return Dummy
def test_get_on_class(self):
from webob.cachecontrol import value_property
Dummy = self.make_one()
assert isinstance(Dummy.prop, value_property), Dummy.prop
def test_get_on_instance(self):
dummy = self.make_one()()
assert dummy.prop, dummy.prop
def test_set_on_instance(self):
dummy = self.make_one()()
dummy.prop = "new"
assert dummy.prop == "new", dummy.prop
assert dummy.properties['prop'] == "new", dict(dummy.properties)
def test_set_on_instance_bad_attribute(self):
dummy = self.make_one()()
dummy.prop = "new"
assert dummy.prop == "new", dummy.prop
assert dummy.properties['prop'] == "new", dict(dummy.properties)
def test_set_wrong_type(self):
from webob.cachecontrol import value_property
class Dummy(object):
properties = dict(prop=1, type='fail')
type = 'dummy'
prop = value_property('prop', 'dummy', type='failingtype')
dummy = Dummy()
def assign():
dummy.prop = 'foo'
with pytest.raises(AttributeError):
assign()
def test_set_type_true(self):
dummy = self.make_one()()
dummy.prop = True
assert dummy.prop is None
def test_set_on_instance_w_default(self):
dummy = self.make_one()()
dummy.prop = "dummy"
assert dummy.prop == "dummy"
# TODO: this probably needs more tests
def test_del(self):
dummy = self.make_one()()
dummy.prop = 'Ian Bicking likes to skip'
del dummy.prop
assert dummy.prop == "dummy"
def test_copy_cc():
from webob.cachecontrol import CacheControl
cc = CacheControl({'header': '%', "msg": 'arewerichyet?'}, 'request')
cc2 = cc.copy()
assert cc.properties is not cc2.properties
assert cc.type is cc2.type
def test_serialize_cache_control_emptydict():
from webob.cachecontrol import serialize_cache_control
result = serialize_cache_control(dict())
assert result == ''
def test_serialize_cache_control_cache_control_object():
from webob.cachecontrol import serialize_cache_control, CacheControl
result = serialize_cache_control(CacheControl({}, 'request'))
assert result == ''
def test_serialize_cache_control_object_with_headers():
from webob.cachecontrol import serialize_cache_control, CacheControl
result = serialize_cache_control(CacheControl({'header': 'a'}, 'request'))
assert result == 'header=a'
def test_serialize_cache_control_value_is_None():
from webob.cachecontrol import serialize_cache_control, CacheControl
result = serialize_cache_control(CacheControl({'header': None}, 'request'))
assert result == 'header'
def test_serialize_cache_control_value_needs_quote():
from webob.cachecontrol import serialize_cache_control, CacheControl
result = serialize_cache_control(CacheControl({'header': '""'}, 'request'))
assert result == 'header=""""'
class TestCacheControl(object):
def make_one(self, props, typ):
from webob.cachecontrol import CacheControl
return CacheControl(props, typ)
def test_ctor(self):
cc = self.make_one({'a': 1}, 'typ')
assert cc.properties == {'a': 1}
assert cc.type == 'typ'
def test_parse(self):
from webob.cachecontrol import CacheControl
cc = CacheControl.parse("public, max-age=315360000, immutable")
assert type(cc) == CacheControl
assert cc.max_age == 315360000
assert cc.public is True
assert cc.immutable is True
def test_parse_updates_to(self):
from webob.cachecontrol import CacheControl
def foo(arg):
return {'a': 1}
cc = CacheControl.parse("public, max-age=315360000", updates_to=foo)
assert type(cc) == CacheControl
assert cc.max_age == 315360000
def test_parse_valueerror_int(self):
from webob.cachecontrol import CacheControl
def foo(arg):
return {'a': 1}
cc = CacheControl.parse("public, max-age=abc")
assert type(cc) == CacheControl
assert cc.max_age == 'abc'
def test_repr(self):
cc = self.make_one({'a': '1'}, 'typ')
assert repr(cc) == "<CacheControl 'a=1'>"