public void Validate_SurfaceLineInvalidDitchPointsOrder_ValidationMessageForInvalidDitchPointsOrder(
            int ditchDikeSidePosition,
            int bottomDitchDikeSidePosition,
            int bottomDitchPolderSidePosition,
            int ditchPolderSidePosition)
        {
            // Setup
            PipingCalculatorInput.ConstructionProperties properties = CreateSimpleConstructionProperties();
            properties.SurfaceLine = new PipingSurfaceLine(string.Empty);

            var input = new PipingCalculatorInput(properties);

            input.SurfaceLine.SetGeometry(new[]
            {
                new Point3D(0, 0, 2),
                new Point3D(1, 0, -3),
                new Point3D(2, 0, -4),
                new Point3D(3, 0, 3)
            });
            input.SurfaceLine.SetDitchDikeSideAt(input.SurfaceLine.Points.ElementAt(ditchDikeSidePosition));
            input.SurfaceLine.SetBottomDitchDikeSideAt(input.SurfaceLine.Points.ElementAt(bottomDitchDikeSidePosition));
            input.SurfaceLine.SetBottomDitchPolderSideAt(input.SurfaceLine.Points.ElementAt(bottomDitchPolderSidePosition));
            input.SurfaceLine.SetDitchPolderSideAt(input.SurfaceLine.Points.ElementAt(ditchPolderSidePosition));

            var calculation = new PipingCalculator(input, PipingSubCalculatorFactory.Instance);

            // Call
            List <string> validationMessages = calculation.Validate();

            // Assert
            Assert.AreEqual(1, validationMessages.Count);
            Assert.AreEqual("De sloot in de hoogtegeometrie  is niet correct. Niet alle 4 punten zijn gedefinieerd of de volgorde is incorrect.", validationMessages.First());
        }
        public void Validate_SoilProfileBottomAtTopLevel_ValidationMessageForHavingTooHighBottom(double bottom)
        {
            // Setup
            const int top = 0;

            PipingCalculatorInput.ConstructionProperties properties = CreateSimpleConstructionProperties();
            properties.SoilProfile = new PipingSoilProfile(string.Empty, bottom, new[]
            {
                new PipingSoilLayer(top)
                {
                    IsAquifer = true
                }
            }, SoilProfileType.SoilProfile1D);

            var input = new PipingCalculatorInput(properties);

            var calculation = new PipingCalculator(input, PipingSubCalculatorFactory.Instance);

            // Call
            List <string> validationMessages = calculation.Validate();

            // Assert
            string message = $"De onderkant({bottom}) van het ondergrondprofiel is niet laag genoeg. Het moet tenminste {0.001} m onder de bovenkant van de diepste laag ({top}) liggen.";

            Assert.AreEqual(1, validationMessages.Count);
            Assert.AreEqual(message, validationMessages[0]);
        }
        public void Validate_CompleteValidInput_ReturnsNoValidationMessages()
        {
            // Setup
            var input       = new PipingCalculatorInput(CreateSimpleConstructionProperties());
            var calculation = new PipingCalculator(input, PipingSubCalculatorFactory.Instance);

            // Call
            List <string> validationMessages = calculation.Validate();

            // Assert
            Assert.AreEqual(0, validationMessages.Count);
        }
        public void Validate_NoSoilProfileSet_ValidationMessageForHavingNoSoilProfileSelected()
        {
            // Setup
            PipingCalculatorInput.ConstructionProperties properties = CreateSimpleConstructionProperties();
            properties.SoilProfile = null;

            var input = new PipingCalculatorInput(properties);

            var calculation = new PipingCalculator(input, PipingSubCalculatorFactory.Instance);

            // Call
            List <string> validationMessages = calculation.Validate();

            // Assert
            Assert.AreEqual(1, validationMessages.Count);
            Assert.AreEqual("Het ondergrondprofiel is niet gedefinieerd.", validationMessages[0]);
        }
        public void Validate_VolumetricWeightWaterZero_ValidationMessageForVolumetricWeightWater()
        {
            // Setup
            PipingCalculatorInput.ConstructionProperties properties = CreateSimpleConstructionProperties();
            properties.WaterVolumetricWeight = 0;

            var input = new PipingCalculatorInput(properties);

            var calculation = new PipingCalculator(input, PipingSubCalculatorFactory.Instance);

            // Call
            List <string> validationMessages = calculation.Validate();

            // Assert
            Assert.AreEqual(1, validationMessages.Count);
            Assert.AreEqual("Volumiek gewicht water heeft ongeldige waarde (mag niet nul zijn).", validationMessages[0]);
        }
        public void Validate_ThicknessAquiferLayerZero_ValidationMessageForDAquifer()
        {
            // Setup
            PipingCalculatorInput.ConstructionProperties properties = CreateSimpleConstructionProperties();
            properties.ThicknessAquiferLayer = 0;

            var input = new PipingCalculatorInput(properties);

            var calculation = new PipingCalculator(input, PipingSubCalculatorFactory.Instance);

            // Call
            List <string> validationMessages = calculation.Validate();

            // Assert
            Assert.AreEqual(1, validationMessages.Count);
            Assert.AreEqual("Parameter 'DAquifer' (dikte watervoerend pakket) heeft ongeldige waarde (0 of negatief).", validationMessages[0]);
        }
        public void Validate_NegativeBeddingAngle_ValidationMessageForBeddingAngle(double beddingAngle)
        {
            // Setup
            PipingCalculatorInput.ConstructionProperties properties = CreateSimpleConstructionProperties();
            properties.BeddingAngle = beddingAngle;

            var input = new PipingCalculatorInput(properties);

            var calculation = new PipingCalculator(input, PipingSubCalculatorFactory.Instance);

            // Call
            List <string> validationMessages = calculation.Validate();

            // Assert
            Assert.AreEqual(1, validationMessages.Count);
            Assert.AreEqual("Rolweerstandshoek heeft een ongeldige waarde (0 of negatief).", validationMessages[0]);
        }
        public void Validate_ZeroOrNegativeSeepageLength_ValidationMessageForPipingLength(double seepageLength)
        {
            // Setup
            PipingCalculatorInput.ConstructionProperties properties = CreateSimpleConstructionProperties();
            properties.SeepageLength = seepageLength;

            var input = new PipingCalculatorInput(properties);

            var calculation = new PipingCalculator(input, PipingSubCalculatorFactory.Instance);

            // Call
            List <string> validationMessages = calculation.Validate();

            // Assert
            Assert.AreEqual(1, validationMessages.Count);
            Assert.AreEqual("Kwelweglengte heeft ongeldige waarde (0 of negatief).", validationMessages[0]);
        }
        public void Validate_CompleteValidInput_CalculatorsValidated()
        {
            // Setup
            var input = new PipingCalculatorInput(CreateSimpleConstructionProperties());
            var testPipingSubCalculatorFactory = new TestPipingSubCalculatorFactory();
            var calculation = new PipingCalculator(input, testPipingSubCalculatorFactory);

            // Call
            calculation.Validate();

            // Assert
            Assert.IsTrue(testPipingSubCalculatorFactory.LastCreatedEffectiveThicknessCalculator.Validated);
            Assert.IsTrue(testPipingSubCalculatorFactory.LastCreatedHeaveCalculator.Validated);
            Assert.IsTrue(testPipingSubCalculatorFactory.LastCreatedSellmeijerCalculator.Validated);
            Assert.IsTrue(testPipingSubCalculatorFactory.LastCreatedUpliftCalculator.Validated);
            Assert.IsTrue(testPipingSubCalculatorFactory.LastCreatedPipingProfilePropertyCalculator.Validated);
        }
        public void Validate_DampingFactorExitZero_TwoValidationMessageForRExit()
        {
            // Setup
            PipingCalculatorInput.ConstructionProperties properties = CreateSimpleConstructionProperties();
            properties.AssessmentLevel   = (RoundedDouble)0.1;
            properties.DampingFactorExit = 0;

            var input = new PipingCalculatorInput(properties);

            var calculation = new PipingCalculator(input, PipingSubCalculatorFactory.Instance);

            // Call
            List <string> validationMessages = calculation.Validate();

            // Assert
            Assert.AreEqual(1, validationMessages.Count);
            Assert.AreEqual("Parameter 'RExit' (Dempingsfactor bij uittredepunt) mag niet nul zijn.", validationMessages[0]);
        }
        public void Validate_DifferenceAssessmentLevelAndPhreaticLevelExitEqualToSellmeijerReductionFactorTimesThicknessCoverageLayer_ValidationMessageForHRiverHExitRcDTotal(
            double assessmentLevel, double phreaticLevelExit, double sellmeijerReductionFactor, double thicknessCoverageLayer)
        {
            // Setup
            PipingCalculatorInput.ConstructionProperties properties = CreateSimpleConstructionProperties();
            properties.AssessmentLevel           = (RoundedDouble)assessmentLevel;
            properties.PhreaticLevelExit         = phreaticLevelExit;
            properties.SellmeijerReductionFactor = sellmeijerReductionFactor;
            properties.ThicknessCoverageLayer    = thicknessCoverageLayer;

            var input = new PipingCalculatorInput(properties);

            var calculation = new PipingCalculator(input, PipingSubCalculatorFactory.Instance);

            // Call
            List <string> validationMessages = calculation.Validate();

            // Assert
            Assert.AreEqual(1, validationMessages.Count);
            Assert.AreEqual("De term HRiver - HExit - (Rc*DTotal) mag niet nul zijn.", validationMessages[0]);
        }