replay ui fix (#56)

* refactor: rename inspect to replay across the codebase

Renames inspect-ui/ to replay-ui/, internal/inspect/ to internal/replay/,
the CLI subcommand from `sanderling inspect` to `sanderling replay`, and
updates all references in docs, Makefile, README, and Go comments.

* feat(replay-ui): show spec filename with full path on hover

RunList and RunDetail now render the basename of spec_path (e.g.
login.spec.ts) with the full path available as a title tooltip.
This commit is contained in:
pj authored and GitHub committed 2026-06-03 16:17:26 +05:30
1 parent a6f43e15b2
commit b44077afde
71 files changed
+104 -92

No files matched your search

+54
View File
@@ -0,0 +1,54 @@
package replay
import (
"testing"
)
func TestWatcher_UnsubscribeRemovesChannel(t *testing.T) {
w := NewWatcher(t.TempDir())
first := w.Subscribe()
second := w.Subscribe()
third := w.Subscribe()
if count := len(w.subscribers); count != 3 {
t.Fatalf("expected 3 subscribers, got %d", count)
}
w.Unsubscribe(second)
if count := len(w.subscribers); count != 2 {
t.Fatalf("expected 2 subscribers after Unsubscribe, got %d", count)
}
// broadcast should still notify remaining subscribers
w.broadcast()
select {
case <-first:
default:
t.Error("first subscriber did not receive broadcast")
}
select {
case <-third:
default:
t.Error("third subscriber did not receive broadcast")
}
}
func TestWatcher_UnsubscribeUnknownChannelIsNoop(t *testing.T) {
w := NewWatcher(t.TempDir())
existing := w.Subscribe()
stranger := make(chan struct{})
w.Unsubscribe(stranger)
if count := len(w.subscribers); count != 1 {
t.Fatalf("expected 1 subscriber after no-op Unsubscribe, got %d", count)
}
w.broadcast()
select {
case <-existing:
default:
t.Error("existing subscriber did not receive broadcast")
}
}