using NUnit.Framework; using Moq; using StructureHelperCommon.Infrastructures.Exceptions; using StructureHelperCommon.Models.Materials.Libraries; using StructureHelperCommon.Models.Materials; using StructureHelperLogics.Models.Materials; namespace StructureHelperTests.UnitTests.UpdateStrategiesTests { [TestFixture] public class LibMaterialUpdateStrategyTests { private Mock mockTargetMaterial; private Mock mockSourceMaterial; private LibMaterialUpdateStrategy updateStrategy; [SetUp] public void Setup() { mockTargetMaterial = new Mock(); mockSourceMaterial = new Mock(); updateStrategy = new LibMaterialUpdateStrategy(); var targetSafetyFactors = new List(); mockTargetMaterial.Setup(t => t.SafetyFactors).Returns(targetSafetyFactors); } [Test] public void Update_ShouldThrowException_WhenTargetAndSourceAreDifferentTypes() { // Arrange var mockTarget1 = new ConcreteLibMaterial(); var mockTarget2 = new ReinforcementLibMaterial(); // Act & Assert Assert.Throws(() => updateStrategy.Update(mockTarget1, mockTarget2)); } [Test] public void Update_ShouldCopyMaterialEntityAndMaterialLogic() { // Arrange var materialEntity = new Mock().Object; var materialLogic = new Mock().Object; mockSourceMaterial.Setup(s => s.MaterialEntity).Returns(materialEntity); mockSourceMaterial.Setup(s => s.MaterialLogic).Returns(materialLogic); // Act updateStrategy.Update(mockTargetMaterial.Object, mockSourceMaterial.Object); // Assert mockTargetMaterial.VerifySet(t => t.MaterialEntity = materialEntity, Times.Once); mockTargetMaterial.VerifySet(t => t.MaterialLogic = materialLogic, Times.Once); } //[Test] public void Update_ShouldClearAndCopySafetyFactors() { // Arrange var mockSafetyFactor1 = new Mock(); var mockSafetyFactor2 = new Mock(); var safetyFactors = new List { mockSafetyFactor1.Object, mockSafetyFactor2.Object }; var targetSafetyFactors = new List(); mockSourceMaterial.Setup(s => s.SafetyFactors).Returns(safetyFactors); mockSafetyFactor1.Setup(f => f.Clone()).Returns(mockSafetyFactor1.Object); mockSafetyFactor2.Setup(f => f.Clone()).Returns(mockSafetyFactor2.Object); mockTargetMaterial.Setup(t => t.SafetyFactors).Returns(targetSafetyFactors); // Act updateStrategy.Update(mockTargetMaterial.Object, mockSourceMaterial.Object); // Assert //mockTargetMaterial.Verify(t => t.SafetyFactors.Clear(), Times.Once); //mockTargetMaterial.Verify(t => t.SafetyFactors.Add(mockSafetyFactor1.Object), Times.Once); //mockTargetMaterial.Verify(t => t.SafetyFactors.Add(mockSafetyFactor2.Object), Times.Once); } [Test] public void Update_ShouldNotPerformUpdate_WhenObjectsAreReferenceEqual() { //Arrange // Act updateStrategy.Update(mockTargetMaterial.Object, mockTargetMaterial.Object); // Assert mockTargetMaterial.VerifySet(t => t.MaterialEntity = It.IsAny(), Times.Never); //mockTargetMaterial.Verify(t => t.SafetyFactors.Clear(), Times.Never); mockTargetMaterial.VerifySet(t => t.MaterialLogic = It.IsAny(), Times.Never); } } }