Files
motia/bitbylaw/scripts/test_adressen_nullen.py
bitbylaw c770f2c8ee feat: Implement address synchronization between EspoCRM and Advoware
- Add AdressenMapper for transforming addresses between EspoCRM and Advoware formats.
- Create AdressenSync class to handle address creation, update, and deletion synchronization.
- Introduce NotificationManager for managing manual intervention notifications in case of sync issues.
- Implement detailed logging for address sync operations and error handling.
- Ensure READ-ONLY field changes are detected and notified for manual resolution.
2026-02-08 14:29:29 +00:00

244 lines
7.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
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
"""
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())