cookies_tests new test added

This commit is contained in:
Georgiy Zatserklianyi 2023-11-10 12:24:38 +02:00
parent 0f0690b1b6
commit 77dc96d4de
1 changed files with 68 additions and 0 deletions

68
tests/test_cookies.py Normal file
View File

@ -0,0 +1,68 @@
import json
from twisted.internet import defer
from twisted.trial.unittest import TestCase
from scrapy.crawler import CrawlerRunner
from scrapy.http import Request
from tests.mockserver import MockServer
from tests.spiders import MetaSpider
class CookiesSpider(MetaSpider):
name = "cookies"
def start_requests(self):
url = self.mockserver.url("/echo2/")
for status in [200, 302, 503]:
# Response params that mockserver will return
body = {
"status": status,
"headers": {
"Set-cookie": f"status={status}",
},
"body": "<html></html>",
}
if status == 302:
body["headers"]["location"] = self.mockserver.url("/")
yield Request(
url,
callback=self.parse,
meta={"cookiejar": status},
body=json.dumps(body),
)
def parse(self, response):
pass
def close(self, spider):
mw = [
m
for m in self.crawler.engine.downloader.middleware.middlewares
if "Cookies" in str(type(m))
][0]
jars_data = {}
for k, jar in mw.jars.items():
jars_data[k] = {
s: v.value for s, v in jar._cookies["127.0.0.1"]["/echo2"].items()
}
self.crawler.stats._stats["cookies_values"] = jars_data
class CrawlTestCase(TestCase):
def setUp(self):
self.mockserver = MockServer()
self.mockserver.__enter__()
self.runner = CrawlerRunner()
def tearDown(self):
self.mockserver.__exit__(None, None, None)
@defer.inlineCallbacks
def test_delay(self):
crawler = CrawlerRunner().create_crawler(CookiesSpider)
yield crawler.crawl(mockserver=self.mockserver)
cookies_stats = crawler.stats._stats.get("cookies_values")
self.assertTrue(cookies_stats) # WIP