Add tests for Kommunikation Sync implementation and verification scripts
- Implemented comprehensive tests for the Kommunikation Sync functionality, covering base64 encoding, marker parsing, creation, type detection, and integration scenarios. - Added a verification script to check for unique IDs in Advoware communications, ensuring stability and integrity of the IDs. - Created utility scripts for code validation, notification testing, and PUT response detail analysis to enhance development and testing processes. - Updated README with details on new tools and their usage.
This commit is contained in:
243
bitbylaw/scripts/adressen_sync/test_adressen_nullen.py
Normal file
243
bitbylaw/scripts/adressen_sync/test_adressen_nullen.py
Normal file
@@ -0,0 +1,243 @@
|
||||
#!/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())
|
||||
Reference in New Issue
Block a user