Files
StructureHelper/StructureHelperTests/UnitTests/Curvatures/GetDeflectionByCurvatureLogicTests.cs
2025-11-29 21:43:00 +05:00

139 lines
4.8 KiB
C#

using Moq;
using NUnit.Framework;
using StructureHelperCommon.Models;
using StructureHelperCommon.Models.Forces;
using StructureHelperLogics.NdmCalculations.Analyses.Curvatures;
namespace StructureHelperTests.UnitTests.Curvatures
{
[TestFixture]
public class GetDeflectionByCurvatureLogicTests
{
private Mock<IShiftTraceLogger> _logger;
private GetDeflectionByCurvatureLogic _logic;
private Mock<IForceTuple> _curvature;
private Mock<IDeflectionFactor> _factor;
private Mock<IForceTuple> _k;
private Mock<IForceTuple> _max;
[SetUp]
public void Setup()
{
_logger = new Mock<IShiftTraceLogger>();
_logic = new GetDeflectionByCurvatureLogic(_logger.Object);
_curvature = new Mock<IForceTuple>();
_factor = new Mock<IDeflectionFactor>();
_k = new Mock<IForceTuple>();
_max = new Mock<IForceTuple>();
_factor.Setup(f => f.DeflectionFactors).Returns(_k.Object);
_factor.Setup(f => f.MaxDeflections).Returns(_max.Object);
}
[Test]
public void GetDeflection_ComputesDeflectionMxCorrectly()
{
_factor.Setup(f => f.SpanLength).Returns(5.0);
_k.Setup(f => f.Mx).Returns(2.0);
_curvature.Setup(c => c.Mx).Returns(3.0);
_max.Setup(m => m.Mx).Returns(10.0);
var result = _logic.GetDeflection(_curvature.Object, _factor.Object);
// Expected: k * curvature * L^2 = 2 * 3 * 25 = 150
Assert.That(result.DeflectionMx.Deflection, Is.EqualTo(150.0));
Assert.That(result.DeflectionMx.Curvature, Is.EqualTo(3.0));
Assert.That(result.DeflectionMx.UltimateDeflection, Is.EqualTo(10.0));
}
[Test]
public void GetDeflection_ComputesDeflectionMyCorrectly()
{
_factor.Setup(f => f.SpanLength).Returns(4.0);
_k.Setup(f => f.My).Returns(1.5);
_curvature.Setup(c => c.My).Returns(2.0);
_max.Setup(m => m.My).Returns(7.0);
var result = _logic.GetDeflection(_curvature.Object, _factor.Object);
// Expected: 1.5 * 2 * 16 = 48
Assert.That(result.DeflectionMy.Deflection, Is.EqualTo(48.0));
Assert.That(result.DeflectionMy.Curvature, Is.EqualTo(2.0));
Assert.That(result.DeflectionMy.UltimateDeflection, Is.EqualTo(7.0));
}
[Test]
public void GetDeflection_ComputesDeflectionNzCorrectly()
{
_factor.Setup(f => f.SpanLength).Returns(10.0);
_k.Setup(f => f.Nz).Returns(1.2);
_curvature.Setup(c => c.Nz).Returns(4.0);
_max.Setup(m => m.Nz).Returns(5.0);
var result = _logic.GetDeflection(_curvature.Object, _factor.Object);
// Expected: 1.2 * 4 * 10 = 48
Assert.That(result.DeflectionNz.Deflection, Is.EqualTo(48.0));
Assert.That(result.DeflectionNz.Curvature, Is.EqualTo(4.0));
Assert.That(result.DeflectionNz.UltimateDeflection, Is.EqualTo(5.0));
}
[Test]
public void GetDeflection_LogsSpanLength()
{
_factor.Setup(f => f.SpanLength).Returns(6.0);
_logic.GetDeflection(_curvature.Object, _factor.Object);
_logger.Verify(l => l.AddMessage("Span length L = 6(m)"), Times.Once);
}
[Test]
public void GetDeflection_LogsAllDeflectionsInCorrectFormat()
{
_factor.Setup(f => f.SpanLength).Returns(3.0);
_k.Setup(f => f.Mx).Returns(2);
_k.Setup(f => f.My).Returns(3);
_k.Setup(f => f.Nz).Returns(4);
_curvature.Setup(c => c.Mx).Returns(1.0);
_curvature.Setup(c => c.My).Returns(2.0);
_curvature.Setup(c => c.Nz).Returns(3.0);
_max.Setup(m => m.Mx).Returns(0);
_max.Setup(m => m.My).Returns(0);
_max.Setup(m => m.Nz).Returns(0);
_logic.GetDeflection(_curvature.Object, _factor.Object);
_logger.Verify(l =>
l.AddMessage("Deflection along X axis = 2 * 1 * (3)^2 = 18(m)"),
Times.Once);
_logger.Verify(l =>
l.AddMessage("Deflection along Y axis = 3 * 2 * (3)^2 = 54(m)"),
Times.Once);
_logger.Verify(l =>
l.AddMessage("Deflection along Z axis = 4 * 3 * 3 = 36(m)"),
Times.Once);
}
[Test]
public void GetDeflection_ZeroCurvature_ProducesZeroDeflection()
{
_factor.Setup(f => f.SpanLength).Returns(10);
_k.Setup(f => f.Mx).Returns(5);
_curvature.Setup(c => c.Mx).Returns(0);
var result = _logic.GetDeflection(_curvature.Object, _factor.Object);
Assert.That(result.DeflectionMx.Deflection, Is.EqualTo(0));
}
}
}