dylanglenister
Fixing connection closing logic
3a9698b
"""
Run individual tests:
python -m tests.test_account
python -m tests.test_patient
python -m tests.test_session
Run collective tests:
python -m unittest discover tests "test_*.py"
"""
import unittest
from typing import Any
from bson import ObjectId
from src.data.connection import (Collections, close_connection, get_collection,
get_database)
class BaseMongoTest(unittest.TestCase):
"""Base class for MongoDB tests that handles test collection management."""
@classmethod
def setUpClass(cls):
"""Initialize test database connection once for the entire test class."""
cls.db = get_database()
# Map production collections to test collections
cls._collections = {
value: f"test_{value.lower()}" for name, value in vars(Collections).items()
if not name.startswith('_') and isinstance(value, str)
}
@classmethod
def tearDownClass(cls):
"""Close the database connection once after all tests in the class are done."""
close_connection()
def setUp(self):
"""Create clean test collections before each test."""
for test_name in self._collections.values():
self.db.drop_collection(test_name)
def tearDown(self):
"""Clean up test collections after each test."""
# This tearDown is for individual test cleanup, not connection closing.
# We can leave it empty or keep the collection drop for extra safety.
for test_name in self._collections.values():
self.db.drop_collection(test_name)
def get_doc_by_id(self, collection: str, doc_id: str) -> dict[str, Any] | None:
"""
Helper to get a document by ID.
`collection` should be the production collection name from `Collections`.
"""
test_coll_name = self._collections.get(collection)
if not test_coll_name:
raise KeyError(f"No test collection mapping found for '{collection}'")
return get_collection(test_coll_name).find_one({"_id": ObjectId(doc_id)})