Files
service-finder/backend/tests/test_04_business_onboarding.py
2026-06-04 07:26:22 +00:00

253 lines
9.5 KiB
Python
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
"""
Ground Zero Test Script - Step 4: Business Onboarding & Branch Fix
This script tests the business onboarding endpoint and fixes the missing branch logic.
"""
import sys
import asyncio
import httpx
import json
sys.path.append('/app/backend')
from app.db.session import AsyncSessionLocal
from sqlalchemy import select
from app.models.identity import User
from app.core.security import create_tokens
async def get_auth_token():
"""Hitelesítési token lekérése User 55 számára"""
async with AsyncSessionLocal() as db:
result = await db.execute(select(User).where(User.id == 55))
user = result.scalar_one_or_none()
if user:
access_token, _ = create_tokens(data={'sub': str(user.id)})
return access_token
else:
raise Exception("User 55 nem található")
async def test_business_onboarding():
"""Üzleti szervezet regisztrációja és branch létrehozása"""
print("🚀 Starting Ground Zero Test - Step 4: Business Onboarding")
print("=" * 60)
# Token lekérése
token = await get_auth_token()
print("✅ Hitelesítési token megkapva User 55 számára")
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json"
}
async with httpx.AsyncClient(base_url="http://localhost:8000", timeout=30.0) as client:
print("\n=== 1. ÜZLETI SZERVEZET REGISZTRÁCIÓ ===")
# Payload a feladat szerint
payload = {
"full_name": "Test-Robot Kft.",
"name": "Test-Robot Kft.",
"display_name": "Test-Robot",
"tax_number": "12345678-1-12",
"reg_number": "01-09-123456",
"address_zip": "1132",
"address_city": "Budapest",
"address_street_name": "Váci",
"address_street_type": "út",
"address_house_number": "47",
"country_code": "HU"
}
print(f"📝 Küldött adatok:")
for key, value in payload.items():
print(f" {key}: {value}")
try:
response = await client.post("/api/v1/organizations/onboard",
json=payload,
headers=headers)
print(f"\n📡 Válasz státusz: {response.status_code}")
if response.status_code == 201:
result = response.json()
print(f"✅ Sikeres regisztráció!")
print(f" Szervezet ID: {result.get('organization_id')}")
print(f" Státusz: {result.get('status')}")
# Mentjük a szervezet ID-t a következő lépésekhez
org_id = result.get('organization_id')
# 2. BRANCH LÉTREHOZÁSA
print("\n=== 2. BRANCH LÉTREHOZÁSA ===")
await create_main_branch(client, headers, org_id)
# 3. SZERVEZETEK ELLENŐRZÉSE
print("\n=== 3. SZERVEZETEK ELLENŐRZÉSE ===")
await verify_organizations(client, headers)
return True
else:
print(f"❌ Hiba történt: {response.status_code}")
print(f" Hibaüzenet: {response.text}")
return False
except Exception as e:
print(f"❌ Kivétel történt: {e}")
return False
async def create_main_branch(client, headers, org_id):
"""Központi telephely létrehozása az új szervezethez"""
print("🔧 Központi telephely létrehozása...")
# Először ellenőrizzük, van-e branch végpont
# Keressük a branch végpontot
branch_payload = {
"organization_id": org_id,
"name": "Központi Telephely",
"is_main": True,
"postal_code": "1132",
"city": "Budapest",
"street_name": "Váci",
"street_type": "út",
"house_number": "47"
}
# Próbáljuk meg a /api/v1/branches végpontot (ha létezik)
try:
response = await client.post("/api/v1/branches",
json=branch_payload,
headers=headers)
if response.status_code in [200, 201]:
result = response.json()
print(f"✅ Branch sikeresen létrehozva!")
print(f" Branch ID: {result.get('id')}")
print(f" Név: {result.get('name')}")
print(f" Központi: {result.get('is_main')}")
return True
else:
print(f"⚠️ Branch végpont nem elérhető vagy hibás: {response.status_code}")
print(f" Hiba: {response.text}")
# Alternatív megoldás: direkt SQL vagy service hívás
print(" 🔄 Alternatív branch létrehozás...")
return await create_branch_via_service(org_id)
except Exception as e:
print(f"⚠️ Branch végpont hiba: {e}")
print(" 🔄 Alternatív branch létrehozás...")
return await create_branch_via_service(org_id)
async def create_branch_via_service(org_id):
"""Alternatív branch létrehozás service-en keresztül"""
try:
from app.services.fleet_service import FleetService
from app.db.session import AsyncSessionLocal
async with AsyncSessionLocal() as db:
branch_data = {
"organization_id": org_id,
"name": "Központi Telephely",
"is_main": True,
"postal_code": "1132",
"city": "Budapest",
"street_name": "Váci",
"street_type": "út",
"house_number": "47"
}
# Itt hívnánk meg a FleetService-t, de először ellenőrizzük, hogy létezik-e
print(" FleetService keresése...")
# Egyszerűbb: direkt adatbázis művelet
from app.models.marketplace.organization import Branch
from sqlalchemy import insert
branch_stmt = insert(Branch).values(
organization_id=org_id,
name="Központi Telephely",
is_main=True,
postal_code="1132",
city="Budapest",
street_name="Váci",
street_type="út",
house_number="47",
status="active"
)
await db.execute(branch_stmt)
await db.commit()
print(" ✅ Branch sikeresen létrehozva az adatbázisban!")
return True
except Exception as e:
print(f" ❌ Alternatív branch létrehozás sikertelen: {e}")
return False
async def verify_organizations(client, headers):
"""Szervezetek ellenőrzése User 55 számára"""
print("📋 Szervezetek listázása...")
try:
response = await client.get("/api/v1/organizations/my", headers=headers)
if response.status_code == 200:
orgs = response.json()
print(f"✅ Talált szervezetek: {len(orgs)} db")
# Ellenőrizzük, hogy pontosan 2 szervezet van
if len(orgs) == 2:
print("✅ SIKERES: Pontosan 2 szervezet található!")
# Listázzuk a szervezeteket
for i, org in enumerate(orgs, 1):
print(f"\n {i}. Szervezet:")
print(f" Név: {org.get('name')}")
print(f" Teljes név: {org.get('full_name')}")
print(f" Adószám: {org.get('tax_number')}")
print(f" Státusz: {org.get('status')}")
# Ellenőrizzük, hogy mindkét szervezet jelen van
org_names = [org.get('name') for org in orgs]
if "User Flotta" in org_names and "Test-Robot Kft." in org_names:
print("\n🎉 SIKERES: Mindkét szükséges szervezet megtalálható!")
return True
else:
print(f"\n⚠️ FIGYELMEZTETÉS: Nem minden szükséges szervezet található")
print(f" Talált szervezetek: {org_names}")
return False
else:
print(f"❌ HIBA: {len(orgs)} szervezet található, de 2-nek kellene lennie!")
print(f" Talált szervezetek:")
for org in orgs:
print(f" - {org.get('name')} ({org.get('tax_number')})")
return False
else:
print(f"❌ Hiba a szervezetek lekérdezésekor: {response.status_code}")
print(f" Hiba: {response.text}")
return False
except Exception as e:
print(f"❌ Kivétel a szervezetek ellenőrzésekor: {e}")
return False
async def main():
"""Fő futási logika"""
success = await test_business_onboarding()
print("\n" + "=" * 60)
if success:
print("✅ GROUND ZERO STEP 4 SIKERESEN BEFEJEZVE!")
print(" - Üzleti szervezet regisztrálva")
print(" - Branch létrehozva (ha szükséges)")
print(" - Szervezetek ellenőrizve")
return 0
else:
print("❌ GROUND ZERO STEP 4 SIKERTELEN!")
return 1
if __name__ == "__main__":
exit_code = asyncio.run(main())
sys.exit(exit_code)