def create_magic_mock_cookie_jar() -> CookieJar: """ Creates a magic mock CookieJar - has the implementation of a CookieJar all methods are implemented using magic mocks and therefore their usage is recorded. :return: the created magic mock """ cookie_jar = InMemoryCookieJar() original_get_next_for_processing = cookie_jar.get_next_for_processing original_enrich_cookie = cookie_jar.enrich_cookie original_mark_as_failed = cookie_jar.mark_as_complete original_mark_as_completed = cookie_jar.mark_as_complete original_mark_as_reprocess = cookie_jar.mark_for_processing cookie_jar.get_next_for_processing = MagicMock(side_effect=original_get_next_for_processing) cookie_jar.enrich_cookie = MagicMock(side_effect=original_enrich_cookie) cookie_jar.mark_as_failed = MagicMock(side_effect=original_mark_as_failed) cookie_jar.mark_as_complete = MagicMock(side_effect=original_mark_as_completed) cookie_jar.mark_for_processing = MagicMock(side_effect=original_mark_as_reprocess) return cookie_jar
class TestAddCookieJarLogging(unittest.TestCase): """ Tests for `add_cookie_jar_logging` method. """ def setUp(self): self._logger = MagicMock() self._cookie_jar = MagicMock() self._composite_methods = dict() # type: Dict[str, MagicMock] for method_name in CookieJar.__abstractmethods__: method = getattr(self._cookie_jar, method_name) method.__name__ = method_name self._composite_methods[method_name] = method add_cookie_jar_logging(self._cookie_jar, self._logger) def test_enrich_cookie(self): source = "my_source" enrichment = Enrichment("source", datetime.min, Metadata()) self._cookie_jar.enrich_cookie(source, enrichment) self._composite_methods[CookieJar.enrich_cookie.__name__].assert_called_once_with(source, enrichment) self._assert_measured(MEASUREMENT_QUERY_TIME[CookieJar.enrich_cookie.__name__]) def test_mark_as_failed(self): identifier = "identifier" requeue_delay = timedelta(seconds=5) self._cookie_jar.mark_as_failed(identifier, requeue_delay) self._composite_methods[CookieJar.mark_as_failed.__name__].assert_called_once_with(identifier, requeue_delay) self._assert_measured(MEASUREMENT_QUERY_TIME[CookieJar.mark_as_failed.__name__]) def test_mark_as_complete(self): identifier = "identifier" self._cookie_jar.mark_as_complete(identifier) self._composite_methods[CookieJar.mark_as_complete.__name__].assert_called_once_with(identifier) self._assert_measured(MEASUREMENT_QUERY_TIME[CookieJar.mark_as_complete.__name__]) def test_mark_for_processing(self): identifier = "identifier" self._cookie_jar.mark_for_processing(identifier) self._composite_methods[CookieJar.mark_for_processing.__name__].assert_called_once_with(identifier) self._assert_measured(MEASUREMENT_QUERY_TIME[CookieJar.mark_for_processing.__name__]) def test_get_next_for_processing(self): self._cookie_jar.get_next_for_processing() self._composite_methods[CookieJar.get_next_for_processing.__name__].assert_called_once_with() self._assert_measured(MEASUREMENT_QUERY_TIME[CookieJar.get_next_for_processing.__name__]) def test_queue_length(self): self._cookie_jar.queue_length() self._composite_methods[CookieJar.queue_length.__name__].assert_called_once_with() self._assert_measured(MEASUREMENT_QUERY_TIME[CookieJar.queue_length.__name__]) def test_call_to_non_adapted_cookie_jar_method(self): self._cookie_jar = InMemoryCookieJar() self._cookie_jar._composite_cookie_jar = self._cookie_jar listener = lambda: None self._cookie_jar.add_listener(listener) assert self._cookie_jar.get_listeners() == [listener] self.assertEqual(self._cookie_jar.get_listeners, self._cookie_jar.get_listeners) self.assertEqual(self._cookie_jar.get_listeners(), [listener]) def test_call_to_non_cookie_jar_method(self): self._cookie_jar.some_method = MagicMock() self._cookie_jar.some_method() self._cookie_jar.some_method.assert_called_once_with() def test_call_to_non_cookie_jar_property(self): self._cookie_jar.some_property = 1 self.assertEqual(self._cookie_jar.some_property, 1) def _assert_measured(self, measured: str): calls = self._logger.record.mock_calls self.assertEqual(len(calls), 1) args, kwargs = self._logger.record.call_args self.assertEqual(args[0], measured)