Spaces:
Sleeping
Sleeping
| import pytest | |
| from unittest.mock import patch, MagicMock | |
| from connectors.mongodb_handler import MongodbHandler, list_mongodb_collections | |
| import pandas as pd | |
| 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"] | |
| 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" | |
| 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) | |