mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-05-19 18:45:15 +02:00
fix(tests): improve composio module hijack in integration tests
This commit is contained in:
parent
9b926b3133
commit
bd452b3df4
2 changed files with 32 additions and 23 deletions
|
|
@ -1,13 +1,11 @@
|
||||||
"""Composio route integration fixtures.
|
"""Composio route integration fixtures.
|
||||||
|
|
||||||
The sys.modules hijack happens at module import time, before importing
|
The `composio` sys.modules hijack lives in the parent integration conftest
|
||||||
app.app, so production `from composio import Composio` bindings resolve to
|
so it runs before any sibling suite imports `app.routes`.
|
||||||
the strict E2E fake in this pytest process too.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import sys
|
|
||||||
from collections.abc import AsyncGenerator
|
from collections.abc import AsyncGenerator
|
||||||
|
|
||||||
import httpx
|
import httpx
|
||||||
|
|
@ -16,19 +14,15 @@ import pytest_asyncio
|
||||||
from httpx import ASGITransport
|
from httpx import ASGITransport
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
|
||||||
from tests.e2e.fakes import composio_module as _fake_composio
|
from app.app import app, limiter
|
||||||
|
from app.config import config
|
||||||
sys.modules["composio"] = _fake_composio
|
from app.db import (
|
||||||
|
|
||||||
from app.app import app, limiter # noqa: E402
|
|
||||||
from app.config import config # noqa: E402
|
|
||||||
from app.db import ( # noqa: E402
|
|
||||||
SearchSourceConnector,
|
SearchSourceConnector,
|
||||||
SearchSourceConnectorType,
|
SearchSourceConnectorType,
|
||||||
User,
|
User,
|
||||||
get_async_session,
|
get_async_session,
|
||||||
)
|
)
|
||||||
from app.users import current_active_user # noqa: E402
|
from app.users import current_active_user
|
||||||
|
|
||||||
pytestmark = pytest.mark.integration
|
pytestmark = pytest.mark.integration
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
import importlib
|
||||||
|
import sys
|
||||||
import uuid
|
import uuid
|
||||||
from unittest.mock import AsyncMock, MagicMock
|
from unittest.mock import AsyncMock, MagicMock
|
||||||
|
|
||||||
|
|
@ -7,17 +9,27 @@ from sqlalchemy import text
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
|
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
|
||||||
from sqlalchemy.pool import NullPool
|
from sqlalchemy.pool import NullPool
|
||||||
|
|
||||||
from app.config import config as app_config
|
# Hijack `composio` before any `from app.*` import; the `from composio import
|
||||||
from app.db import (
|
# Composio` in app.services.composio_service binds once at first import.
|
||||||
Base,
|
from tests.e2e.fakes import composio_module as _fake_composio
|
||||||
DocumentType,
|
|
||||||
SearchSourceConnector,
|
sys.modules["composio"] = _fake_composio
|
||||||
SearchSourceConnectorType,
|
|
||||||
SearchSpace,
|
app_config = importlib.import_module("app.config").config
|
||||||
User,
|
app_db = importlib.import_module("app.db")
|
||||||
)
|
Base = app_db.Base
|
||||||
from app.indexing_pipeline.connector_document import ConnectorDocument
|
DocumentType = app_db.DocumentType
|
||||||
from tests.conftest import TEST_DATABASE_URL
|
SearchSourceConnector = app_db.SearchSourceConnector
|
||||||
|
SearchSourceConnectorType = app_db.SearchSourceConnectorType
|
||||||
|
SearchSpace = app_db.SearchSpace
|
||||||
|
User = app_db.User
|
||||||
|
ConnectorDocument = importlib.import_module(
|
||||||
|
"app.indexing_pipeline.connector_document"
|
||||||
|
).ConnectorDocument
|
||||||
|
create_default_roles_and_membership = importlib.import_module(
|
||||||
|
"app.routes.search_spaces_routes"
|
||||||
|
).create_default_roles_and_membership
|
||||||
|
TEST_DATABASE_URL = importlib.import_module("tests.conftest").TEST_DATABASE_URL
|
||||||
|
|
||||||
_EMBEDDING_DIM = app_config.embedding_model_instance.dimension
|
_EMBEDDING_DIM = app_config.embedding_model_instance.dimension
|
||||||
|
|
||||||
|
|
@ -105,6 +117,9 @@ async def db_search_space(db_session: AsyncSession, db_user: User) -> SearchSpac
|
||||||
)
|
)
|
||||||
db_session.add(space)
|
db_session.add(space)
|
||||||
await db_session.flush()
|
await db_session.flush()
|
||||||
|
# Mirror POST /searchspaces so routes guarded by check_permission find a membership.
|
||||||
|
await create_default_roles_and_membership(db_session, space.id, db_user.id)
|
||||||
|
await db_session.flush()
|
||||||
return space
|
return space
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue