unityCatalog-ChatBot / conftest.py
Jackie Makhija
Fix deployment: correct Dockerfile, add missing dependencies, include all required files
a6a16a2
"""Shared pytest fixtures for offline testing."""
import os
from types import SimpleNamespace
from unittest.mock import MagicMock
import pytest
import app as app_module
import unity_catalog_service as uc_module
@pytest.fixture(scope="function", autouse=True)
def dummy_env(monkeypatch):
"""Set safe defaults to satisfy config validation without real secrets."""
env_defaults = {
"DATABRICKS_HOST": "https://dummy",
"DATABRICKS_TOKEN": "dummytoken123",
"ANTHROPIC_API_KEY": "sk-ant-dummy",
}
for key, value in env_defaults.items():
monkeypatch.setenv(key, value)
yield
@pytest.fixture
def workspace_client():
"""Provide a mocked Databricks WorkspaceClient surface."""
catalogs = MagicMock()
catalogs.create = MagicMock()
catalogs.list = MagicMock(return_value=[])
catalogs.get = MagicMock()
catalogs.delete = MagicMock()
schemas = MagicMock()
schemas.create = MagicMock()
schemas.list = MagicMock(return_value=[])
schemas.delete = MagicMock()
tables = MagicMock()
tables.create = MagicMock()
tables.list = MagicMock(return_value=[])
tables.get = MagicMock()
grants = MagicMock()
grants.update = MagicMock()
grants.get = MagicMock()
sql = MagicMock()
sql.execute = MagicMock(return_value=[])
return SimpleNamespace(
catalogs=catalogs,
schemas=schemas,
tables=tables,
grants=grants,
sql=sql,
)
@pytest.fixture(autouse=True)
def patch_workspace_client(monkeypatch, workspace_client):
"""Force UnityCatalogService to use the shared workspace client mock."""
monkeypatch.setattr(uc_module, "WorkspaceClient", MagicMock(return_value=workspace_client))
yield
@pytest.fixture
def uc_service(workspace_client):
"""Real UnityCatalogService instance bound to the mocked workspace client."""
service = uc_module.UnityCatalogService(
workspace_url="https://dummy",
token="dummytoken123",
)
service.client = workspace_client
return service
@pytest.fixture
def claude_client_mock():
"""Mock Anthropics client matching the methods used in app.py."""
messages = MagicMock()
messages.create = MagicMock()
return SimpleNamespace(messages=messages)
@pytest.fixture(autouse=True)
def patch_app_init(monkeypatch, uc_service, claude_client_mock):
"""Override app._init_services to return mocked services for tests."""
def mock_init_services():
return uc_service, claude_client_mock
monkeypatch.setattr(app_module, "_init_services", mock_init_services)
yield