#!/usr/bin/env python3 """ Test: Können wir alle Felder einer Adresse auf null/leer setzen? ================================================================= Teste: 1. Können wir strasse, plz, ort, anschrift auf null setzen? 2. Können wir sie auf leere Strings setzen? 3. Was passiert mit der Adresse? """ import asyncio import sys import os from datetime import datetime sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) from services.advoware import AdvowareAPI TEST_BETNR = 104860 BOLD = '\033[1m' GREEN = '\033[92m' RED = '\033[91m' YELLOW = '\033[93m' BLUE = '\033[94m' RESET = '\033[0m' def print_success(text): print(f"{GREEN}✓ {text}{RESET}") def print_error(text): print(f"{RED}✗ {text}{RESET}") def print_info(text): print(f"{BLUE}ℹ {text}{RESET}") def print_section(title): print(f"\n{BOLD}{'='*70}{RESET}") print(f"{BOLD}{title}{RESET}") print(f"{BOLD}{'='*70}{RESET}\n") async def main(): print_section("TEST: Adresse nullen/leeren") api = AdvowareAPI() # Hole aktuelle Adressen print_info("Hole bestehende Adressen...") addresses = await api.api_call( f'/api/v1/advonet/Beteiligte/{TEST_BETNR}/Adressen', method='GET' ) print_info(f"Gefunden: {len(addresses)} Adressen\n") if len(addresses) == 0: print_error("Keine Adressen vorhanden - erstelle Testadresse erst") # Erstelle Testadresse new_addr = { "strasse": "Nulltest Straße 999", "plz": "99999", "ort": "Nullstadt", "land": "DE", "anschrift": "Test\nNulltest", "bemerkung": f"NULL-TEST: {datetime.now()}" } result = await api.api_call( f'/api/v1/advonet/Beteiligte/{TEST_BETNR}/Adressen', method='POST', json_data=new_addr ) print_success("Testadresse erstellt") addresses = await api.api_call( f'/api/v1/advonet/Beteiligte/{TEST_BETNR}/Adressen', method='GET' ) # Nimm die erste Adresse target = addresses[0] index = target['reihenfolgeIndex'] print_info(f"Verwende Adresse mit Index {index}:") print(f" Strasse: {target.get('strasse')}") print(f" PLZ: {target.get('plz')}") print(f" Ort: {target.get('ort')}") anschrift = target.get('anschrift') or '' print(f" Anschrift: {anschrift[:50] if anschrift else 'N/A'}...") # Test 1: Alle Felder auf null setzen print_section("Test 1: Alle änderbaren Felder auf null") null_data = { "strasse": None, "plz": None, "ort": None, "anschrift": None } print_info("Sende PUT mit null-Werten...") try: result = await api.api_call( f'/api/v1/advonet/Beteiligte/{TEST_BETNR}/Adressen/{index}', method='PUT', json_data=null_data ) print_success("PUT erfolgreich!") print(f"\nResponse:") print(f" strasse: {result.get('strasse')}") print(f" plz: {result.get('plz')}") print(f" ort: {result.get('ort')}") print(f" anschrift: {result.get('anschrift')}") if all(result.get(f) is None for f in ['strasse', 'plz', 'ort', 'anschrift']): print_success("\n✓ Alle Felder sind null!") elif all(result.get(f) == '' for f in ['strasse', 'plz', 'ort', 'anschrift']): print_success("\n✓ Alle Felder sind leere Strings!") else: print_error("\n✗ Felder haben immer noch Werte") except Exception as e: print_error(f"PUT fehlgeschlagen: {e}") # Test 2: Alle Felder auf leere Strings print_section("Test 2: Alle änderbaren Felder auf leere Strings") empty_data = { "strasse": "", "plz": "", "ort": "", "anschrift": "" } print_info("Sende PUT mit leeren Strings...") try: result = await api.api_call( f'/api/v1/advonet/Beteiligte/{TEST_BETNR}/Adressen/{index}', method='PUT', json_data=empty_data ) print_success("PUT erfolgreich!") print(f"\nResponse:") print(f" strasse: '{result.get('strasse')}'") print(f" plz: '{result.get('plz')}'") print(f" ort: '{result.get('ort')}'") print(f" anschrift: '{result.get('anschrift')}'") if all(result.get(f) == '' or result.get(f) is None for f in ['strasse', 'plz', 'ort', 'anschrift']): print_success("\n✓ Alle Felder sind leer!") else: print_error("\n✗ Felder haben immer noch Werte") except Exception as e: print_error(f"PUT fehlgeschlagen: {e}") # Test 3: GET und prüfen print_section("Test 3: Finale Prüfung via GET") final_addresses = await api.api_call( f'/api/v1/advonet/Beteiligte/{TEST_BETNR}/Adressen', method='GET' ) final_target = next((a for a in final_addresses if a['reihenfolgeIndex'] == index), None) if final_target: print_info("Finale Werte:") print(f" strasse: '{final_target.get('strasse')}'") print(f" plz: '{final_target.get('plz')}'") print(f" ort: '{final_target.get('ort')}'") print(f" land: '{final_target.get('land')}'") print(f" anschrift: '{final_target.get('anschrift')}'") print(f" bemerkung: '{final_target.get('bemerkung')}'") print(f" standardAnschrift: {final_target.get('standardAnschrift')}") # Prüfe ob Adresse "leer" ist is_empty = all( not final_target.get(f) for f in ['strasse', 'plz', 'ort', 'anschrift'] ) if is_empty: print_success("\n✓ Adresse ist komplett geleert!") print_info(" → Kann als Soft-Delete Alternative genutzt werden") else: print_error("\n✗ Adresse hat noch Daten") else: print_error("Adresse wurde gelöscht?!") # Test 4: Kann man eine komplett leere Adresse erstellen? print_section("Test 4: Neue leere Adresse erstellen (POST)") empty_new = { "strasse": "", "plz": "", "ort": "", "land": "DE", "anschrift": "", "bemerkung": f"LEER-TEST: {datetime.now()}" } print_info("Sende POST mit leeren Haupt-Feldern...") try: result = await api.api_call( f'/api/v1/advonet/Beteiligte/{TEST_BETNR}/Adressen', method='POST', json_data=empty_new ) if isinstance(result, list): result = result[0] print_success("POST erfolgreich!") print(f"\nErstellte Adresse:") print(f" Index: {result.get('reihenfolgeIndex')}") print(f" strasse: '{result.get('strasse')}'") print(f" plz: '{result.get('plz')}'") print(f" ort: '{result.get('ort')}'") print(f" anschrift: '{result.get('anschrift')}'") print_success("\n✓ Leere Adresse kann erstellt werden!") except Exception as e: print_error(f"POST fehlgeschlagen: {e}") print_info(" → Leere Adressen via POST nicht erlaubt") print_section("ZUSAMMENFASSUNG") print_info("Adresse nullen/leeren:") print(" 1. Via PUT auf null → Test zeigt Ergebnis") print(" 2. Via PUT auf '' → Test zeigt Ergebnis") print(" 3. Via POST leer → Test zeigt ob möglich") print("\n → Könnte als Soft-Delete Alternative dienen!") if __name__ == '__main__': asyncio.run(main())