| AK-1 | https://solcom.ddev.site/karriere/junior-sales-manager-vertrieb-2635453 | Vacancy-Detail-Seite öffnen, Apply-CTA visuell prüfen, Click | Apply-CTA (Button oder sticky-apply-bar) sichtbar, Click navigiert auf /karriere/junior-sales-manager-vertrieb-2635453/bewerben (interne Sub-Route, kein Personio-Redirect) |
| AK-2 | /karriere/junior-sales-manager-vertrieb-2635453/bewerben | Bewerbungsseite öffnen, Header und Form-Styling prüfen | Stellentitel sichtbar im Header, Webform vacancy_application rendert in byte_theme-Branding (Lime-Akzent, Montserrat-Headlines, ScalaSans-Body) |
| AK-3 | /karriere/.../bewerben vs. https://karriere.solcom.de/de/jetzt-bewerben/bewerbung_2602671-1 | Felder-Inventur visuell vergleichen (Side-by-Side via agent-browser) | Identische Felder, identische Pflicht-Markierungen, identische Reihenfolge gegenüber Referenz-Form |
| AK-4 | /karriere/.../bewerben | (a) PDF mit 11 MB hochladen — (b) JPG hochladen — (c) PDF mit 5 MB hochladen — (d) Submit ohne CV | (a) Validation-Error Filesize — (b) Validation-Error Filetype — (c) Upload akzeptiert — (d) Submit-Block mit CV-Pflicht-Hint |
| AK-5 | /karriere/.../bewerben | Datenschutz-Checkbox-Wording und Link visuell prüfen, Submit ohne Checkbox versuchen | Wording und Layout 1:1 zur Referenz-Form, Link führt auf /datenschutz, Submit ohne Checkbox wird durch Webform-Validation blockiert |
| AK-6 | /karriere/.../bewerben + ddev drush queue:list + ddev exec ls private://applications/ | Gültige Submission abgeben mit Test-CV | Navigation auf /karriere/.../bewerben/danke mit expliziter Erwähnung der folgenden Personio-Bestätigungsmail; Queue-Item in solcom_personio_application_queue sichtbar (Payload nur {submission_id}); Files-Verzeichnis private://applications/<submission-uuid>/ existiert mit hochgeladenen Dateien |
| AK-7 | /karriere/.../bewerben (DevTools) | Honeypot-Hidden-Field via DevTools-Console füllen, Submit innerhalb 3 Sekunden | HTTP 200, Form schein-erfolgreich, aber keine Submission persistiert, kein Queue-Item erzeugt |
| AK-8 | ddev drush queue:run solcom_personio_application_queue (gegen Personio-Sandbox/Mock-Mode) + DB-/Watchdog-Prüfung | Worker-Lauf manuell triggern mit einer pending Submission | Client lädt vorhandene Files via POST /v1/recruiting/applications/documents hoch und setzt danach POST /v1/recruiting/applications als JSON ab; bei 2xx wird eine optional gelieferte personio_application_id auditierbar gemacht und die Submission GDPR-gepurged; Queue-Item ist verschwunden |
| AK-9 | ddev drush queue:run solcom_personio_application_queue + DB-Prüfung retry_count/status + ddev drush queue:list | Mock-Endpoint nacheinander auf (a) 500 (b) 429 mit Retry-After: 120 (c) 400 stellen, Worker je triggern | (a) Item bleibt mit erhöhtem retry_count in Queue, nächster Lauf erst nach Backoff-Delay (DelayedRequeueException, kein Sofort-Re-Run) — (b) Item-Re-Run respektiert 120 s — (c) Item sofort dlq_persistent, retry_count nicht weiter erhöht, kein Retry-Burn |
| AK-10 | ddev drush queue:run 2× auf dieselbe Submission (Timeout-Simulation) + HTTP-Request-Inspection | Ersten POST künstlich timeouten lassen (Response verworfen), Item bleibt in Queue, zweiten Lauf auslösen | Beide POSTs tragen identischen Idempotency-Key (= tracking_hash); Personio-Dedup muss separat mit Recruiting geklärt werden, weil kein API-Read-back verfügbar ist |
| AK-11 | Test-Mailbox hr@solcom.test + DB-Prüfung Submission-Status | (a) Nach 5×-5xx-Erschöpfung — (b) nach sofort-4xx Test-Inbox und Submission-State prüfen | In beiden Fällen HR-Notification-Mail mit Submission-Details + Files-Pfad eingegangen; Submission-Status dlq_persistent, Files in private://applications/<uuid>/ bleiben bestehen |
| AK-12 | DLQ-View (Pfad aus webform_views-Config, z. B. /admin/karriere/dlq) | (a) Als User mit HR-Rolle öffnen — (b) Als anonymer User öffnen — (c) Re-Queue-VBO-Action auf failed-Submission auslösen | (a) View listet dlq_persistent-Submissions mit File-Download-Feld + VBO-Bulk-Actions — (b) HTTP 403 — (c) Action läuft über POST + CSRF (kein GET-Side-effect), Submission wandert zurück in Queue, Status zurück auf pending |
| AK-13 | DB-Prüfung Submission-Storage + ddev exec ls private://applications/<uuid>/ + ddev drush watchdog:show --type=solcom_vacancy_application nach 2xx | Submission nach erfolgreichem POST (2xx) prüfen | Submission-Entity gelöscht, Files-Verzeichnis entfernt (file_usage-Cleanup), Watchdog-Eintrag vorhanden und PII-frei (nur tracking_hash + application_id + Timestamp, kein Name/Email/Anhang) |
| AK-14 | ddev drush key:list + grep -r personio config/sync/ | (a) Key-Existenz prüfen — (b) config/sync nach Klartext-Credentials durchsuchen | (a) solcom_personio_api_key mit Provider env vorhanden und personio_company_id in Modul-Config gesetzt — (b) kein Treffer mit Klartext-Credential in config/sync/ |
| AK-15 | ddev exec ./vendor/bin/phpunit -c phpunit.xml web/modules/custom/solcom_vacancy_application/tests/ | Test-Suite laufen | Alle Kernel-Tests grün (PersonioApplicationClient inkl. Field-Mapping, Idempotency-Key-Bildung, Status-Klassifizierung gegen Mock-HTTP-Client; File-Handling; GDPR-Purge); alle Functional-Tests grün (VacancyApplicationFormController, DLQ-View-Access 403). Kein Live-API-Call im Test-Lauf |
| AK-16 | ddev drush solcom:personio:smoke-test | Command gegen Dummy-Stelle 2635453 laufen lassen, anschließend im Personio-Recruiting-Backend prüfen | Command meldet erfolgreichen Submit → Queue → POST mit 2xx und Drupal-GDPR-Purge; Test-Application mit Email test+<timestamp>@solcom.de ist im Personio-Recruiting-Backend zu prüfen und dort zu löschen |
| AK-17 | docs/context/ (AVV-Snapshot-Pfad zu definieren via solcom-docs-ingestion) | HR/Legal-Fakten-Check vor Implementation-Start | AVV-Dokument liegt versioniert in docs/context/, im Story-Hub als Dependency referenziert, Status bestätigt durch HR/Legal-Reviewer |