Files
StructureHelper/StructureHelperTests/UnitTests/UpdateStrategiesTests/ForceCalculatorUpdateCloningStrategyTests.cs
2024-12-07 20:50:21 +05:00

92 lines
3.2 KiB
C#

using Moq;
using NUnit.Framework;
using StructureHelperCommon.Infrastructures.Exceptions;
using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperLogics.NdmCalculations.Analyses.ByForces.Logics;
using StructureHelperLogics.NdmCalculations.Analyses.ByForces;
using StructureHelperLogics.NdmCalculations.Primitives;
namespace StructureHelperTests.UnitTests.UpdateStrategiesTests
{
[TestFixture]
public class ForceCalculatorUpdateCloningStrategyTests
{
private Mock<ICloningStrategy> _cloningStrategyMock;
private Mock<IUpdateStrategy<IHasForceActions>> _forcesUpdateStrategyMock;
private Mock<IUpdateStrategy<IHasPrimitives>> _primitivesUpdateStrategyMock;
private ForceCalculatorUpdateCloningStrategy _strategy;
[SetUp]
public void SetUp()
{
_cloningStrategyMock = new Mock<ICloningStrategy>();
_forcesUpdateStrategyMock = new Mock<IUpdateStrategy<IHasForceActions>>();
_primitivesUpdateStrategyMock = new Mock<IUpdateStrategy<IHasPrimitives>>();
_strategy = new ForceCalculatorUpdateCloningStrategy(
_cloningStrategyMock.Object,
_forcesUpdateStrategyMock.Object,
_primitivesUpdateStrategyMock.Object
);
}
[Test]
public void Update_WithNullSourceObject_ThrowsException()
{
// Arrange
var targetObject = Mock.Of<IForceCalculator>();
// Act & Assert
Assert.Throws<StructureHelperException>(() => _strategy.Update(targetObject, null));
}
[Test]
public void Update_WithNullTargetObject_ThrowsException()
{
// Arrange
var sourceObject = Mock.Of<IForceCalculator>();
// Act & Assert
Assert.Throws<StructureHelperException>(() => _strategy.Update(null, sourceObject));
}
[Test]
public void Update_WithSameSourceAndTarget_DoesNothing()
{
// Arrange
var sourceObject = Mock.Of<IForceCalculator>();
// Act
_strategy.Update(sourceObject, sourceObject);
// Assert
_forcesUpdateStrategyMock.VerifyNoOtherCalls();
_primitivesUpdateStrategyMock.VerifyNoOtherCalls();
}
[Test]
public void Update_InvokesUpdateStrategiesOnInputData()
{
// Arrange
var sourceDataMock = new Mock<IForceCalculatorInputData>();
var targetDataMock = new Mock<IForceCalculatorInputData>();
var sourceObjectMock = new Mock<IForceCalculator>();
sourceObjectMock.Setup(s => s.InputData).Returns(sourceDataMock.Object);
var targetObjectMock = new Mock<IForceCalculator>();
targetObjectMock.Setup(t => t.InputData).Returns(targetDataMock.Object);
// Act
_strategy.Update(targetObjectMock.Object, sourceObjectMock.Object);
// Assert
_primitivesUpdateStrategyMock.Verify(ps => ps.Update(targetDataMock.Object, sourceDataMock.Object), Times.Once);
_forcesUpdateStrategyMock.Verify(fs => fs.Update(targetDataMock.Object, sourceDataMock.Object), Times.Once);
}
}
}