diff --git a/tests/MedWNetworkSim.Tests/MedWNetworkSim.Tests.csproj b/tests/MedWNetworkSim.Tests/MedWNetworkSim.Tests.csproj index 4c1f450..3839b81 100644 --- a/tests/MedWNetworkSim.Tests/MedWNetworkSim.Tests.csproj +++ b/tests/MedWNetworkSim.Tests/MedWNetworkSim.Tests.csproj @@ -7,6 +7,7 @@ + diff --git a/tests/MedWNetworkSim.Tests/NetworkModelCloneUtilityTests.cs b/tests/MedWNetworkSim.Tests/NetworkModelCloneUtilityTests.cs new file mode 100644 index 0000000..4a02bd5 --- /dev/null +++ b/tests/MedWNetworkSim.Tests/NetworkModelCloneUtilityTests.cs @@ -0,0 +1,78 @@ +using System.Collections.Generic; +using Xunit; +using MedWNetworkSim.App.Models; +using MedWNetworkSim.App.Services; +using MedWNetworkSim.App.Agents; + +namespace MedWNetworkSim.Tests; + +public class NetworkModelCloneUtilityTests +{ + [Fact] + public void Clone_ReturnsNewInstance() + { + var original = new NetworkModel(); + var cloned = NetworkModelCloneUtility.Clone(original); + + Assert.NotSame(original, cloned); + } + + [Fact] + public void Clone_CopiesSerializedProperties() + { + var original = new NetworkModel + { + Name = "Test Network", + Description = "A test network", + SimulationSeed = 42, + Nodes = new List + { + new NodeModel { Id = "Node1", Name = "First Node" } + }, + Edges = new List + { + new EdgeModel { Id = "Edge1", FromNodeId = "Node1", ToNodeId = "Node2" } + } + }; + + var cloned = NetworkModelCloneUtility.Clone(original); + + Assert.Equal("Test Network", cloned.Name); + Assert.Equal("A test network", cloned.Description); + Assert.Equal(42, cloned.SimulationSeed); + + Assert.Single(cloned.Nodes); + Assert.Equal("Node1", cloned.Nodes[0].Id); + Assert.Equal("First Node", cloned.Nodes[0].Name); + + Assert.Single(cloned.Edges); + Assert.Equal("Edge1", cloned.Edges[0].Id); + Assert.Equal("Node1", cloned.Edges[0].FromNodeId); + Assert.Equal("Node2", cloned.Edges[0].ToNodeId); + + // Ensure lists are new instances too + Assert.NotSame(original.Nodes, cloned.Nodes); + Assert.NotSame(original.Edges, cloned.Edges); + } + + [Fact] + public void Clone_IgnoresJsonIgnoreProperties() + { + var original = new NetworkModel + { + AgentMode = AgentMode.SellLocal, + ActorTick = 100, + Actors = new List + { + new SimulationActorState { Id = "Actor1" } + } + }; + + var cloned = NetworkModelCloneUtility.Clone(original); + + // Verify [JsonIgnore] properties are NOT cloned and retain their default values + Assert.Equal(AgentMode.Off, cloned.AgentMode); // Default is Off + Assert.Equal(0, cloned.ActorTick); // Default is 0 + Assert.Empty(cloned.Actors); // Default is empty list + } +}