Added pytest + some tests.
Added AWS S3 Support (optional, for cloud image storage)
This commit is contained in:
90
tests/test_mongodb_connection.py
Normal file
90
tests/test_mongodb_connection.py
Normal file
@@ -0,0 +1,90 @@
|
||||
"""
|
||||
Test MongoDB connection functionality.
|
||||
"""
|
||||
|
||||
import pytest
|
||||
from pymongo import MongoClient
|
||||
from pymongo.errors import ConnectionFailure, ServerSelectionTimeoutError
|
||||
|
||||
|
||||
class TestMongoDBConnection:
|
||||
"""Test MongoDB connection and basic operations"""
|
||||
|
||||
def test_mongodb_connection_when_enabled(self, use_mongodb, mongodb_config):
|
||||
"""Test MongoDB connection when MongoDB is enabled in config"""
|
||||
if not use_mongodb:
|
||||
pytest.skip("MongoDB is disabled in configuration")
|
||||
|
||||
if not mongodb_config:
|
||||
pytest.fail("MongoDB is enabled but no MongoDB configuration found")
|
||||
|
||||
uri = mongodb_config.get("uri")
|
||||
if not uri:
|
||||
pytest.fail("MongoDB URI not found in configuration")
|
||||
|
||||
try:
|
||||
# Create MongoDB client with shorter timeout for testing
|
||||
client = MongoClient(uri, serverSelectionTimeoutMS=5000)
|
||||
|
||||
# Test connection by pinging the server
|
||||
client.admin.command('ping')
|
||||
|
||||
# Test database access
|
||||
database_name = mongodb_config.get("database", "reviews")
|
||||
db = client[database_name]
|
||||
|
||||
# Test collection access
|
||||
collection_name = mongodb_config.get("collection", "google_reviews")
|
||||
collection = db[collection_name]
|
||||
|
||||
# Verify we can perform basic operations
|
||||
# Test insert and delete a dummy document
|
||||
test_doc = {"_id": "test_connection", "test": True}
|
||||
collection.insert_one(test_doc)
|
||||
|
||||
# Verify document was inserted
|
||||
found_doc = collection.find_one({"_id": "test_connection"})
|
||||
assert found_doc is not None
|
||||
assert found_doc["test"] is True
|
||||
|
||||
# Clean up test document
|
||||
collection.delete_one({"_id": "test_connection"})
|
||||
|
||||
# Verify document was deleted
|
||||
found_doc = collection.find_one({"_id": "test_connection"})
|
||||
assert found_doc is None
|
||||
|
||||
client.close()
|
||||
|
||||
except ConnectionFailure as e:
|
||||
pytest.fail(f"Failed to connect to MongoDB: {e}")
|
||||
except ServerSelectionTimeoutError as e:
|
||||
pytest.fail(f"MongoDB server selection timeout: {e}")
|
||||
except Exception as e:
|
||||
pytest.fail(f"Unexpected error testing MongoDB: {e}")
|
||||
|
||||
def test_mongodb_config_validation(self, use_mongodb, mongodb_config):
|
||||
"""Test that MongoDB configuration is valid when enabled"""
|
||||
if not use_mongodb:
|
||||
pytest.skip("MongoDB is disabled in configuration")
|
||||
|
||||
# Check required configuration fields
|
||||
assert "uri" in mongodb_config, "MongoDB URI is required"
|
||||
assert "database" in mongodb_config, "MongoDB database name is required"
|
||||
assert "collection" in mongodb_config, "MongoDB collection name is required"
|
||||
|
||||
# Validate URI format
|
||||
uri = mongodb_config["uri"]
|
||||
assert uri.startswith("mongodb://") or uri.startswith("mongodb+srv://"), "Invalid MongoDB URI format"
|
||||
|
||||
# Validate names are not empty
|
||||
assert mongodb_config["database"].strip(), "Database name cannot be empty"
|
||||
assert mongodb_config["collection"].strip(), "Collection name cannot be empty"
|
||||
|
||||
def test_mongodb_skipped_when_disabled(self, use_mongodb):
|
||||
"""Test that MongoDB tests are skipped when disabled"""
|
||||
if use_mongodb:
|
||||
pytest.skip("MongoDB is enabled, this test is for disabled state")
|
||||
|
||||
# This test passes if we reach here, meaning MongoDB is properly disabled
|
||||
assert True
|
||||
Reference in New Issue
Block a user