using Moq; using NUnit.Framework; using StructureHelperCommon.Infrastructures.Exceptions; using StructureHelperCommon.Models.Forces; using StructureHelperCommon.Models; using StructureHelperLogics.Models.BeamShears; namespace StructureHelperTests.UnitTests.BeamShearTests { [TestFixture] public class SumConcentratedForceLogicTests { private Mock _mockLogger; private Mock _mockCoordinateByLevelLogic; private SumConcentratedForceLogic _logic; [SetUp] public void Setup() { _mockLogger = new Mock(); _mockCoordinateByLevelLogic = new Mock(); _logic = new SumConcentratedForceLogic(_mockCoordinateByLevelLogic.Object, _mockLogger.Object); } [Test] public void GetSumShearForce_ShouldReturnCorrectForce_ForValidConcentratedForce() { // Arrange var mockConcentratedForce = new Mock(); mockConcentratedForce.Setup(f => f.ForceCoordinate).Returns(3.0); mockConcentratedForce.Setup(f => f.ForceValue).Returns(100.0); mockConcentratedForce.Setup(f => f.LoadRatio).Returns(0.8); mockConcentratedForce.Setup(f => f.RelativeLoadLevel).Returns(0.5); _mockCoordinateByLevelLogic.Setup(c => c.GetCoordinate(2.0, 5.0, 0.5)).Returns(3.5); // Act double result = _logic.GetSumShearForce(mockConcentratedForce.Object, 2.0, 5.0); // Assert Assert.That(result, Is.EqualTo(80.0)); _mockLogger.Verify(l => l.AddMessage(It.IsAny(), It.IsAny()), Times.AtLeastOnce); } [Test] public void GetSumShearForce_ShouldReturnZero_WhenForceCoordinateExceedsEndCoord() { // Arrange var mockConcentratedForce = new Mock(); mockConcentratedForce.Setup(f => f.ForceCoordinate).Returns(6.0); // Act double result = _logic.GetSumShearForce(mockConcentratedForce.Object, 2.0, 5.0); // Assert Assert.That(result, Is.EqualTo(0.0)); } [Test] public void GetSumShearForce_ShouldThrowException_ForInvalidShearLoad() { // Arrange var mockInvalidShearLoad = new Mock(); // Act & Assert Assert.Throws(() => _logic.GetSumShearForce(mockInvalidShearLoad.Object, 2.0, 5.0)); } } }