39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
|
|
from unittest import mock
|
||
|
|
|
||
|
|
from scrapy import Spider
|
||
|
|
from scrapy.http import Request
|
||
|
|
|
||
|
|
from scrapy_redis.queue import Base
|
||
|
|
|
||
|
|
|
||
|
|
class TestBaseQueue:
|
||
|
|
|
||
|
|
queue_cls = Base
|
||
|
|
|
||
|
|
def setup(self):
|
||
|
|
self.server = mock.Mock()
|
||
|
|
self.spider = Spider(name="foo")
|
||
|
|
self.spider.parse_method = lambda x: x
|
||
|
|
self.key = "key"
|
||
|
|
self.q = self.queue_cls(self.server, self.spider, self.key)
|
||
|
|
|
||
|
|
def test_encode_decode_requests(self, q=None):
|
||
|
|
if q is None:
|
||
|
|
q = self.q
|
||
|
|
req = Request(
|
||
|
|
"http://example.com", callback=self.spider.parse, meta={"foo": "bar"}
|
||
|
|
)
|
||
|
|
out = q._decode_request(q._encode_request(req))
|
||
|
|
assert req.url == out.url
|
||
|
|
assert req.meta == out.meta
|
||
|
|
assert req.callback == out.callback
|
||
|
|
|
||
|
|
def test_custom_serializer(self):
|
||
|
|
serializer = mock.Mock()
|
||
|
|
serializer.dumps = mock.Mock(side_effect=lambda x: x)
|
||
|
|
serializer.loads = mock.Mock(side_effect=lambda x: x)
|
||
|
|
q = Base(self.server, self.spider, self.key, serializer=serializer)
|
||
|
|
self.test_encode_decode_requests(q)
|
||
|
|
assert serializer.dumps.call_count == 1
|
||
|
|
assert serializer.loads.call_count == 1
|