fix: 行动方案库统计卡片—补全API+overdue计算
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
"""Debug: trace the summary endpoint call"""
|
||||
from fastapi.testclient import TestClient
|
||||
from app import database as db_module
|
||||
from app.database import Base
|
||||
from tests.conftest import TEST_ENGINE, TEST_SESSION_LOCAL, create_test_user, get_token_for_user, auth_header, create_test_kpi
|
||||
from app.main import app
|
||||
from app.models import KPIAlert, KPIValue, KPIDefinition
|
||||
from sqlalchemy import func
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
# Track the session used in summary
|
||||
_actual_sessions = []
|
||||
|
||||
def _get_db_override():
|
||||
"""Debug version that captures the session"""
|
||||
s = TEST_SESSION_LOCAL()
|
||||
_actual_sessions.append(s)
|
||||
return s
|
||||
|
||||
# First test: test_summary_empty
|
||||
print("=== Simulating test_summary_empty ===")
|
||||
Base.metadata.create_all(bind=TEST_ENGINE)
|
||||
app.dependency_overrides[db_module.get_db] = _get_db_override
|
||||
|
||||
session1 = TEST_SESSION_LOCAL()
|
||||
create_test_user(session1)
|
||||
# Note: login uses get_db which is overridden! But let's use create_test_user directly
|
||||
|
||||
# Hmm, the login also uses get_db. Let me bypass that.
|
||||
# Actually let me create the user and generate a token manually
|
||||
import hashlib
|
||||
user = create_test_user(session1)
|
||||
|
||||
# Create a token directly
|
||||
from app.auth_middleware import create_token
|
||||
token = create_token(user.id)
|
||||
headers = {"Authorization": f"Bearer {token}"}
|
||||
|
||||
client = TestClient(app)
|
||||
resp = client.get("/api/cma/dashboard/summary", headers=headers)
|
||||
print(f" Status: {resp.status_code}")
|
||||
print(f" Data: {resp.json()}")
|
||||
|
||||
# Teardown
|
||||
Base.metadata.drop_all(bind=TEST_ENGINE)
|
||||
app.dependency_overrides.clear()
|
||||
|
||||
# Second test
|
||||
print("=== Simulating test_summary_with_data ===")
|
||||
Base.metadata.create_all(bind=TEST_ENGINE)
|
||||
app.dependency_overrides[db_module.get_db] = _get_db_override
|
||||
|
||||
session2 = TEST_SESSION_LOCAL()
|
||||
user2 = create_test_user(session2)
|
||||
token2 = create_token(user2.id)
|
||||
|
||||
kpi = create_test_kpi(session2, kpi_code="F_REVENUE", dimension="finance")
|
||||
kpi2 = create_test_kpi(session2, kpi_code="C_SATISFACTION", kpi_name="客户满意度", dimension="customer")
|
||||
|
||||
cnt_before = session2.query(func.count(KPIDefinition.id)).filter(KPIDefinition.status == "active").scalar()
|
||||
print(f" Direct count before calling endpoint: {cnt_before}")
|
||||
|
||||
alert = KPIAlert(kpi_id=kpi.id, alert_level="red", alert_message="营收预警", status="pending")
|
||||
session2.add(alert)
|
||||
session2.commit()
|
||||
|
||||
resp2 = client.get("/api/cma/dashboard/summary", headers={"Authorization": f"Bearer {token2}"})
|
||||
print(f" Status: {resp2.status_code}")
|
||||
print(f" Data: {resp2.json()}")
|
||||
|
||||
# Also check what the engine sees
|
||||
conn = TEST_ENGINE.connect()
|
||||
result = conn.execute(KPIDefinition.__table__.select())
|
||||
rows = result.fetchall()
|
||||
print(f" Rows in KPIDefinition table via raw conn: {[(r.id, r.kpi_code, r.status) for r in rows]}")
|
||||
conn.close()
|
||||
|
||||
app.dependency_overrides.clear()
|
||||
Base.metadata.drop_all(bind=TEST_ENGINE)
|
||||
Reference in New Issue
Block a user