package ws import ( "context" "encoding/json" "testing" "time" ) func TestPublishAdminDoesNotReachPublicClients(t *testing.T) { h := New() admin := &Client{Admin: true, send: make(chan []byte, 1), closed: make(chan struct{})} public := &Client{All: true, send: make(chan []byte, 1), closed: make(chan struct{})} h.mu.Lock() h.clients[admin] = struct{}{} h.clients[public] = struct{}{} h.mu.Unlock() if err := h.PublishAdmin(context.Background(), Event{Type: "guess_signal", TaskID: "task-1", Data: map[string]any{"score": 42.5}}); err != nil { t.Fatalf("PublishAdmin: %v", err) } select { case b := <-admin.send: var e Event if err := json.Unmarshal(b, &e); err != nil { t.Fatalf("decode admin event: %v", err) } if e.Type != "guess_signal" || e.TaskID != "task-1" { t.Fatalf("unexpected event: %#v", e) } case <-time.After(100 * time.Millisecond): t.Fatal("admin client did not receive event") } select { case b := <-public.send: t.Fatalf("public client received admin-only event: %s", b) default: } }