Files
StructureHelper/StructureHelperTests/UnitTests/UpdateStrategiesTests/LibMaterialUpdateStrategyTests.cs
2024-08-20 20:38:01 +05:00

99 lines
3.8 KiB
C#

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<ILibMaterial> mockTargetMaterial;
private Mock<ILibMaterial> mockSourceMaterial;
private LibMaterialUpdateStrategy updateStrategy;
[SetUp]
public void Setup()
{
mockTargetMaterial = new Mock<ILibMaterial>();
mockSourceMaterial = new Mock<ILibMaterial>();
updateStrategy = new LibMaterialUpdateStrategy();
var targetSafetyFactors = new List<IMaterialSafetyFactor>();
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<StructureHelperException>(() => updateStrategy.Update(mockTarget1, mockTarget2));
}
[Test]
public void Update_ShouldCopyMaterialEntityAndMaterialLogic()
{
// Arrange
var materialEntity = new Mock<ILibMaterialEntity>().Object;
var materialLogic = new Mock<IMaterialLogic>().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<IMaterialSafetyFactor>();
var mockSafetyFactor2 = new Mock<IMaterialSafetyFactor>();
var safetyFactors = new List<IMaterialSafetyFactor> { mockSafetyFactor1.Object, mockSafetyFactor2.Object };
var targetSafetyFactors = new List<IMaterialSafetyFactor>();
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<ILibMaterialEntity>(), Times.Never);
//mockTargetMaterial.Verify(t => t.SafetyFactors.Clear(), Times.Never);
mockTargetMaterial.VerifySet(t => t.MaterialLogic = It.IsAny<IMaterialLogic>(), Times.Never);
}
}
}