introducing junction table extension
This commit is contained in:
132
custom/scripts/junctiontabletests/test_api_variations.py
Normal file
132
custom/scripts/junctiontabletests/test_api_variations.py
Normal file
@@ -0,0 +1,132 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Teste verschiedene API-Syntaxen für additionalColumns
|
||||
"""
|
||||
|
||||
import requests
|
||||
import json
|
||||
from datetime import datetime
|
||||
|
||||
BASE_URL = "https://crm.bitbylaw.com"
|
||||
API_KEY = "e53def10eea27b92a6cd00f40a3e09a4"
|
||||
HEADERS = {
|
||||
"X-Api-Key": API_KEY,
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
|
||||
def api_request(method, endpoint, data=None):
|
||||
url = f"{BASE_URL}/api/v1/{endpoint}"
|
||||
try:
|
||||
if method == "GET":
|
||||
response = requests.get(url, headers=HEADERS)
|
||||
elif method == "POST":
|
||||
response = requests.post(url, headers=HEADERS, json=data)
|
||||
elif method == "DELETE":
|
||||
response = requests.delete(url, headers=HEADERS)
|
||||
|
||||
return response
|
||||
except Exception as e:
|
||||
print(f" Exception: {e}")
|
||||
return None
|
||||
|
||||
print("\n" + "="*80)
|
||||
print(" "*20 + "API Syntax Variations Test")
|
||||
print("="*80 + "\n")
|
||||
|
||||
doc_id = None
|
||||
collection_id = None
|
||||
|
||||
try:
|
||||
# Erstelle Test-Entities
|
||||
print("Erstelle Test-Entities...")
|
||||
doc = api_request("POST", "CDokumente", {
|
||||
"name": f"Test Doc {datetime.now().strftime('%H:%M:%S')}"
|
||||
}).json()
|
||||
doc_id = doc['id']
|
||||
print(f" Doc: {doc_id}")
|
||||
|
||||
collection = api_request("POST", "CAICollections", {
|
||||
"name": f"Test Col {datetime.now().strftime('%H:%M:%S')}"
|
||||
}).json()
|
||||
collection_id = collection['id']
|
||||
print(f" Col: {collection_id}\n")
|
||||
|
||||
# Teste verschiedene Syntaxen
|
||||
variations = [
|
||||
{
|
||||
"name": "Variante 1: columns mit syncId",
|
||||
"data": {
|
||||
"id": collection_id,
|
||||
"columns": {
|
||||
"syncId": "TEST-SYNC-001"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Variante 2: Direkt syncId im Body",
|
||||
"data": {
|
||||
"id": collection_id,
|
||||
"syncId": "TEST-SYNC-002"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Variante 3: columns mit sync_id (Snake-Case)",
|
||||
"data": {
|
||||
"id": collection_id,
|
||||
"columns": {
|
||||
"sync_id": "TEST-SYNC-003"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Variante 4: additionalColumns",
|
||||
"data": {
|
||||
"id": collection_id,
|
||||
"additionalColumns": {
|
||||
"syncId": "TEST-SYNC-004"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
for i, variant in enumerate(variations, 1):
|
||||
print(f"{i}. {variant['name']}")
|
||||
|
||||
# Lösche vorherige Verknüpfung
|
||||
api_request("DELETE", f"CDokumente/{doc_id}/cAICollections", {"id": collection_id})
|
||||
|
||||
# Verknüpfe mit Variante
|
||||
response = api_request("POST", f"CDokumente/{doc_id}/cAICollections", variant['data'])
|
||||
print(f" Status: {response.status_code}")
|
||||
|
||||
if response.status_code == 200:
|
||||
# Prüfe Datenbank
|
||||
import subprocess
|
||||
db_check = subprocess.run([
|
||||
"docker", "exec", "espocrm-db", "mariadb",
|
||||
"-u", "espocrm", "-pdatabase_password", "espocrm",
|
||||
"-e", f"SELECT sync_id FROM c_a_i_collection_c_dokumente WHERE c_dokumente_id='{doc_id}' AND deleted=0;"
|
||||
], capture_output=True, text=True)
|
||||
|
||||
lines = db_check.stdout.strip().split('\n')
|
||||
if len(lines) > 1:
|
||||
sync_id_value = lines[1].strip()
|
||||
if sync_id_value and sync_id_value != "NULL":
|
||||
print(f" ✅ syncId in DB: {sync_id_value}")
|
||||
else:
|
||||
print(f" ❌ syncId ist NULL")
|
||||
else:
|
||||
print(f" ⚠️ Keine Zeile in DB")
|
||||
else:
|
||||
print(f" ❌ Request fehlgeschlagen: {response.text[:100]}")
|
||||
|
||||
print()
|
||||
|
||||
finally:
|
||||
print("Cleanup...")
|
||||
if doc_id:
|
||||
api_request("DELETE", f"CDokumente/{doc_id}")
|
||||
if collection_id:
|
||||
api_request("DELETE", f"CAICollections/{collection_id}")
|
||||
|
||||
print("="*80 + "\n")
|
||||
Reference in New Issue
Block a user