From 38acb154339e4079e9e53a4acebf99c7555da509 Mon Sep 17 00:00:00 2001 From: Mark Wilson <23439518+wlsnmrk@users.noreply.github.com> Date: Wed, 1 Jul 2026 03:29:54 -0400 Subject: [PATCH 1/2] test: add tests for update op in AutoMap.Add Added tests for the update behavior of the Add() method. Note: One new test failing. --- .../src/primitives/AutoMapTest.cs | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/Chickensoft.Sync.Tests/src/primitives/AutoMapTest.cs b/Chickensoft.Sync.Tests/src/primitives/AutoMapTest.cs index 7e22ecc..a1bf951 100644 --- a/Chickensoft.Sync.Tests/src/primitives/AutoMapTest.cs +++ b/Chickensoft.Sync.Tests/src/primitives/AutoMapTest.cs @@ -133,6 +133,39 @@ public void AddBroadcastsModification() log.ShouldBe(["modify"]); } + [Fact] + public void AddBroadcastsUpdateForExistingValue() + { + var map = new AutoMap { [1] = "one" }; + var log = new List(); + using var binding = map.Bind(); + + binding.OnUpdate((key, oldValue, newValue) => + log.Add($"update {key} : {oldValue} -> {newValue}")); + + map.Add(1, "uno"); + + map.Count.ShouldBe(1); + map[1].ShouldBe("uno"); + log.ShouldBe(["update 1 : one -> uno"]); + } + + [Fact] + public void AddBroadcastsModificationForExistingValue() + { + var map = new AutoMap { [1] = "one" }; + var log = new List(); + using var binding = map.Bind(); + + binding.OnModify(() => log.Add($"modify")); + + map.Add(1, "uno"); + + map.Count.ShouldBe(1); + map[1].ShouldBe("uno"); + log.ShouldBe(["modify"]); + } + [Fact] public void RemoveWithValueBroadcasts() { From 5911f8d39b9f3201787fd5f1db26c9d82d643265 Mon Sep 17 00:00:00 2001 From: Mark Wilson <23439518+wlsnmrk@users.noreply.github.com> Date: Wed, 1 Jul 2026 03:31:33 -0400 Subject: [PATCH 2/2] fix: broadcast modify when AutoMap.Add updates Fixed failing test for AutoMap.Add() by broadcasting a modification notification when an add op is actually an update op for an existing value. --- Chickensoft.Sync/src/primitives/AutoMap.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Chickensoft.Sync/src/primitives/AutoMap.cs b/Chickensoft.Sync/src/primitives/AutoMap.cs index 8d1c400..c662594 100644 --- a/Chickensoft.Sync/src/primitives/AutoMap.cs +++ b/Chickensoft.Sync/src/primitives/AutoMap.cs @@ -308,6 +308,7 @@ void IPerform.Perform(in AddOp op) _map[key] = value; _subject.Broadcast(new UpdateBroadcast(key, existing, value)); + _subject.Broadcast(new ModifyBroadcast()); return; }