import pytest from unittest.mock import patch, MagicMock from connectors.mongodb_handler import MongodbHandler, list_mongodb_collections import pandas as pd @patch('connectors.mongodb_handler.MongoClient') def test_list_mongodb_collections(mock_client_class): mock_client = MagicMock() mock_db = MagicMock() mock_db.list_collection_names.return_value = ["users", "orders"] mock_client.__getitem__.return_value = mock_db mock_client_class.return_value = mock_client collections = list_mongodb_collections("localhost", 27017, "testdb", "user", "pass") assert collections == ["users", "orders"] @patch('connectors.mongodb_handler.MongoClient') def test_fetch_data_mongodb(mock_client_class): mock_client = MagicMock() mock_db = MagicMock() mock_collection = MagicMock() # Mock finding docs mock_cursor = MagicMock() mock_cursor.limit.return_value = [ {"_id": "123", "user": {"name": "Alice", "age": 25}}, {"_id": "456", "user": {"name": "Bob", "age": 30}} ] mock_collection.find.return_value = mock_cursor mock_db.__getitem__.return_value = mock_collection mock_client.__getitem__.return_value = mock_db mock_client_class.return_value = mock_client handler = MongodbHandler() df = handler.fetch_data("localhost", 27017, "testdb", "user", "pass", "users") assert isinstance(df, pd.DataFrame) assert "user.name" in df.columns assert "user.age" in df.columns assert df.iloc[0]["user.name"] == "Alice" assert df.iloc[1]["user.name"] == "Bob" @patch('connectors.mongodb_handler.MongoClient') def test_fetch_data_respects_limit(mock_client_class): mock_client = MagicMock() mock_db = MagicMock() mock_collection = MagicMock() mock_cursor = MagicMock() mock_cursor.limit.return_value = [] mock_collection.find.return_value = mock_cursor mock_db.__getitem__.return_value = mock_collection mock_client.__getitem__.return_value = mock_db mock_client_class.return_value = mock_client handler = MongodbHandler() handler.fetch_data("localhost", 27017, "testdb", "user", "pass", "users", limit=5) mock_collection.find.assert_called_once() mock_cursor.limit.assert_called_once_with(5)