using Moq; using NUnit.Framework; using StructureHelperCommon.Infrastructures.Exceptions; using StructureHelperCommon.Models.Calculators; using StructureHelperLogics.Models.CrossSections; using StructureHelperLogics.NdmCalculations.Analyses.ByForces; using StructureHelperLogics.NdmCalculations.Analyses.Curvatures; using StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams; using StructureHelperLogics.NdmCalculations.Cracking; using StructureHelperLogics.NdmCalculations.Primitives; using System; using System.Collections.Generic; namespace StructureHelperTests.UnitTests.CrossSections { [TestFixture] public class RepositoryPrimitiveOperationTests { private Mock repositoryMock; private List repositoryPrimitives; private Mock forceCalculatorMock; private Mock crackCalculatorMock; private Mock valueDiagramCalculatorMock; private Mock curvatureCalculatorMock; private Mock limitCurvesCalculatorMock; private List forcePrimitives; private List crackPrimitives; private List valueDiagramPrimitives; private List curvaturePrimitives; private RepositoryPrimitiveOperation operation; [SetUp] public void SetUp() { repositoryPrimitives = new List { Mock.Of(), Mock.Of() }; forcePrimitives = new List(repositoryPrimitives); crackPrimitives = new List(repositoryPrimitives); valueDiagramPrimitives = new List(repositoryPrimitives); curvaturePrimitives = new List(repositoryPrimitives); forceCalculatorMock = new Mock(); crackCalculatorMock = new Mock(); valueDiagramCalculatorMock = new Mock(); curvatureCalculatorMock = new Mock(); limitCurvesCalculatorMock = new Mock(); repositoryMock = new Mock(); repositoryMock.Setup(r => r.Primitives).Returns(repositoryPrimitives); repositoryMock.Setup(r => r.Calculators).Returns(new List { forceCalculatorMock.Object, crackCalculatorMock.Object, valueDiagramCalculatorMock.Object, curvatureCalculatorMock.Object, limitCurvesCalculatorMock.Object }); forceCalculatorMock.Setup(x => x.InputData.Primitives).Returns(forcePrimitives); crackCalculatorMock.Setup(x => x.InputData.Primitives).Returns(crackPrimitives); valueDiagramCalculatorMock.Setup(x => x.InputData.Primitives).Returns(valueDiagramPrimitives); curvatureCalculatorMock.Setup(x => x.InputData.Primitives).Returns(curvaturePrimitives); operation = new RepositoryPrimitiveOperation(repositoryMock.Object); } [Test] public void RemoveAll_ClearsPrimitivesInAllSupportedCalculators_AndRepository() { // Act operation.RemoveAll(); // Assert Assert.That(forcePrimitives, Is.Empty); Assert.That(crackPrimitives, Is.Empty); Assert.That(valueDiagramPrimitives, Is.Empty); Assert.That(curvaturePrimitives, Is.Empty); Assert.That(repositoryPrimitives, Is.Empty); } [Test] public void Remove_RemovesPrimitiveFromAllCalculators_AndRepository() { // Arrange var primitive = repositoryPrimitives[0]; // Act operation.Remove(primitive); // Assert Assert.That(forcePrimitives, Does.Not.Contain(primitive)); Assert.That(crackPrimitives, Does.Not.Contain(primitive)); Assert.That(valueDiagramPrimitives, Does.Not.Contain(primitive)); Assert.That(curvaturePrimitives, Does.Not.Contain(primitive)); Assert.That(repositoryPrimitives, Does.Not.Contain(primitive)); } [Test] public void Remove_MultipleEntities_RemovesAll() { // Arrange var toRemove = new List(repositoryPrimitives); // Act operation.Remove(toRemove); // Assert Assert.That(forcePrimitives, Is.Empty); Assert.That(crackPrimitives, Is.Empty); Assert.That(valueDiagramPrimitives, Is.Empty); Assert.That(curvaturePrimitives, Is.Empty); Assert.That(repositoryPrimitives, Is.Empty); } [Test] public void RemoveAll_UnsupportedCalculatorType_ThrowsStructureHelperException() { // Arrange Mock calculator = new Mock(); repositoryMock.Setup(r => r.Calculators) .Returns(new List() { calculator.Object}); // Act + Assert Assert.Throws(() => operation.RemoveAll()); } } }