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() { 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; }