Logic fo TupleCrackCalculator was changed
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
using System.Collections.Generic;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using StructureHelperCommon.Models;
|
||||
using StructureHelperLogics.NdmCalculations.Cracking;
|
||||
using StructureHelperLogics.NdmCalculations.Primitives;
|
||||
|
||||
namespace StructureHelperTests.UnitTests.Ndms.Cracks
|
||||
{
|
||||
public class RebarCalulatorsFactoryTests
|
||||
{
|
||||
[Test]
|
||||
public void GetCalculators_ShouldReturnListOfCalculators()
|
||||
{
|
||||
// Arrange
|
||||
var mockInputFactory = new Mock<IRebarCrackInputDataFactory>();
|
||||
var rebar = new RebarPrimitive();
|
||||
var inputData = new TupleCrackInputData();
|
||||
var rebarCrackInputData = new RebarCrackCalculatorInputData();
|
||||
|
||||
mockInputFactory.SetupProperty(f => f.Rebar, rebar);
|
||||
mockInputFactory.SetupProperty(f => f.InputData, inputData);
|
||||
mockInputFactory.SetupProperty(f => f.LongLength, 10.0);
|
||||
mockInputFactory.SetupProperty(f => f.ShortLength, 5.0);
|
||||
mockInputFactory.Setup(f => f.GetInputData()).Returns(rebarCrackInputData);
|
||||
|
||||
var factory = new RebarCalulatorsFactory(mockInputFactory.Object)
|
||||
{
|
||||
Rebars = new List<RebarPrimitive> { rebar },
|
||||
InputData = inputData,
|
||||
LongLength = 10.0,
|
||||
ShortLength = 5.0,
|
||||
TraceLogger = null
|
||||
};
|
||||
|
||||
// Act
|
||||
var calculators = factory.GetCalculators();
|
||||
|
||||
// Assert
|
||||
var calculator = calculators[0];
|
||||
Assert.NotNull(calculator);
|
||||
Assert.AreEqual(rebarCrackInputData, calculator.InputData);
|
||||
Assert.Null(calculator.TraceLogger);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void GetCalculators_ShouldInitializeCalculatorsWithCorrectData()
|
||||
{
|
||||
// Arrange
|
||||
var mockInputFactory = new Mock<IRebarCrackInputDataFactory>();
|
||||
var rebar1 = new RebarPrimitive();
|
||||
var rebar2 = new RebarPrimitive();
|
||||
var inputData = new TupleCrackInputData();
|
||||
var rebarInputData1 = new RebarCrackCalculatorInputData();
|
||||
var rebarInputData2 = new RebarCrackCalculatorInputData();
|
||||
var mockLogger = new Mock<IShiftTraceLogger>();
|
||||
|
||||
mockInputFactory.SetupSequence(f => f.GetInputData())
|
||||
.Returns(rebarInputData1)
|
||||
.Returns(rebarInputData2);
|
||||
mockInputFactory.Setup(f => f.GetInputData()).Returns(rebarInputData1);
|
||||
|
||||
mockLogger.Setup(l => l.GetSimilarTraceLogger(50)).Returns(mockLogger.Object);
|
||||
|
||||
var factory = new RebarCalulatorsFactory(mockInputFactory.Object)
|
||||
{
|
||||
Rebars = new List<RebarPrimitive> { rebar1, rebar2 },
|
||||
InputData = inputData,
|
||||
LongLength = 20.0,
|
||||
ShortLength = 10.0,
|
||||
TraceLogger = mockLogger.Object
|
||||
};
|
||||
|
||||
// Act
|
||||
var calculators = factory.GetCalculators();
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(2, calculators.Count);
|
||||
Assert.AreEqual(rebarInputData1, calculators[0].InputData);
|
||||
//Assert.AreEqual(rebarInputData2, calculators[1].InputData);
|
||||
Assert.AreEqual(mockLogger.Object, calculators[0].TraceLogger);
|
||||
Assert.AreEqual(mockLogger.Object, calculators[1].TraceLogger);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using StructureHelperLogics.NdmCalculations.Cracking;
|
||||
using StructureHelperLogics.NdmCalculations.Primitives;
|
||||
|
||||
namespace StructureHelperTests.UnitTests.Ndms.Cracks
|
||||
{
|
||||
public class TupleRebarsCrackSolverTest
|
||||
{
|
||||
[Test]
|
||||
public void Run_ShouldProcessAllCalculatorsAndSetValidResults()
|
||||
{
|
||||
// Arrange
|
||||
var mockCalculatorFactory = new Mock<IRebarCalulatorsFactory>();
|
||||
var mockCalculator = new Mock<IRebarCrackCalculator>();
|
||||
mockCalculator.Setup(c => c.Run());
|
||||
mockCalculator.Setup(c => c.Result).Returns(new RebarCrackResult { IsValid = true });
|
||||
|
||||
var calculators = new List<IRebarCrackCalculator> { mockCalculator.Object };
|
||||
mockCalculatorFactory.Setup(f => f.GetCalculators()).Returns(calculators);
|
||||
|
||||
var solver = new TupleRebarsCrackSolver(mockCalculatorFactory.Object)
|
||||
{
|
||||
Rebars = new List<RebarPrimitive>(),
|
||||
InputData = new TupleCrackInputData(),
|
||||
LongLength = 10.0,
|
||||
ShortLength = 5.0,
|
||||
TraceLogger = null
|
||||
};
|
||||
|
||||
// Act
|
||||
solver.Run();
|
||||
|
||||
// Assert
|
||||
mockCalculator.Verify(c => c.Run(), Times.Once);
|
||||
Assert.True(solver.IsResultValid);
|
||||
Assert.NotNull(solver.Result);
|
||||
Assert.True(solver.Result.All(r => r.IsValid));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Run_ShouldSetInvalidResultWhenAnyCalculatorResultIsInvalid()
|
||||
{
|
||||
// Arrange
|
||||
var mockCalculatorFactory = new Mock<IRebarCalulatorsFactory>();
|
||||
var mockCalculator1 = new Mock<IRebarCrackCalculator>();
|
||||
mockCalculator1.Setup(c => c.Run());
|
||||
mockCalculator1.Setup(c => c.Result).Returns(new RebarCrackResult { IsValid = true });
|
||||
|
||||
var mockCalculator2 = new Mock<IRebarCrackCalculator>();
|
||||
mockCalculator2.Setup(c => c.Run());
|
||||
mockCalculator2.Setup(c => c.Result).Returns(new RebarCrackResult { IsValid = false });
|
||||
|
||||
var calculators = new List<IRebarCrackCalculator> { mockCalculator1.Object, mockCalculator2.Object };
|
||||
mockCalculatorFactory.Setup(f => f.GetCalculators()).Returns(calculators);
|
||||
|
||||
var solver = new TupleRebarsCrackSolver(mockCalculatorFactory.Object)
|
||||
{
|
||||
Rebars = new List<RebarPrimitive>(),
|
||||
InputData = new TupleCrackInputData(),
|
||||
LongLength = 10.0,
|
||||
ShortLength = 5.0,
|
||||
TraceLogger = null
|
||||
};
|
||||
|
||||
// Act
|
||||
solver.Run();
|
||||
|
||||
// Assert
|
||||
mockCalculator1.Verify(c => c.Run(), Times.Once);
|
||||
mockCalculator2.Verify(c => c.Run(), Times.Once);
|
||||
Assert.False(solver.IsResultValid);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user