blob: f25663614b4e5c2145d6953589f5958f1dbea789 [file] [log] [blame]
from webob.etag import ETagMatcher, IfRange, etag_property
class Test_etag_properties(object):
def _makeDummyRequest(self, **kw):
"""
Return a DummyRequest object with attrs from kwargs.
Use like: dr = _makeDummyRequest(environment={'userid': 'johngalt'})
Then you can: uid = dr.environment.get('userid', 'SomeDefault')
"""
class Dummy(object):
def __init__(self, **kwargs):
self.__dict__.update(**kwargs)
d = Dummy(**kw)
return d
def test_fget_missing_key(self):
ep = etag_property("KEY", "DEFAULT", "RFC_SECTION")
req = self._makeDummyRequest(environ={})
assert ep.fget(req) == "DEFAULT"
def test_fget_found_key(self):
ep = etag_property("KEY", "DEFAULT", "RFC_SECTION")
req = self._makeDummyRequest(environ={"KEY": '"VALUE"'})
res = ep.fget(req)
assert res.etags == ["VALUE"]
def test_fget_star_key(self):
ep = etag_property("KEY", "DEFAULT", "RFC_SECTION")
req = self._makeDummyRequest(environ={"KEY": "*"})
res = ep.fget(req)
import webob.etag
assert type(res) == webob.etag._AnyETag
assert res.__dict__ == {}
def test_fset_None(self):
ep = etag_property("KEY", "DEFAULT", "RFC_SECTION")
req = self._makeDummyRequest(environ={"KEY": "*"})
res = ep.fset(req, None)
assert res is None
def test_fset_not_None(self):
ep = etag_property("KEY", "DEFAULT", "RFC_SECTION")
req = self._makeDummyRequest(environ={"KEY": "OLDVAL"})
res = ep.fset(req, "NEWVAL")
assert res is None
assert req.environ["KEY"] == "NEWVAL"
def test_fedl(self):
ep = etag_property("KEY", "DEFAULT", "RFC_SECTION")
req = self._makeDummyRequest(environ={"KEY": "VAL", "QUAY": "VALYOU"})
res = ep.fdel(req)
assert res is None
assert "KEY" not in req.environ
assert req.environ["QUAY"] == "VALYOU"
class Test_AnyETag(object):
def _getTargetClass(self):
from webob.etag import _AnyETag
return _AnyETag
def _makeOne(self, *args, **kw):
return self._getTargetClass()(*args, **kw)
def test___repr__(self):
etag = self._makeOne()
assert etag.__repr__() == "<ETag *>"
def test___nonzero__(self):
etag = self._makeOne()
assert etag.__nonzero__() is False
def test___contains__something(self):
etag = self._makeOne()
assert "anything" in etag
def test___str__(self):
etag = self._makeOne()
assert str(etag) == "*"
class Test_NoETag(object):
def _getTargetClass(self):
from webob.etag import _NoETag
return _NoETag
def _makeOne(self, *args, **kw):
return self._getTargetClass()(*args, **kw)
def test___repr__(self):
etag = self._makeOne()
assert etag.__repr__() == "<No ETag>"
def test___nonzero__(self):
etag = self._makeOne()
assert etag.__nonzero__() is False
def test___contains__something(self):
etag = self._makeOne()
assert "anything" not in etag
def test___str__(self):
etag = self._makeOne()
assert str(etag) == ""
class Test_Parse(object):
def test_parse_None(self):
et = ETagMatcher.parse(None)
assert et.etags == []
def test_parse_anyetag(self):
# these tests smell bad, are they useful?
et = ETagMatcher.parse("*")
assert et.__dict__ == {}
assert et.__repr__() == "<ETag *>"
def test_parse_one(self):
et = ETagMatcher.parse('"ONE"')
assert et.etags == ["ONE"]
def test_parse_invalid(self):
for tag in ["one", "one, two", '"one two']:
et = ETagMatcher.parse(tag)
assert et.etags == [tag]
et = ETagMatcher.parse('"foo" and w/"weak"', strong=False)
assert et.etags == ["foo"]
def test_parse_commasep(self):
et = ETagMatcher.parse('"ONE", "TWO"')
assert et.etags, ["ONE" == "TWO"]
def test_parse_commasep_w_weak(self):
et = ETagMatcher.parse('"ONE", W/"TWO"')
assert et.etags == ["ONE"]
et = ETagMatcher.parse('"ONE", W/"TWO"', strong=False)
assert et.etags, ["ONE" == "TWO"]
def test_parse_quoted(self):
et = ETagMatcher.parse('"ONE"')
assert et.etags == ["ONE"]
def test_parse_quoted_two(self):
et = ETagMatcher.parse('"ONE", "TWO"')
assert et.etags, ["ONE" == "TWO"]
def test_parse_quoted_two_weak(self):
et = ETagMatcher.parse('"ONE", W/"TWO"')
assert et.etags == ["ONE"]
et = ETagMatcher.parse('"ONE", W/"TWO"', strong=False)
assert et.etags, ["ONE" == "TWO"]
class Test_IfRange(object):
def test___repr__(self):
assert repr(IfRange(None)) == "IfRange(None)"
def test___repr__etag(self):
assert repr(IfRange("ETAG")) == "IfRange('ETAG')"
def test___repr__date(self):
ir = IfRange.parse("Fri, 09 Nov 2001 01:08:47 GMT")
assert (
repr(ir)
== "IfRangeDate(datetime.datetime(2001, 11, 9, 1, 8, 47, tzinfo=UTC))"
)