From e0fa5560ab2f4676055d25980b4cb3ab4438febc Mon Sep 17 00:00:00 2001 From: Jeff Winkler Date: Sun, 16 Nov 2025 04:51:04 -0500 Subject: [PATCH] Signals fix (#17) * Fix signals bug, add test. * Test --- context.go | 4 ++-- via_test.go | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/context.go b/context.go index f9e0ff6..7ff2f9d 100644 --- a/context.go +++ b/context.go @@ -280,10 +280,10 @@ func (c *Context) SyncSignals() { } updatedSigs := make(map[string]any) - c.signals.Range(func(idAny, val any) bool { + c.signals.Range(func(key, val any) bool { // We know the types. sig, _ := val.(*signal) // adjust *Signal to your actual signal type - id, _ := val.(string) + id, _ := key.(string) if sig.err != nil { c.app.logWarn(c, "signal out of sync'%s': %v", sig.id, sig.err) } diff --git a/via_test.go b/via_test.go index 887dcbd..668f1da 100644 --- a/via_test.go +++ b/via_test.go @@ -1,6 +1,7 @@ package via import ( + "fmt" "net/http" "net/http/httptest" "testing" @@ -84,3 +85,24 @@ func TestConfig(t *testing.T) { v.Config(Options{DocumentTitle: "Test"}) assert.Equal(t, "Test", v.cfg.DocumentTitle) } + +func TestSyncSignals(t *testing.T) { + var ctx *Context + var sig *signal + v := New() + v.Page("/", func(c *Context) { + ctx = c + sig = c.Signal("initial") + c.View(func() h.H { return h.Div() }) + }) + + req := httptest.NewRequest("GET", "/", nil) + w := httptest.NewRecorder() + v.mux.ServeHTTP(w, req) + + sig.SetValue("updated") + ctx.SyncSignals() + + patch := <-ctx.patchChan + assert.Equal(t, patch.content, fmt.Sprintf(`{"%s":"updated"}`, sig.ID())) +}