using Moq; using NUnit.Framework; using StructureHelperCommon.Infrastructures.Exceptions; using StructureHelperCommon.Infrastructures.Interfaces; using StructureHelperCommon.Models.Forces; using StructureHelperLogics.NdmCalculations.Cracking; using StructureHelperLogics.NdmCalculations.Primitives; namespace StructureHelperTests.UnitTests.UpdateStrategiesTests { [TestFixture] public class CrackInputDataUpdateStrategyTests { [Test] public void Update_WithValidInput_UpdatesTargetObject() { // Arrange var mockUserCrackInputDataUpdateStrategy = new Mock>(); var targetObject = new Mock(); var sourceObject = new Mock(); var forceActions = new List { new Mock().Object }; var primitives = new List { new Mock().Object }; var userCrackInputData = new Mock(); sourceObject.Setup(s => s.ForceActions).Returns(forceActions); sourceObject.Setup(s => s.Primitives).Returns(primitives); sourceObject.Setup(s => s.UserCrackInputData).Returns(userCrackInputData.Object); targetObject.Setup(t => t.ForceActions).Returns(new List()); targetObject.Setup(t => t.Primitives).Returns(new List()); targetObject.SetupProperty(t => t.UserCrackInputData, new Mock().Object); var strategy = new CrackInputDataUpdateStrategy(mockUserCrackInputDataUpdateStrategy.Object); // Act strategy.Update(targetObject.Object, sourceObject.Object); // Assert Assert.That(targetObject.Object.ForceActions, Is.EqualTo(forceActions)); Assert.That(targetObject.Object.Primitives, Is.EqualTo(primitives)); mockUserCrackInputDataUpdateStrategy.Verify(s => s.Update(It.IsAny(), It.IsAny()), Times.Once); } [Test] public void Update_WhenTargetAndSourceAreSame_DoesNotUpdate() { // Arrange var mockUserCrackInputDataUpdateStrategy = new Mock>(); var targetObject = new Mock(); var strategy = new CrackInputDataUpdateStrategy(mockUserCrackInputDataUpdateStrategy.Object); // Act strategy.Update(targetObject.Object, targetObject.Object); // Assert mockUserCrackInputDataUpdateStrategy.Verify(s => s.Update(It.IsAny(), It.IsAny()), Times.Never); } [Test] public void Update_WithNullTarget_ThrowsStructureHelperException() { // Arrange var mockUserCrackInputDataUpdateStrategy = new Mock>(); var sourceObject = new Mock(); var strategy = new CrackInputDataUpdateStrategy(mockUserCrackInputDataUpdateStrategy.Object); // Act & Assert Assert.Throws(() => strategy.Update(null, sourceObject.Object)); } [Test] public void Update_WithNullSource_ThrowsStructureHelperException() { // Arrange var mockUserCrackInputDataUpdateStrategy = new Mock>(); var targetObject = new Mock(); var strategy = new CrackInputDataUpdateStrategy(mockUserCrackInputDataUpdateStrategy.Object); // Act & Assert Assert.Throws(() => strategy.Update(targetObject.Object, null)); } } }