From 77dc96d4de5f4d065d69af23ae41f069bd98b774 Mon Sep 17 00:00:00 2001 From: Georgiy Zatserklianyi Date: Fri, 10 Nov 2023 12:24:38 +0200 Subject: [PATCH] cookies_tests new test added --- tests/test_cookies.py | 68 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 tests/test_cookies.py diff --git a/tests/test_cookies.py b/tests/test_cookies.py new file mode 100644 index 000000000..9b327d8c1 --- /dev/null +++ b/tests/test_cookies.py @@ -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": "", + } + + 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