Workers P3-Endprüfung W2: Kopieren & öffnen meldet ein gescheitertes Kopieren ehrlich

copyTextChecked erfüllt nur, wenn der Text wirklich in der Zwischenablage liegt (Clipboard-API,
sonst Notweg mit document.execCommand, dessen Rückgabewert jetzt geprüft wird; das Textfeld wird
immer entfernt). copyText bleibt für die Kundenansicht die verschluckende Hülle. Das Pult nimmt
die strenge Fassung, sodass die Zeile statt "Kopiert und geöffnet." den Hinweis zum Kopieren
von Hand zeigt. Die Reihenfolge Kopieren vor Öffnen bleibt (Nutzer-Geste).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-10-18 10:41:24 +00:00
1 parent 2b2b45a0c7
commit f6099938d8
4 files changed
+202 -12

No files matched your search

+2 -2
View File
@@ -34,7 +34,7 @@ test('PultList: Aktionen über pultAction, "Als gesendet" sendet den bearbeitete
assert.match(s, /api\.pultAction\(row\.id, 'claim'\)/); assert.match(s, /api\.pultAction\(row\.id, 'sent', \{ text \}\)/)
assert.match(s, /api\.pultAction\(row\.id, 'discard', \{\}\)/); assert.match(s, /api\.pultAction\(row\.id, 'done'\)/)
// Kopieren & öffnen: Text ist der Inhalt des Textfelds (nicht row.copyText), das Öffnen geschieht ohne Referrer und ohne Rückbezug
assert.match(s, /copyAndOpen\(\{ text, url: row\.sourceHref, copy: copyText, open: openTab \}\)/)
assert.match(s, /copyAndOpen\(\{ text, url: row\.sourceHref, copy: copyTextChecked, open: openTab \}\)/)
assert.match(s, /window\.open\(url, '_blank', 'noopener,noreferrer'\)/)
assert.match(s, /Wirklich verwerfen\?/); assert.match(s, /CONFIRM_MS = 4000/)
for (const t of ['Kopieren & öffnen', 'Ich kümmere mich', 'Als gesendet markieren', 'Verwerfen', 'Erledigt', 'Originalanfrage', 'Nichts wartet auf dich', 'Details']) assert.ok(s.includes(t), t)
@@ -277,7 +277,7 @@ test('usePultFeed: nach dem Abbau setzt eine späte Antwort nichts mehr', async
const STUBS = {
usePultFeed: 'export function usePultFeed() { return globalThis.__pultFeed }',
useEmployees: 'export function useEmployees() { return { employees: globalThis.__pultEmployees ?? [] } }',
CopyableCredential: 'export async function copyText() {}',
CopyableCredential: 'export async function copyTextChecked() {}',
}
async function loadList() {