fix: backend improvements (customer health, tests, middleware, corpus)

This commit is contained in:
wlt
2026-06-24 10:38:26 +08:00
parent eb39cc1baa
commit ad329815fa
11 changed files with 122 additions and 77 deletions
+39 -1
View File
@@ -4,6 +4,7 @@ from typing import AsyncGenerator
from httpx import AsyncClient, ASGITransport
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.pool import NullPool
import sys
import os
@@ -93,11 +94,43 @@ from app.main import app
from app.database import Base, get_db
from app.models.user import User
from app.core.security import hash_password
from app.core.middleware import get_redis as real_get_redis
class _MockRedis:
"""In-memory mock Redis for testing — avoids real Redis connections."""
def __init__(self):
self._store = {}
async def get(self, key):
return self._store.get(key)
async def setex(self, key, time, value):
self._store[key] = value
async def incr(self, key):
val = self._store.get(key, 0) + 1
self._store[key] = val
return val
async def expire(self, key, ttl):
pass
async def close(self):
pass
@pytest.fixture(scope="function", autouse=True)
def _mock_redis():
import app.core.middleware as mw_mod
mock = _MockRedis()
async def _mock_get_redis():
return mock
mw_mod.get_redis = _mock_get_redis
yield
mw_mod.get_redis = real_get_redis
TEST_DATABASE_URL = "postgresql+asyncpg://admin:dWFNi67nHNbPbjmP@localhost:5432/foreign_trade_test"
test_engine = create_async_engine(TEST_DATABASE_URL, echo=False)
test_engine = create_async_engine(TEST_DATABASE_URL, echo=False, poolclass=NullPool)
TestAsyncSessionLocal = sessionmaker(
test_engine,
class_=AsyncSession,
@@ -151,6 +184,11 @@ async def test_user(db_session: AsyncSession) -> User:
db_session.add(user)
await db_session.commit()
await db_session.refresh(user)
# Grant credits for tests that require paid actions (marketing, reply, translation)
from app.services.credit import CreditService
credit_svc = CreditService(db_session)
await credit_svc.add_credits(str(user.id), 1000, "test_setup", "Test credits")
return user