#!/usr/bin/env python3
"""
Test des corrections de bugs dans mcp_server.py
"""
import sqlite3
import sys
DB_PATH = r"C:\Users\miche\AppData\Roaming\com.teymz.wealthfolio\app.db"
def test_get_total_net_worth_query():
"""Test que la requête de get_total_net_worth retourne bien les actifs financiers"""
print("=" * 70)
print("TEST 1: get_total_net_worth - Requête actifs financiers")
print("=" * 70)
conn = sqlite3.connect(DB_PATH)
conn.row_factory = sqlite3.Row
c = conn.cursor()
# Requête corrigee
c.execute("""
SELECT CAST(total_value AS REAL) as total_value, base_currency
FROM daily_account_valuation
WHERE account_id = 'TOTAL'
AND valuation_date = (SELECT MAX(valuation_date) FROM daily_account_valuation WHERE account_id = 'TOTAL')
""")
result = c.fetchone()
if result:
financial_assets = result['total_value']
currency = result['base_currency']
print(f"[OK] Actifs financiers: {financial_assets:,.2f} {currency}")
if financial_assets > 0:
print("[OK] SUCCES: La requête retourne les actifs financiers")
success = True
else:
print("[FAIL] ECHEC: Les actifs financiers sont a 0")
success = False
else:
print("[FAIL] ECHEC: Aucun resultat retourne")
success = False
conn.close()
print()
return success
def test_get_portfolio_summary_query():
"""Test que la requête de get_portfolio_summary retourne bien les actifs financiers"""
print("=" * 70)
print("TEST 2: get_portfolio_summary - Requête actifs financiers")
print("=" * 70)
conn = sqlite3.connect(DB_PATH)
conn.row_factory = sqlite3.Row
c = conn.cursor()
# Requête corrigee
c.execute("""
SELECT
CAST(total_value AS REAL) as total_value,
base_currency
FROM daily_account_valuation
WHERE account_id = 'TOTAL'
AND valuation_date = (SELECT MAX(valuation_date) FROM daily_account_valuation WHERE account_id = 'TOTAL')
""")
result = c.fetchone()
if result:
financial_assets = result['total_value']
currency = result['base_currency']
print(f"[OK] Actifs financiers: {financial_assets:,.2f} {currency}")
if financial_assets > 0:
print("[OK] SUCCES: La requête retourne les actifs financiers")
success = True
else:
print("[FAIL] ECHEC: Les actifs financiers sont a 0")
success = False
else:
print("[FAIL] ECHEC: Aucun resultat retourne")
success = False
conn.close()
print()
return success
def test_get_accounts_summary_query():
"""Test que la requête de get_accounts_summary retourne tous les comptes"""
print("=" * 70)
print("TEST 3: get_accounts_summary - Requête avec dates par compte")
print("=" * 70)
conn = sqlite3.connect(DB_PATH)
conn.row_factory = sqlite3.Row
c = conn.cursor()
# Compter le total de comptes actifs (hors TOTAL)
c.execute("""
SELECT COUNT(DISTINCT id) as total
FROM accounts
WHERE id != 'TOTAL' AND is_active = 1
""")
total_accounts = c.fetchone()['total']
print(f"Total comptes actifs (hors TOTAL): {total_accounts}")
# Requête corrigee (avec date max par compte)
c.execute("""
SELECT
a."group" as groupe,
COUNT(DISTINCT a.id) as nb_comptes,
SUM(CAST(v.total_value AS REAL)) as valeur_totale
FROM daily_account_valuation v
JOIN accounts a ON v.account_id = a.id
WHERE v.valuation_date = (
SELECT MAX(valuation_date)
FROM daily_account_valuation v2
WHERE v2.account_id = v.account_id
)
AND a.id != 'TOTAL'
AND a.is_active = 1
GROUP BY a."group"
""")
groups = c.fetchall()
accounts_in_query = sum(g['nb_comptes'] for g in groups)
print(f"Comptes retournes par la requête: {accounts_in_query}")
if accounts_in_query == total_accounts:
print(f"[OK] SUCCES: Tous les {total_accounts} comptes sont inclus")
success = True
else:
print(f"[FAIL] ECHEC: {total_accounts - accounts_in_query} comptes manquants")
success = False
# Afficher le resume par groupe
print("\nRepartition par groupe:")
total_value = 0
for g in groups:
print(f" {g['groupe'] or 'Sans groupe':20}: {g['nb_comptes']:2} comptes | {g['valeur_totale']:12,.2f} EUR")
total_value += g['valeur_totale']
print(f" {'TOTAL':20}: {accounts_in_query:2} comptes | {total_value:12,.2f} EUR")
conn.close()
print()
return success
def main():
print("\nTESTS DES CORRECTIONS DE BUGS\n")
results = []
results.append(("get_total_net_worth query", test_get_total_net_worth_query()))
results.append(("get_portfolio_summary query", test_get_portfolio_summary_query()))
results.append(("get_accounts_summary query", test_get_accounts_summary_query()))
# Resume
print("=" * 70)
print("RÉSUMÉ DES TESTS")
print("=" * 70)
for test_name, success in results:
status = "[OK] PASS" if success else "[FAIL] FAIL"
print(f"{status}: {test_name}")
total_passed = sum(1 for _, success in results if success)
total_tests = len(results)
print(f"\n{total_passed}/{total_tests} tests reussis")
if total_passed == total_tests:
print("\n[OK] Tous les tests sont passes! Les bugs sont corriges.\n")
return 0
else:
print(f"\n[FAIL] {total_tests - total_passed} test(s) echoue(s)\n")
return 1
if __name__ == "__main__":
sys.exit(main())