#!/usr/bin/env python3 """ MVP funkciók tesztelése - API szintű tesztek """ import sys import json import requests from typing import Dict, Any, Optional BASE_URL = "http://192.168.100.10:8000/api/v1" HEADERS = {"Content-Type": "application/json"} def print_response(response: requests.Response, description: str): """Helper to print response details""" print(f"\n=== {description} ===") print(f"Status: {response.status_code}") try: print(f"Body: {response.json()}") except: print(f"Body (text): {response.text}") def login(username: str, password: str) -> Optional[str]: """Bejelentkezés és token lekérése""" url = f"{BASE_URL}/auth/login" payload = { "username": username, "password": password } try: response = requests.post(url, json=payload, headers=HEADERS, timeout=10) print_response(response, "Login") if response.status_code == 200: data = response.json() token = data.get("access_token") if token: print(f"Token received: {token[:20]}...") return token return None except requests.exceptions.ConnectionError as e: print(f"Connection error: {e}") return None except Exception as e: print(f"Login error: {e}") return None def test_vehicle_creation(token: str) -> Optional[str]: """Jármű rögzítése""" url = f"{BASE_URL}/assets/vehicles" headers = HEADERS.copy() headers["Authorization"] = f"Bearer {token}" payload = { "plate_number": "ABC-123", "vin": "1HGCM82633A123456", "make": "Honda", "model": "Accord", "year": 2020 } response = requests.post(url, json=payload, headers=headers, timeout=10) print_response(response, "Vehicle Creation") if response.status_code in (200, 201): data = response.json() asset_id = data.get("asset_id") if asset_id: print(f"Vehicle created with asset_id: {asset_id}") return asset_id return None def test_expense_creation(token: str, asset_id: str): """Jármű költség rögzítése""" url = f"{BASE_URL}/expenses/" headers = HEADERS.copy() headers["Authorization"] = f"Bearer {token}" payload = { "asset_id": asset_id, "cost_type": "fuel", "amount": 15000, "currency": "HUF", "odometer": 50000, "description": "Tankolás" } response = requests.post(url, json=payload, headers=headers, timeout=10) print_response(response, "Expense Creation") def test_service_search(token: str): """Szervizpont keresés""" url = f"{BASE_URL}/services/search" headers = HEADERS.copy() headers["Authorization"] = f"Bearer {token}" params = {"query": "autószerviz"} response = requests.get(url, params=params, headers=headers, timeout=10) print_response(response, "Service Search") def test_gamification_stats(token: str): """Gamification státusz lekérése""" url = f"{BASE_URL}/gamification/my-stats" headers = HEADERS.copy() headers["Authorization"] = f"Bearer {token}" response = requests.get(url, headers=headers, timeout=10) print_response(response, "Gamification Stats") def test_wallet_balance(token: str): """Wallet egyenleg lekérése""" url = f"{BASE_URL}/users/me" headers = HEADERS.copy() headers["Authorization"] = f"Bearer {token}" response = requests.get(url, headers=headers, timeout=10) print_response(response, "User Wallet Balance") def main(): print("=== MVP Funkciók Tesztelése ===") # 1. Bejelentkezés print("\n1. Bejelentkezés...") # Próbáljuk a korábban regisztrált tesztfelhasználót token = login("test@profibot.hu", "test123") if not token: print("First login attempt failed, trying testuser@example.com") token = login("testuser@example.com", "TestPass123!") if not token: print("ERROR: Could not obtain access token. Exiting.") sys.exit(1) # Frissítjük a headers-t a token-nel HEADERS["Authorization"] = f"Bearer {token}" # 2. Jármű rögzítése print("\n2. Jármű rögzítése...") asset_id = test_vehicle_creation(token) if asset_id: # 3. Jármű költség rögzítése print("\n3. Jármű költség rögzítése...") test_expense_creation(token, asset_id) else: print("Skipping expense creation - no asset_id") # 4. Szervizpont keresés print("\n4. Szervizpont keresés...") test_service_search(token) # 5. Gamification státusz print("\n5. Gamification státusz lekérése...") test_gamification_stats(token) # 6. Wallet egyenleg print("\n6. Wallet egyenleg lekérése...") test_wallet_balance(token) print("\n=== Tesztelés befejezve ===") if __name__ == "__main__": main()