scrapy/tests/test_downloadermiddleware_u...

72 lines
2.7 KiB
Python

import unittest
from scrapy.http import Request
from scrapy.downloadermiddlewares.uriuserinfo import UriUserinfoMiddleware
class BaseTestCase:
class Implementation(unittest.TestCase):
def setUp(self):
self.mw = UriUserinfoMiddleware()
def tearDown(self):
del self.mw
def test_username_and_password(self):
req = Request('{}://foo:bar@scrapytest.org/'.format(self.protocol))
assert self.mw.process_request(req, self.spider) is None
self.assertEqual(req.meta[self.username_field], 'foo')
self.assertEqual(req.meta[self.password_field], 'bar')
def test_username_and_empty_password(self):
req = Request('{}://foo:@scrapytest.org/'.format(self.protocol))
assert self.mw.process_request(req, self.spider) is None
self.assertEqual(req.meta[self.username_field], 'foo')
self.assertEqual(req.meta[self.password_field], '')
def test_username_and_no_password(self):
req = Request('{}://foo@scrapytest.org/'.format(self.protocol))
assert self.mw.process_request(req, self.spider) is None
self.assertEqual(req.meta[self.username_field], 'foo')
self.assertNotIn(self.password_field, req.meta)
def test_empty_username_and_nonempty_password(self):
req = Request('{}://:bar@scrapytest.org/'.format(self.protocol))
assert self.mw.process_request(req, self.spider) is None
self.assertEqual(req.meta[self.username_field], '')
self.assertEqual(req.meta[self.password_field], 'bar')
def test_no_username_and_no_password(self):
req = Request('{}://scrapytest.org/'.format(self.protocol))
assert self.mw.process_request(req, self.spider) is None
self.assertNotIn(self.username_field, req.meta)
self.assertNotIn(self.password_field, req.meta)
def test_unquoting(self):
req = Request(
'{}://foo%3A:b%40r@scrapytest.org/'.format(self.protocol)
)
assert self.mw.process_request(req, self.spider) is None
self.assertEqual(req.meta[self.username_field], 'foo:')
self.assertEqual(req.meta[self.password_field], 'b@r')
class UriUserinfoMiddlewareFTPTest(BaseTestCase.Implementation):
protocol = 'ftp'
username_field = 'ftp_user'
password_field = 'ftp_password'
class UriUserinfoMiddlewareHTTPTest(BaseTestCase.Implementation):
protocol = 'http'
username_field = 'http_user'
password_field = 'http_pass'
class UriUserinfoMiddlewareHTTPSTest(BaseTestCase.Implementation):
protocol = 'https'
username_field = 'http_user'
password_field = 'http_pass'