| AK-1 | /projektpartnerportal/registrieren * | Wizard öffnen, Seite 1 → 2 → 3 durchklicken, „Zurück" nutzen | Drei Seiten (Kontakt&Unterlagen / Verfügbarkeit / Qualifikation), Progress-Anzeige, Vor/Zurück erhält bereits eingegebene Werte |
| AK-2 | /projektpartnerportal/registrieren * | (a) Passwort ≠ Wiederholung absenden — (b) Consent-Checkboxen leer lassen — (c) korrekt ausfüllen | (a) Match-Validierungsfehler — (b) Submit blockiert mit Pflicht-Hinweis Datenschutz + Nutzungserklärung — (c) Seite 1 akzeptiert |
| AK-3 | /projektpartnerportal/registrieren * + ddev drush user:information <mail> | Vollständige Registrierung abschließen | User + projektpartner-Profil + Rolle projektpartner angelegt; Account-Status gesperrt (blocked) bis Verifizierung; Consent mit Timestamp+Version gespeichert |
| AK-4 | Test-Mailbox + Verifizierungs-Link | Verifizierungs-Mail öffnen, Aktivierungs-Link klicken | Mail im SOLCOM-Layout eingegangen; Klick aktiviert Account (Status aktiv); Willkommens-Mail folgt |
| AK-5 | /user/login | (a) Login mit E-Mail + korrektem Passwort — (b) mit falschem Passwort | (a) eingeloggt, Weiterleitung in den Account-Bereich — (b) verständliche Fehlermeldung; Standard-Login der Redakteure bleibt funktionsfähig |
| AK-6 | /user/password | „Passwort vergessen" mit registrierter E-Mail auslösen, Reset-Link klicken | Reset-Mail via easy_email-Template eingegangen; Link führt zum Passwort-Setzen; neues Passwort funktioniert |
| AK-7 | /projektpartnerportal/registrieren * (DevTools) | (a) bereits existierende E-Mail registrieren — (b) Honeypot-Feld via Console füllen + sofort absenden | (a) Fehler „E-Mail bereits vergeben", kein zweiter Account — (b) Submit schein-erfolgreich, aber kein User/Profil angelegt |
| AK-8 | /user/{uid}/projektpartner | Als eingeloggter Partner alle Feldgruppen bearbeiten + speichern | Person/Kontakt/Verfügbarkeit/Qualifikation editierbar; Zeichenlimits (Anschreiben ≤2000, Schwerpunkte ≤500) greifen; Änderungen persistiert |
| AK-9 | Upload eines Dokuments + direkter File-URL private://ppp/<uid>/<file> | (a) als Eigentümer abrufen — (b) als anderer eingeloggter Partner abrufen — (c) anonym abrufen | (a) Datei wird ausgeliefert — (b) HTTP 403 — (c) HTTP 403; kein öffentlicher Pfad existiert |
| AK-10 | /user/{uid_fremd}/projektpartner | Als Partner A das Profil von Partner B aufrufen | HTTP 403 — kein Lese-/Schreibzugriff auf fremde Profile |
| AK-11 | Account-Bereich → Löschen * + ddev exec ls private://ppp/<uid>/ + DB-Check | Löschung mit Bestätigungs-Schritt anstoßen | User-Account + projektpartner-Profil + alle privaten Dateien + Verzeichnis unwiderruflich entfernt; danach keine PII des Partners mehr auffindbar |
| AK-12 | /user/{uid}/edit als Redakteur (Rolle content_editor) | Eigenes Account-Formular öffnen | Unverändertes Standard-Drupal-Benutzerformular; keine projektpartner-Profilfelder; Registrierungs-Wizard für Redakteure nicht erreichbar |
| AK-13 | ddev drush migrate:import solcom_projektpartner_user,solcom_projektpartner_profile | Migration gegen Dump-DB ausführen | User + projektpartner-Profil je Bestandspartner angelegt; field_ppp_id gesetzt; DC2Type:array-Felder (Sprachen) korrekt deserialisiert |
| AK-14 | ddev exec ls private://ppp/<uid>/ nach Migration | Datei-Migration prüfen | Bestands-Dokumente (aus userfile ⋈ persistentresource) im privaten Stream, dem richtigen Partner zugeordnet |
| AK-15 | /user/login als migrierter Partner | Erstes Login eines migrierten Accounts | Erzwungener Passwort-Reset (Alt-Passwörter nicht migriert); nach Reset normaler Zugang |
| AK-16 | ddev drush migrate:import … --update + migrate:rollback + Trockenlauf | Migration zweimal laufen lassen, rollback testen | Idempotent (keine Duplikate via field_ppp_id); Rollback entfernt sauber; Trockenlauf-/Validierungsbericht liegt vor |
| AK-17 | Account-Bereich → Suchagent * + ddev drush cron + Test-Mailbox | Suchkriterien (Skills + Regionen) anlegen; neues passendes project_offer publizieren; Cron | Benachrichtigungs-Mail bei passendem Projekt; keine Mail bei nicht passendem |
| AK-18 | ddev drush migrate:import solcom_projektpartner_alert | Alert-Migration ausführen | Migrierte Suchagenten aktiv; Kriterien-Vokabular auf field_skills gemappt; pro Partner ein Alert |
| AK-19 | /projektportal/merkliste + Projektliste (anonym, dann eingeloggt) | (a) Anonym Projekt merken → Browser-Tab wechseln. (b) Einloggen mit lokal gemerkten Projekten. (c) Auf zweitem Gerät/Browser einloggen. | (a) localStorage-Merkliste bleibt (Bestandsverhalten). (b) Lokale Einträge werden in die persistente Merkliste des Partners übernommen. (c) Gemerkte Projekte sind geräteübergreifend da, ohne 5er-Limit |
| AK-20 | /user/{uid}/projektpartner + Test-Mailbox (SF-Sync-Empfänger) | (a) Ein Profilfeld ändern + speichern. (b) Formular erneut speichern ohne Änderung. | (a) Genau eine Diff-Mail an das konfigurierte SOLCOM-Postfach mit nur den geänderten Feldern (alt → neu); Queue-Item erzeugt und nach Cron-Run verarbeitet. (b) Keine Mail, kein Queue-Item |
| AK-21 | ddev exec ./vendor/bin/phpunit --testsuite functional-javascript (oder Modul-Pfad) | Frontend-Test-Suite gegen Chromedriver in DDEV laufen | Chromedriver-Service via .ddev/docker-compose.testing.yaml aktiv; Wizard-FunctionalJavascript-Test (Mehrschritt-Navigation, Passwort-Match, Upload, Honeypot) grün; Smoke-Tests für contact_form / newsletter_signup / vacancy_application grün |