Add the Sales CRM service through collaboration, sync architecture/registry docs, expose crm.torbatyar.ir, and include a production deploy script. Co-authored-by: Cursor <cursoragent@cursor.com>
39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
"""Dependency direction and DI tests."""
|
|
from __future__ import annotations
|
|
|
|
import inspect
|
|
|
|
from app.api import deps
|
|
from app.repositories.base import TenantBaseRepository
|
|
from app.repositories.foundation import LeadRepository
|
|
from app.services.foundation import LeadService
|
|
|
|
|
|
def test_repository_pattern():
|
|
assert issubclass(LeadRepository, TenantBaseRepository)
|
|
assert LeadRepository.model is not None
|
|
|
|
|
|
def test_service_depends_on_repository_not_api():
|
|
source = inspect.getsource(LeadService)
|
|
assert "fastapi" not in source.lower()
|
|
assert "LeadRepository" in source
|
|
|
|
|
|
def test_api_deps_expose_tenant_and_db():
|
|
assert hasattr(deps, "require_tenant")
|
|
assert hasattr(deps, "get_db")
|
|
assert hasattr(deps, "get_current_user")
|
|
|
|
|
|
def test_providers_are_protocols_only():
|
|
import app.providers.contracts as contracts
|
|
|
|
source = inspect.getsource(contracts)
|
|
assert "async def" in source
|
|
assert "class AutomationProvider" in source
|
|
# No concrete HTTP/DB implementation in contracts module
|
|
assert "httpx" not in source
|
|
assert "sqlalchemy" not in source
|
|
assert "AsyncSession" not in source
|