Files
MindSift/e2e
sandrodachandClaude Opus 5.5 aa397c18cd
MindSift CI & Docker Release / Build, Test in Container & Push (push) Successful in 1m21s
feat(notes): show block locks and presence, conflict copies with accept/discard, undo/redo
Phase 3 of the collaboration plan:
- Blocks held by someone else show a lock with the name and are read-only;
  Enter in such a block adds a new block below. Delete, merge, indent and
  drag are not started when a involved block (or one in its branch) is
  locked; a short notice explains why (fixes FLAW-25).
- Presence: the editor header lists who else has the note open.
- Conflict copies are highlighted ("Konflikt – Version von …") with
  Übernehmen (replaces the original or the title) and Verwerfen. Both check
  the locks of the original and of the copy first.
- Undo/redo of own changes (Ctrl/Cmd+Z, Ctrl+Shift+Z, Ctrl+Y, beforeinput
  history events): typing is grouped per block until a 1 s pause, up to 200
  steps per tab; a step is skipped with a notice if someone else changed or
  holds the block meanwhile. New clearConflict props patch on the server.
- New blocks get focus synchronously on mount (fixes FLAW-26).
- Fix: after reopening a note from local storage the engine polled every
  30 s instead of 3 s until the next change, because the delay was decided
  before the first response told it the note is shared.
- Tests: undo/conflict engine tests, lock/undo/conflict UI tests and
  e2e/lock.e2e.mjs (two browsers); all three browser tests pass against a
  freshly built image.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 13:44:27 +01:00
..

Ende-zu-Ende-Tests

Browser-Tests mit Playwright gegen einen echten MindSift-Server.

e2e/run.sh            # baut das Image, startet es im Demo-Modus und führt die Tests aus
ENGINE=docker e2e/run.sh

Gegen einen bereits laufenden Server (Demo-Modus mit admin/admin und user/user nötig):

cd e2e && npm install && MINDSIFT_URL=http://localhost:8080 node collab.e2e.mjs

collab.e2e.mjs

Zwei Browser (Eigentümer und Bearbeiter) arbeiten in derselben Notiz. Geprüft wird:

  • Tippen wird gespeichert und erscheint beim anderen ohne Neuladen
  • neue Bullets per Enter, in beide Richtungen
  • Offline-Phase: Text bleibt lokal und wird nach Rückkehr übertragen
  • beide Browser und der Server zeigen denselben Stand, auch nach Neuladen
  • Sperren eines geschlossenen Browsers laufen nach spätestens 20 s ab
  • Einrücken (Tab) und Zusammenführen (Backspace) bleiben nach Neuladen erhalten

share.e2e.mjs

Der Eigentümer teilt eine Notiz über den Freigabe-Dialog mit Rolle „Bearbeiten“; geprüft wird, dass die Freigabe als write gespeichert, im Dialog als „Bearbeiter“ angezeigt wird und der Empfänger die Notiz bearbeiten kann.

lock.e2e.mjs

Sperren, Präsenz, Rückgängig und Konfliktkopien mit zwei Browsern: Schloss und Schreibschutz am fremd bearbeiteten Bullet, Hinweis statt halb ausgeführter Aktion, Strg+Z/Strg+Umschalt+Z, Tippen direkt nach Enter, Markierung von Konfliktkopien sowie „Übernehmen“ (verweigert bei fremder Sperre, erfolgreich für den Sperrinhaber).

collab.e2e.mjs und lock.e2e.mjs dauern wegen des Sperrablaufs je etwa eine Minute. Er läuft nicht in der CI, weil er Browser-Images braucht.