diff --git a/patterns/behavioral/chain_of_responsibility.py b/patterns/behavioral/chain_of_responsibility.py index 9d46c4a8..46c3a419 100644 --- a/patterns/behavioral/chain_of_responsibility.py +++ b/patterns/behavioral/chain_of_responsibility.py @@ -14,6 +14,10 @@ As a variation some receivers may be capable of sending requests out in several directions, forming a `tree of responsibility`. +*Examples in Python ecosystem: +Django Middleware: https://docs.djangoproject.com/en/stable/topics/http/middleware/ +The middleware components act as a chain where each processes the request/response. + *TL;DR Allow a request to pass down a chain of receivers until it is handled. """ diff --git a/patterns/creational/factory.py b/patterns/creational/factory.py index f75bb2b2..4f7bee71 100644 --- a/patterns/creational/factory.py +++ b/patterns/creational/factory.py @@ -54,7 +54,7 @@ def get_localizer(language: str = "English") -> Localizer: "Greek": GreekLocalizer, } - return localizers.get(language, EnglishLocalizer)() + return localizers.get(language, EnglishLocalizer)() diff --git a/tests/creational/test_factory.py b/tests/creational/test_factory.py new file mode 100644 index 00000000..4bcfd4c5 --- /dev/null +++ b/tests/creational/test_factory.py @@ -0,0 +1,30 @@ +import unittest +from patterns.creational.factory import get_localizer, GreekLocalizer, EnglishLocalizer + +class TestFactory(unittest.TestCase): + def test_get_localizer_greek(self): + localizer = get_localizer("Greek") + self.assertIsInstance(localizer, GreekLocalizer) + self.assertEqual(localizer.localize("dog"), "σκύλος") + self.assertEqual(localizer.localize("cat"), "γάτα") + # Test unknown word returns the word itself + self.assertEqual(localizer.localize("monkey"), "monkey") + + def test_get_localizer_english(self): + localizer = get_localizer("English") + self.assertIsInstance(localizer, EnglishLocalizer) + self.assertEqual(localizer.localize("dog"), "dog") + self.assertEqual(localizer.localize("cat"), "cat") + + def test_get_localizer_default(self): + # Test default argument + localizer = get_localizer() + self.assertIsInstance(localizer, EnglishLocalizer) + + def test_get_localizer_unknown_language(self): + # Test fallback for unknown language if applicable, + # or just verify what happens. + # Based on implementation: localizers.get(language, EnglishLocalizer)() + # It defaults to EnglishLocalizer for unknown keys. + localizer = get_localizer("Spanish") + self.assertIsInstance(localizer, EnglishLocalizer)