package via import ( "testing" "time" "github.com/ryanhamamura/via/h" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestPublishSubscribe_RoundTrip(t *testing.T) { v := New() defer v.Shutdown() type event struct { Name string `json:"name"` Count int `json:"count"` } var got event done := make(chan struct{}) c := newContext("typed-ctx", "/", v) c.View(func() h.H { return h.Div() }) _, err := Subscribe(c, "events", func(e event) { got = e close(done) }) require.NoError(t, err) err = Publish(c, "events", event{Name: "click", Count: 42}) require.NoError(t, err) select { case <-done: case <-time.After(2 * time.Second): t.Fatal("timed out waiting for message") } assert.Equal(t, "click", got.Name) assert.Equal(t, 42, got.Count) } func TestSubscribe_SkipsBadJSON(t *testing.T) { v := New() defer v.Shutdown() type msg struct { Text string `json:"text"` } called := false c := newContext("bad-json-ctx", "/", v) c.View(func() h.H { return h.Div() }) _, err := Subscribe(c, "topic", func(m msg) { called = true }) require.NoError(t, err) // Publish raw invalid JSON — handler should silently skip err = c.Publish("topic", []byte("not json")) require.NoError(t, err) time.Sleep(50 * time.Millisecond) assert.False(t, called) }