scrapy/tests/test_addons.py

73 lines
2.5 KiB
Python

import unittest
from scrapy.addons import Addon, AddonManager
from scrapy.settings import BaseSettings
class GoodAddon(object):
name = "GoodAddon"
def update_settings(self, config, settings):
pass
def check_configuration(self, config, crawler):
pass
class AddonTest(unittest.TestCase):
def setUp(self):
class AddonWithAttributes(Addon):
name = "Test"
self.testaddon = AddonWithAttributes()
def test_export_config(self):
settings = BaseSettings()
self.testaddon.config_mapping = {"MAPPED_key": "MAPPING_WORKED"}
self.testaddon.default_config = {"key": 55, "defaultkey": 100}
self.testaddon.export_config(
{"key": 313, "OTHERKEY": True, "mapped_KEY": 99}, settings
)
self.assertEqual(settings["KEY"], 313)
self.assertEqual(settings["DEFAULTKEY"], 100)
self.assertEqual(settings["OTHERKEY"], True)
self.assertNotIn("MAPPED_key", settings)
self.assertNotIn("MAPPED_KEY", settings)
self.assertEqual(settings["MAPPING_WORKED"], 99)
self.assertEqual(settings.getpriority("KEY"), 15)
def test_update_settings(self):
settings = BaseSettings()
settings.set("KEY1", "default", priority="default")
settings.set("KEY2", "project", priority="project")
addon_config = {"key1": "addon", "key2": "addon", "key3": "addon"}
self.testaddon.update_settings(addon_config, settings)
self.assertEqual(settings["KEY1"], "addon")
self.assertEqual(settings["KEY2"], "project")
self.assertEqual(settings["KEY3"], "addon")
class AddonManagerTest(unittest.TestCase):
def setUp(self):
self.manager = AddonManager()
def test_add(self):
manager = AddonManager()
manager.add("tests.test_addons.GoodAddon")
self.assertCountEqual(manager, ["GoodAddon"])
self.assertIsInstance(manager["GoodAddon"], GoodAddon)
def test_load_settings(self):
settings = BaseSettings()
settings.set(
"ADDONS",
{"tests.test_addons.GoodAddon": 0},
)
settings.set("GOODADDON", {"key": "val2"})
manager = AddonManager()
manager.load_settings(settings)
self.assertCountEqual(manager, ["GoodAddon"])
self.assertIsInstance(manager["GoodAddon"], GoodAddon)
self.assertCountEqual(manager.configs["GoodAddon"], ["key"])
self.assertEqual(manager.configs["GoodAddon"]["key"], "val2")