using Moq; using NUnit.Framework; using StructureHelperCommon.Infrastructures.Exceptions; using StructureHelperCommon.Infrastructures.Interfaces; using StructureHelperCommon.Models.Parameters; using StructureHelperLogics.NdmCalculations.Analyses.ByForces; using StructureHelperLogics.NdmCalculations.Analyses.ByForces.LimitCurve; using StructureHelperLogics.NdmCalculations.Primitives; namespace StructureHelperTests.UnitTests.UpdateStrategiesTests { [TestFixture] public class LimitCurvesCalculatorUpdateCloningStrategyTests { private Mock _cloningStrategyMock; private Mock> _inputDataUpdateStrategyMock; private LimitCurvesCalculatorUpdateCloningStrategy _strategy; [SetUp] public void SetUp() { _cloningStrategyMock = new Mock(); _inputDataUpdateStrategyMock = new Mock>(); _strategy = new LimitCurvesCalculatorUpdateCloningStrategy( _cloningStrategyMock.Object, _inputDataUpdateStrategyMock.Object); } [Test] public void Update_WithNullSourceObject_ThrowsException() { // Arrange var targetObject = Mock.Of(); // Act & Assert Assert.Throws(() => _strategy.Update(targetObject, null)); } [Test] public void Update_WithNullTargetObject_ThrowsException() { // Arrange var sourceObject = Mock.Of(); // Act & Assert Assert.Throws(() => _strategy.Update(null, sourceObject)); } [Test] public void Update_WithSameSourceAndTarget_DoesNothing() { // Arrange var sourceObject = Mock.Of(); // Act _strategy.Update(sourceObject, sourceObject); // Assert _cloningStrategyMock.VerifyNoOtherCalls(); _inputDataUpdateStrategyMock.VerifyNoOtherCalls(); } //[Test] public void Update_UpdatesInputDataAndProcessesEachPrimitiveSeries() { // Arrange var targetSeries = new NamedCollection { Collection = new List() }; var targetData = Mock.Of(d => d.PrimitiveSeries == new List> { targetSeries }); var targetObjectMock = new Mock(); targetObjectMock.Setup(t => t.InputData).Returns(targetData); var sourcePrimitive1 = Mock.Of(p => p.Name == "sp1"); var sourcePrimitive2 = Mock.Of(p => p.Name == "sp2"); var sourceSeries = new NamedCollection { Collection = new List { sourcePrimitive1, sourcePrimitive2 } }; var sourceData = Mock.Of(d => d.PrimitiveSeries == new List> { sourceSeries }); var sourceObjectMock = new Mock(); sourceObjectMock.Setup(s => s.InputData).Returns(sourceData); var clonedPrimitive1 = Mock.Of(p => p.Name == "cp1"); var clonedPrimitive2 = Mock.Of(p => p.Name == "cp2"); _cloningStrategyMock.Setup(cs => cs.Clone(It.Is(p => p.Name == "sp1"), null)).Returns(clonedPrimitive1); _cloningStrategyMock.Setup(cs => cs.Clone(It.Is(p => p.Name == "sp2"), null)).Returns(clonedPrimitive2); // Act _strategy.Update(targetObjectMock.Object, sourceObjectMock.Object); // Assert _inputDataUpdateStrategyMock.Verify( us => us.Update(targetData, sourceData), Times.Once); Assert.That(targetSeries.Collection, Has.Count.EqualTo(2)); Assert.That(targetSeries.Collection, Contains.Item(clonedPrimitive1)); Assert.That(targetSeries.Collection, Contains.Item(clonedPrimitive2)); _cloningStrategyMock.Verify(cs => cs.Clone(sourcePrimitive1, null), Times.Once); _cloningStrategyMock.Verify(cs => cs.Clone(sourcePrimitive2, null), Times.Once); } } }