# End-to-End Test Guide Dieses Dokument beschreibt, wie Sie das Email-Sortierer System vollständig testen können. ## Voraussetzungen Bevor Sie die Tests durchführen können, müssen Sie: 1. ✅ Alle Dependencies installiert haben (`npm install` in server/) 2. ✅ Eine `.env` Datei mit allen erforderlichen Credentials erstellt haben 3. ✅ Das Bootstrap-Script ausgeführt haben (`npm run bootstrap`) 4. ✅ Den Server gestartet haben (`npm start`) ## Automatisierter End-to-End Test Der automatisierte Test überprüft alle Backend-Komponenten: ```bash cd server npm test ``` ### Was wird getestet? 1. **Fragen laden** (Requirements 1.1, 2.4) - Lädt alle aktiven Fragen für das Produkt "email-sorter" - Verifiziert, dass Fragen korrekt nach Step und Order sortiert sind - Validiert Property 1: Question Loading 2. **Submission erstellen** (Requirements 2.2, 2.3) - Erstellt eine neue Submission mit Test-Antworten - Speichert Kundeninformationen (Email, Name) - Validiert Property 2: Submission Creation 3. **Antworten speichern** (Requirements 2.3) - Speichert alle Antworten in der Answers Collection - Verifiziert, dass Antworten korrekt abgerufen werden können 4. **Stripe Checkout Session** (Requirements 3.1, 3.2) - Erstellt eine Stripe Checkout Session - Verifiziert, dass eine gültige Checkout-URL zurückgegeben wird - Validiert Property 3: Payment Flow 5. **Webhook Konfiguration** (Requirements 3.4) - Überprüft, dass Webhook Secret konfiguriert ist - Validiert Property 4: Webhook Validation 6. **Payment Completion** (Requirements 3.3) - Simuliert erfolgreiche Bezahlung - Aktualisiert Submission Status auf "paid" - Erstellt Order-Record 7. **Kompletter Datenfluss** - Verifiziert, dass alle Daten korrekt gespeichert wurden - Überprüft Verknüpfungen zwischen Collections ### Erwartete Ausgabe ``` 🧪 Starting End-to-End Test Test 1: Loading questions from Appwrite... ✅ Product found: Email Sorter Setup (49.00 EUR) ✅ Loaded 13 questions ✅ Questions are properly ordered by step and order Test 2: Creating submission with test answers... ✅ Submission created with ID: [ID] Test 3: Saving answers to Appwrite... ✅ Answers saved with ID: [ID] ✅ Answers can be retrieved correctly Test 4: Creating Stripe checkout session... ✅ Stripe session created: [SESSION_ID] Checkout URL: https://checkout.stripe.com/... Test 5: Verifying webhook signature validation... ✅ Webhook secret is configured Test 6: Simulating payment completion... ✅ Submission status updated to "paid" ✅ Order record created with ID: [ID] Test 7: Verifying complete data flow... ✅ Data verification: - Submission status: paid - Answers records: 1 - Order records: 1 ✅ All tests passed! 📊 Test Summary: ✅ Questions loaded and ordered correctly ✅ Submission created successfully ✅ Answers saved and retrieved correctly ✅ Stripe checkout session created ✅ Webhook configuration verified ✅ Payment completion simulated ✅ Complete data flow verified 🎉 End-to-End test completed successfully! ``` ## Manueller Frontend Test Um das Frontend manuell zu testen: 1. **Server starten:** ```bash cd server npm start ``` 2. **Browser öffnen:** - Navigieren Sie zu http://localhost:3000 3. **Fragebogen ausfüllen:** - Schritt 1: Kontaktinformationen - Email: test@example.com - Name: Test User - Firma: Test Company - Schritt 2: Unternehmensgröße - Mitarbeiter: 1-10 - Email-Volumen: 100-500 - Schritt 3: Aktueller Anbieter - Provider: Gmail - Schritt 4: Probleme (Multiselect) - Wählen Sie: Spam, Organization - Schritt 5: Budget - Budget: 50-100 - Schritt 6: Timeline - Timeline: Sofort - Schritt 7: Gewünschte Features (Multiselect) - Wählen Sie: Auto-Sorting, Priority Inbox - Schritt 8: Integration - Integration: Ja - Schritt 9: Datenschutz - Datenschutz: Sehr wichtig - Schritt 10: Zusätzliche Informationen - Text: "Test submission" 4. **Zusammenfassung überprüfen:** - Alle Antworten sollten korrekt angezeigt werden - "Jetzt kaufen" Button sollte sichtbar sein 5. **Bezahlung testen:** - Klicken Sie auf "Jetzt kaufen" - Sie werden zu Stripe Checkout weitergeleitet - Verwenden Sie Test-Kreditkarte: `4242 4242 4242 4242` - Ablaufdatum: Beliebiges zukünftiges Datum - CVC: Beliebige 3 Ziffern 6. **Daten in Appwrite überprüfen:** - Öffnen Sie Ihr Appwrite Dashboard - Navigieren Sie zur EmailSorter Database - Überprüfen Sie die Collections: - **Submissions**: Sollte einen neuen Eintrag mit status "paid" haben - **Answers**: Sollte die gespeicherten Antworten enthalten - **Orders**: Sollte einen Order-Record haben ## Webhook Test Um den Stripe Webhook zu testen: 1. **Stripe CLI installieren:** ```bash stripe login ``` 2. **Webhook forwarding starten:** ```bash stripe listen --forward-to localhost:3000/stripe/webhook ``` 3. **Webhook Secret kopieren:** - Kopieren Sie das angezeigte Secret (whsec_...) - Fügen Sie es in Ihre `.env` als `STRIPE_WEBHOOK_SECRET` ein - Starten Sie den Server neu 4. **Test-Event senden:** ```bash stripe trigger checkout.session.completed ``` 5. **Logs überprüfen:** - Server-Logs sollten "Webhook received" zeigen - Appwrite sollte eine neue Order haben ## Validierung der Correctness Properties ### Property 1: Question Loading **Test:** Fragen werden korrekt geladen und sortiert - ✅ Automatischer Test verifiziert Sortierung nach step und order - ✅ Nur aktive Fragen werden zurückgegeben ### Property 2: Submission Creation **Test:** Submissions werden korrekt erstellt - ✅ Automatischer Test erstellt Submission mit allen Feldern - ✅ SubmissionId wird zurückgegeben ### Property 3: Payment Flow **Test:** Checkout-Flow funktioniert - ✅ Automatischer Test erstellt Stripe Session - ✅ Checkout URL wird generiert ### Property 4: Webhook Validation **Test:** Webhook-Signatur wird validiert - ✅ Server prüft Stripe-Signatur - ✅ Ungültige Signaturen werden mit 400 abgelehnt ## Fehlerbehebung ### Test schlägt fehl: "Missing required environment variable" - Überprüfen Sie, dass alle Variablen in `.env` gesetzt sind - Kopieren Sie `.env.example` zu `.env` und füllen Sie alle Werte aus ### Test schlägt fehl: "No active product found" - Führen Sie das Bootstrap-Script aus: `npm run bootstrap` - Überprüfen Sie, dass `APPWRITE_DATABASE_ID` korrekt gesetzt ist ### Test schlägt fehl: "Stripe error" - Überprüfen Sie, dass `STRIPE_SECRET_KEY` korrekt ist - Verwenden Sie einen Test-Key (sk_test_...) ### Frontend lädt keine Fragen - Öffnen Sie die Browser-Konsole (F12) - Überprüfen Sie auf Netzwerkfehler - Stellen Sie sicher, dass der Server läuft ### Webhook funktioniert nicht - Stellen Sie sicher, dass Stripe CLI läuft - Überprüfen Sie, dass `STRIPE_WEBHOOK_SECRET` korrekt ist - Überprüfen Sie Server-Logs auf Fehler ## Erfolgreiche Test-Checkliste - [ ] Automatischer E2E-Test läuft ohne Fehler durch - [ ] Frontend lädt alle 13 Fragen - [ ] Navigation zwischen Steps funktioniert - [ ] Validierung von Pflichtfeldern funktioniert - [ ] Zusammenfassung zeigt alle Antworten - [ ] Stripe Checkout wird korrekt erstellt - [ ] Submission wird in Appwrite gespeichert - [ ] Answers werden in Appwrite gespeichert - [ ] Webhook aktualisiert Submission Status - [ ] Order wird nach Bezahlung erstellt Wenn alle Punkte erfüllt sind, ist das System vollständig funktionsfähig! 🎉