Refactor code structure for improved readability and maintainability

This commit is contained in:
2026-03-09 23:07:05 +01:00
parent 3361cffb14
commit 2e9db78c6e
18 changed files with 2855 additions and 69 deletions

View File

@@ -0,0 +1,224 @@
# EspoCRM E2E Test Suite
Automatisierte End-to-End Tests für Custom EspoCRM Entities.
## Überblick
Das Test-Framework führt automatisiert folgende Tests durch:
### ✅ CRUD-Operationen
- **Create**: Erstellen von Testdatensätzen für alle Custom Entities
- **Read**: Validierung der erstellten Datensätze
- **Update**: Änderung von Feldern
- **Delete**: Löschen der Test-Daten
### 🔗 Relationship-Tests
- **Link**: Verknüpfung von Entities über Relationships
- **Unlink**: Entfernung von Verknüpfungen
- **Verification**: Prüfung der korrekten Verknüpfung
## Getestete Entities
1. **CMietobjekt** - Mietobjekte (Wohnungen, Häuser, etc.)
2. **CVmhMietverhältnis** - Mietverhältnisse
3. **CKündigung** - Kündigungen
4. **CBeteiligte** - Beteiligte Personen (Mieter, Vermieter)
5. **CMietinkasso** - Mietinkasso-Verfahren
6. **CVmhRäumungsklage** - Räumungsklagen
## Getestete Relationships
- CVmhMietverhältnis ↔ CMietobjekt
- CKündigung ↔ CVmhMietverhältnis
- CBeteiligte ↔ CVmhMietverhältnis (als Mieter/Vermieter)
## Installation
### Voraussetzungen
- Python 3.6+
- `requests` Bibliothek
```bash
pip3 install requests
```
## Verwendung
### Schnellstart
```bash
./run_e2e_tests.sh
```
### Direkte Python-Ausführung
```bash
python3 e2e_tests.py
```
## Konfiguration
Die Konfiguration erfolgt in [e2e_tests.py](e2e_tests.py#L20-L25):
```python
CONFIG = {
'base_url': 'https://crm.bitbylaw.com',
'api_key': '2b0747ca34d15032aa233ae043cc61bc',
'username': 'dev-test'
}
```
## Ausgabe
Das Framework generiert eine detaillierte Testübersicht:
```
================================================================================
TEST SUMMARY
================================================================================
✅ CMietobjekt: 4/4 tests passed
✓ create 0.234s
✓ read 0.123s
✓ update 0.156s
✓ delete 0.089s
✅ CVmhMietverhltnis: 4/4 tests passed
✓ create 0.267s
✓ read 0.134s
✓ update 0.178s
✓ delete 0.092s
================================================================================
Total: 24/24 tests passed (0 failed)
Time: 3.45s
================================================================================
```
## Architektur
### Komponenten
#### 1. **espocrm_api_client.py**
API-Client für EspoCRM REST API mit folgenden Features:
- CRUD-Operationen (Create, Read, Update, Delete)
- Relationship-Management (Link, Unlink)
- Fehlerbehandlung und Logging
#### 2. **e2e_tests.py**
Haupttest-Framework mit:
- `EntityTestBase`: Basis-Klasse für Entity-Tests
- Spezifische Test-Klassen für jede Entity
- `TestTracker`: Ergebnis-Tracking und Reporting
- Automatisches Cleanup
#### 3. **run_e2e_tests.sh**
Shell-Wrapper mit:
- Dependency-Checks
- Farbiger Ausgabe
- Exit-Code-Handling
## Erweiterung
### Neue Entity hinzufügen
1. Neue Test-Klasse erstellen:
```python
class CMyEntityTest(EntityTestBase):
def __init__(self, client: EspoCRMAPIClient, tracker: TestTracker):
super().__init__(client, tracker)
self.entity_type = 'CMyEntity'
def run_full_test(self) -> Optional[str]:
# Create
data = {
'name': f'Test Entity {datetime.now().strftime("%Y%m%d_%H%M%S")}',
# ... weitere Felder
}
record_id = self.test_create(data)
if not record_id:
return None
# Read
self.test_read(record_id)
# Update
self.test_update(record_id, {'field': 'new_value'})
return record_id
```
2. Test in `run_all_tests()` einbinden:
```python
print("\n🔷 Testing CMyEntity...")
myentity_test = CMyEntityTest(client, tracker)
myentity_id = myentity_test.run_full_test()
```
3. Cleanup-Order anpassen falls Dependencies bestehen
### Neue Relationships testen
```python
# Link testen
entity_test.test_link(
record_id='123',
link_name='relationshipName',
foreign_id='456'
)
# Unlink testen
entity_test.test_unlink(
record_id='123',
link_name='relationshipName',
foreign_id='456'
)
```
## Fehlerbehebung
### Connection Fehler
```
❌ Connection failed: HTTPError 401
```
→ API-Key oder Username prüfen
### Entity nicht gefunden
```
❌ API Error: POST https://crm.bitbylaw.com/api/v1/CMyEntity
Status: 404
```
→ Entity-Name prüfen (z.B. `CKndigung` statt `CKuendigung`)
### Relationship nicht gefunden
```
AssertionError: Link not found: xyz123
```
→ Relationship-Name und Richtung prüfen
## Best Practices
1. **Immer cleanup durchführen**: Tests hinterlassen keine Datenreste
2. **Eindeutige Namen**: Timestamps in Test-Daten-Namen
3. **Dependencies beachten**: Lösch-Reihenfolge ist wichtig
4. **Fehlerbehandlung**: Jeder Test ist isoliert
## Weitere Informationen
- [EspoCRM REST API Dokumentation](https://docs.espocrm.com/development/api/)
- [Projektübersicht](KI_OVERVIEW_README.md)
- [Validierungs-Tools](VALIDATION_TOOLS.md)
## Support
Bei Fragen oder Problemen:
1. Logs prüfen: Test-Ausgabe enthält detaillierte Fehlermeldungen
2. API-Dokumentation konsultieren
3. Entity-Definitionen in `custom/Espo/Custom/Resources/metadata/entityDefs/` prüfen