from unittest.mock import MagicMock, patch from pytest import fixture from ingestor.managers.data_manager import DataManager @fixture @patch("ingestor.managers.data_manager.KafkaProducer") def data_manager(kafka): return DataManager( kafka_servers="localhost:9092", logger=MagicMock() ) def test___del__(data_manager): flush_mock = MagicMock() close_mock = MagicMock() data_manager.kafka_producer.flush = flush_mock data_manager.kafka_producer.close = close_mock data_manager.__del__() flush_mock.assert_called_once() close_mock.assert_called_once() def test_delivery_report(data_manager): msg = MagicMock() msg.topic = "test_topic" msg.partition = 0 msg.offset = 1 data_manager.delivery_report(msg) data_manager.logger.info.assert_called_once_with( f"Record successfully produced to {msg.topic} [{msg.partition}] at offset {msg.offset}" ) def test_delivery_error(data_manager): err = "Test error" data_manager.delivery_error(err) data_manager.logger.error.assert_called_once_with( f"Delivery failed for record : {err}" ) def test_publish(data_manager): topic = "test_topic" data = {"key": "value"} # Mock the send method of the Kafka producer send_mock = MagicMock() data_manager.kafka_producer.send = send_mock # Call the publish method data_manager.publish(topic, data) # Check if the send method was called with the correct arguments send_mock.assert_called_once_with( topic=topic, value=data ) send_mock.return_value.add_callback.assert_called_once() data_manager.kafka_producer.flush.assert_called_once()