| 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") |
| assert type(cc) == CacheControl |
| assert cc.max_age == 315360000 |
| assert cc.public 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'>" |