Files
motia/bitbylaw/scripts/adressen_sync/test_find_hauptadresse.py
bitbylaw 7856dd1d68 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.
2026-02-08 23:05:56 +00:00

190 lines
5.8 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: Finde "Test 6667426" Adresse in API
====================================
User sagt: In Advoware wird "Test 6667426" als Hauptadresse angezeigt
Ziel: API-Response dieser Adresse analysieren
"""
import asyncio
import json
import sys
import os
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
from services.advoware import AdvowareAPI
# Farben für Output
GREEN = '\033[92m'
RED = '\033[91m'
YELLOW = '\033[93m'
BLUE = '\033[94m'
BOLD = '\033[1m'
RESET = '\033[0m'
BETNR = 104860
class SimpleLogger:
def info(self, msg): pass
def error(self, msg): pass
def warning(self, msg): pass
def debug(self, msg): pass
class SimpleContext:
def __init__(self):
self.logger = SimpleLogger()
def print_section(title):
print(f"\n{BLUE}{BOLD}{'='*70}{RESET}")
print(f"{BLUE}{BOLD}{title}{RESET}")
print(f"{BLUE}{BOLD}{'='*70}{RESET}\n")
def print_success(msg):
print(f"{GREEN}{msg}{RESET}")
def print_error(msg):
print(f"{RED}{msg}{RESET}")
def print_info(msg):
print(f"{YELLOW} {msg}{RESET}")
async def main():
print_section("Suche 'Test 6667426' Adresse in API")
# Initialize API
context = SimpleContext()
api = AdvowareAPI(context=context)
# Hole alle Adressen
adressen = await api.api_call(
f'/api/v1/advonet/Beteiligte/{BETNR}/Adressen',
method='GET'
)
if not adressen:
print_error("Keine Adressen gefunden!")
return
print_info(f"Gefunden: {len(adressen)} Adressen")
# Suche nach "Test 6667426"
target_addr = None
for addr in adressen:
strasse = addr.get('strasse', '') or ''
anschrift = addr.get('anschrift', '') or ''
if '6667426' in strasse or '6667426' in anschrift:
target_addr = addr
break
if not target_addr:
print_error("Adresse 'Test 6667426' NICHT gefunden!")
print_info("Suche nach 'Test' in Adress-Feldern...")
# Zeige alle Adressen mit "Test"
test_adressen = []
for addr in adressen:
strasse = addr.get('strasse', '')
if 'Test' in strasse:
test_adressen.append(addr)
if test_adressen:
print_info(f"Gefunden: {len(test_adressen)} Adressen mit 'Test':")
for addr in test_adressen:
print(f" - Index: {addr.get('reihenfolgeIndex')}, "
f"Strasse: {addr.get('strasse')}, "
f"standardAnschrift: {addr.get('standardAnschrift')}")
return
# Zeige vollständige Adresse
print_section("GEFUNDEN: Test 6667426")
print(f"{BOLD}Vollständiger API-Response:{RESET}")
print(json.dumps(target_addr, indent=2, ensure_ascii=False))
# Analysiere wichtige Felder
print_section("Wichtige Felder")
wichtige_felder = [
'id',
'rowId',
'reihenfolgeIndex',
'strasse',
'plz',
'ort',
'anschrift',
'standardAnschrift', # ← Das ist der Key!
'bemerkung',
'gueltigVon',
'gueltigBis'
]
for feld in wichtige_felder:
wert = target_addr.get(feld)
# Highlight standardAnschrift
if feld == 'standardAnschrift':
if wert:
print(f" {GREEN}{BOLD}{feld}: {wert}{RESET} ← HAUPTADRESSE!")
else:
print(f" {RED}{BOLD}{feld}: {wert}{RESET} ← NICHT Hauptadresse!")
else:
print(f" {feld}: {wert}")
# Vergleiche mit anderen Adressen
print_section("Vergleich mit anderen Adressen")
hauptadressen = [a for a in adressen if a.get('standardAnschrift')]
print_info(f"Anzahl Adressen mit standardAnschrift=true: {len(hauptadressen)}")
if len(hauptadressen) == 0:
print_error("KEINE einzige Adresse hat standardAnschrift=true!")
print_info("Aber Advoware zeigt trotzdem eine als 'Haupt' an?")
elif len(hauptadressen) == 1:
if hauptadressen[0] == target_addr:
print_success("Test 6667426 ist die EINZIGE Hauptadresse!")
else:
print_error("Test 6667426 ist NICHT die Hauptadresse!")
print_info(f"Hauptadresse ist: {hauptadressen[0].get('strasse')}")
else:
print_error(f"MEHRERE Hauptadressen ({len(hauptadressen)})!")
for ha in hauptadressen:
marker = " ← Das ist Test 6667426!" if ha == target_addr else ""
print(f" - Index {ha.get('reihenfolgeIndex')}: {ha.get('strasse')}{marker}")
# Prüfe ob es die neueste ist
print_section("Position/Reihenfolge")
max_index = max(a.get('reihenfolgeIndex', 0) for a in adressen)
target_index = target_addr.get('reihenfolgeIndex')
print_info(f"Test 6667426 hat Index: {target_index}")
print_info(f"Höchster Index: {max_index}")
if target_index == max_index:
print_success("Test 6667426 ist die NEUESTE Adresse (höchster Index)!")
else:
print_error(f"Test 6667426 ist NICHT die neueste (Differenz: {max_index - target_index})")
# Sortierung nach Index
sorted_adressen = sorted(adressen, key=lambda a: a.get('reihenfolgeIndex', 0))
print_info(f"\nAlle Adressen sortiert nach reihenfolgeIndex:")
for i, addr in enumerate(sorted_adressen[-10:]): # Zeige letzte 10
idx = addr.get('reihenfolgeIndex')
strasse = addr.get('strasse', '')[:40]
standard = addr.get('standardAnschrift')
marker = ""
if addr == target_addr:
marker = f" {GREEN}← Test 6667426{RESET}"
standard_marker = f"{GREEN}[HAUPT]{RESET}" if standard else ""
print(f" {idx:3d}: {strasse:40s} {standard_marker}{marker}")
if __name__ == '__main__':
asyncio.run(main())