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:
2026-02-08 23:05:56 +00:00
parent a157d3fa1d
commit 7856dd1d68
37 changed files with 438 additions and 271 deletions

View 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())