- 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.
244 lines
7.6 KiB
Python
244 lines
7.6 KiB
Python
#!/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())
|