Пример #1
0
        public void GetAppliedLiquidStoredManure()
        {
            //Arrange
            var repository = Substitute.For <IAgriConfigurationRepository>();

            repository.GetLiquidMaterialApplicationUSGallonsPerAcreRateConversion()
            .Returns(new List <LiquidMaterialApplicationUSGallonsPerAcreRateConversion>()
            {
                new LiquidMaterialApplicationUSGallonsPerAcreRateConversion()
                {
                    ApplicationRateUnit        = ApplicationRateUnits.ImperialGallonsPerAcre,
                    USGallonsPerAcreConversion = 1.20095m
                }
            });
            var convertCalculator = new ManureUnitConversionCalculator(repository);
            var calculator        = new ManureApplicationCalculator(convertCalculator);
            var farmManure        = new FarmManure()
            {
                sourceOfMaterialId = "StorageSystem, 1", stored_imported = NutrientAnalysisTypes.Stored
            };

            //Act
            var result = calculator.GetAppliedStoredManure(_yearData, farmManure);

            //Assess
            Assert.IsNotNull(result);
            Assert.IsTrue(result.FieldAppliedManures.Count > 0);
            Assert.IsNotNull(result.FieldAppliedManures[0]);
            Assert.IsNotNull(result.FieldAppliedManures[0].USGallonsApplied);
            Assert.IsNotNull(result.FieldAppliedManures[0].USGallonsApplied.Value == 120.0950000M);
            Assert.IsTrue(result.TotalAnnualManureToApply == 2989m);
            Assert.IsTrue(result.WholePercentAppiled == 4);
        }
Пример #2
0
        public void GetAppliedManureForStoredFarmManure()
        {
            //Arrange
            var repository = Substitute.For <IAgriConfigurationRepository>();

            repository.GetLiquidMaterialApplicationUSGallonsPerAcreRateConversion()
            .Returns(new List <LiquidMaterialApplicationUSGallonsPerAcreRateConversion>()
            {
                new LiquidMaterialApplicationUSGallonsPerAcreRateConversion()
                {
                    ApplicationRateUnit        = ApplicationRateUnits.ImperialGallonsPerAcre,
                    USGallonsPerAcreConversion = 1.20095m
                }
            });

            var convertCalculator          = new ManureUnitConversionCalculator(repository);
            var calculator                 = new ManureApplicationCalculator(convertCalculator);
            var farmManure                 = _yearData.farmManures.Single(fm => fm.id == 1);
            var expectedUnAllocatedMessage =
                "Storage System: Liquid Storage System , Material: Heavy Feeders Unallocated 2868.905000000 US gallons - 100% of Total Stored";

            //Act
            var result = calculator.GetAppliedManure(_yearData, farmManure);

            //Assess
            Assert.IsNotNull(result);
            Assert.IsNotNull(result as AppliedStoredManure);
            Assert.IsTrue(result.FieldAppliedManures.Count > 0);
            Assert.IsNotNull(result.FieldAppliedManures[0]);
            Assert.IsNotNull(result.FieldAppliedManures[0].USGallonsApplied);
            Assert.IsNotNull(result.FieldAppliedManures[0].USGallonsApplied.Value == 120.0950000M);
            Assert.IsTrue(result.TotalAnnualManureToApply == 2989m);
            Assert.IsTrue(result.WholePercentAppiled == 4);
            Assert.IsTrue((result as AppliedStoredManure).ListUnallocatedMaterialAsPercentOfTotalStored[0] == expectedUnAllocatedMessage);
        }
Пример #3
0
        public void GetAppliedManureForImportedManure()
        {
            //Arrange
            var repository = Substitute.For <IAgriConfigurationRepository>();

            repository.GetSolidMaterialApplicationTonPerAcreRateConversions()
            .Returns(new List <SolidMaterialApplicationTonPerAcreRateConversion>()
            {
                new SolidMaterialApplicationTonPerAcreRateConversion
                {
                    ApplicationRateUnit   = ApplicationRateUnits.TonsPerAcre,
                    TonsPerAcreConversion = "1"
                }
            });
            var convertCalculator = new ManureUnitConversionCalculator(repository);
            var calculator        = new ManureApplicationCalculator(convertCalculator);
            var farmManure        = _yearData.farmManures.Single(fm => fm.id == 2);

            //Act
            var result = calculator.GetAppliedManure(_yearData, farmManure);

            //Assess
            Assert.IsNotNull(result);
            Assert.IsNotNull(result as AppliedImportedManure);
            Assert.IsTrue(result.FieldAppliedManures.Count > 0);
            Assert.IsNotNull(result.FieldAppliedManures[0]);
            Assert.IsNotNull(result.FieldAppliedManures[0].TonsApplied);
            Assert.IsNotNull(result.FieldAppliedManures[0].TonsApplied.Value == 100);
            Assert.IsTrue(result.TotalAnnualManureToApply == 1000m);
            Assert.IsTrue(result.WholePercentAppiled == 10);
        }
Пример #4
0
        public void GetSolidsTonsPerAcreApplicationRateCubicYardsInputWithManureId()
        {
            //Arrange
            var repository = Substitute.For <IAgriConfigurationRepository>();

            repository.GetSolidMaterialApplicationTonPerAcreRateConversions()
            .Returns(new List <SolidMaterialApplicationTonPerAcreRateConversion>()
            {
                new SolidMaterialApplicationTonPerAcreRateConversion
                {
                    ApplicationRateUnit   = ApplicationRateUnits.CubicYardsPerAcre,
                    TonsPerAcreConversion = "1*density"
                }
            });
            repository.GetManure("1")
            .ReturnsForAnyArgs(new Manure
            {
                CubicYardConversion = .51m
            });

            var calculator = new ManureUnitConversionCalculator(repository);

            var manureId            = 1; //"Beef-feedlot, solid (dry)"
            var amount              = 10;
            var expectedTonsPerAcre = 5.1m;

            //Act
            var resultTonsPerAcre = calculator.GetSolidsTonsPerAcreApplicationRate(manureId, amount, ApplicationRateUnits.CubicYardsPerAcre);

            //Assert
            Assert.AreEqual(expectedTonsPerAcre, Math.Round(resultTonsPerAcre, 1));
        }
Пример #5
0
        public void GetVolumeSuccessfullyForTonsInput()
        {
            //Arrange
            var repository = Substitute.For <IAgriConfigurationRepository>();

            repository.GetSolidMaterialsConversionFactors()
            .Returns(new List <SolidMaterialsConversionFactor>()
            {
                new SolidMaterialsConversionFactor
                {
                    InputUnit         = AnnualAmountUnits.tons,
                    CubicYardsOutput  = "1/density",
                    CubicMetersOutput = "(1/density)*0.764555",
                    MetricTonsOutput  = "1"
                }
            });

            var calculator          = new ManureUnitConversionCalculator(repository);
            var moisture            = 50m;
            var amount              = 6;
            var expectedCubicYards  = 12;
            var expectedCubicMeters = 9;
            var expectedMetricTons  = 6;

            //Act
            var cubicYardsResult  = calculator.GetCubicYardsVolume(ManureMaterialType.Solid, moisture, amount, AnnualAmountUnits.tons);
            var cubicMetersResult = calculator.GetCubicMetersVolume(ManureMaterialType.Solid, moisture, amount, AnnualAmountUnits.tons);
            var metricTonsResult  = calculator.GetTonsWeight(ManureMaterialType.Solid, moisture, amount, AnnualAmountUnits.tons);

            //Assert
            Assert.AreEqual(expectedCubicYards, Math.Round(cubicYardsResult));
            Assert.AreEqual(expectedCubicMeters, Math.Round(cubicMetersResult));
            Assert.AreEqual(expectedMetricTons, Math.Round(metricTonsResult));
        }
        public void GetAppliedSolidImportedManure()
        {
            //Arrange
            var repository = Substitute.For <IAgriConfigurationRepository>();

            repository.GetSolidMaterialApplicationTonPerAcreRateConversions()
            .Returns(new List <SolidMaterialApplicationTonPerAcreRateConversion>()
            {
                new SolidMaterialApplicationTonPerAcreRateConversion
                {
                    ApplicationRateUnit   = ApplicationRateUnits.TonsPerAcre,
                    TonsPerAcreConversion = "1"
                }
            });
            var convertCalculator = new ManureUnitConversionCalculator(repository);
            var calculator        = new ManureApplicationCalculator(convertCalculator, repository);
            //var farmManure = new FarmManure {sourceOfMaterialId = "Imported, 1", stored_imported = NutrientAnalysisTypes.Imported};
            var farmManure = _yearData.FarmManures.Single(fm => fm.Id == 2);

            //Act
            var result = calculator.GetAppliedImportedManure(_yearData, farmManure);

            //Assess
            result.ShouldNotBeNull();
            result.FieldAppliedManures.Count.ShouldBeGreaterThan(0);
            result.FieldAppliedManures[0].ShouldNotBeNull();
            result.FieldAppliedManures[0].TonsApplied.ShouldNotBeNull();
            result.FieldAppliedManures[0].TonsApplied.Value.ShouldBe(100);
            result.TotalAnnualManureToApply.ShouldBe(1000m);
            result.WholePercentAppiled.ShouldBe(10);
        }
Пример #7
0
        public void GetSolidsTonsPerAcreApplicationRateTonnesPerHectareInput()
        {
            //Arrange
            var repository = Substitute.For <IAgriConfigurationRepository>();

            repository.GetSolidMaterialApplicationTonPerAcreRateConversions()
            .Returns(new List <SolidMaterialApplicationTonPerAcreRateConversion>()
            {
                new SolidMaterialApplicationTonPerAcreRateConversion
                {
                    ApplicationRateUnit   = ApplicationRateUnits.TonnesPerHecatre,
                    TonsPerAcreConversion = "1*1.10231/2.47105"
                }
            });

            var calculator = new ManureUnitConversionCalculator(repository);

            var moisture            = 75m;
            var amount              = 40;
            var expectedTonsPerAcre = 17.8m;

            //Act
            var resultTonsPerAcre = calculator.GetSolidsTonsPerAcreApplicationRate(moisture, amount, ApplicationRateUnits.TonnesPerHecatre);

            //Assert
            Assert.AreEqual(expectedTonsPerAcre, Math.Round(resultTonsPerAcre, 1));
        }
Пример #8
0
        public void GetVolumeSuccessfullyForCubicYardsInput()
        {
            //Arrange
            var repository = Substitute.For <IAgriConfigurationRepository>();

            repository.GetSolidMaterialsConversionFactors()
            .Returns(new List <SolidMaterialsConversionFactor>()
            {
                new SolidMaterialsConversionFactor
                {
                    InputUnit         = AnnualAmountUnits.CubicYards,
                    CubicYardsOutput  = "1",
                    CubicMetersOutput = "0.764555",
                    MetricTonsOutput  = "1*density"
                }
            });

            var calculator          = new ManureUnitConversionCalculator(repository);
            var moisture            = 50m;
            var amount              = 5;
            var expectedCubicYards  = 5m;
            var expectedCubicMeters = 4m;
            var expectedMetricTons  = 2m;

            //Act
            var cubicYardsResult  = calculator.GetCubicYardsVolume(ManureMaterialType.Solid, moisture, amount, AnnualAmountUnits.CubicYards);
            var cubicMetersResult = calculator.GetCubicMetersVolume(ManureMaterialType.Solid, moisture, amount, AnnualAmountUnits.CubicYards);
            var tonsResult        = calculator.GetTonsWeight(ManureMaterialType.Solid, moisture, amount, AnnualAmountUnits.CubicYards);

            //Assert
            expectedCubicYards.ShouldBe(Math.Round(cubicYardsResult));
            expectedCubicMeters.ShouldBe(Math.Round(cubicMetersResult));
            expectedMetricTons.ShouldBe(Math.Round(tonsResult));
        }
Пример #9
0
        public void GetSolidsTonsPerAcreApplicationRateCubicMetersPerHectareInput()
        {
            //Arrange
            var repository = Substitute.For <IAgriConfigurationRepository>();

            repository.GetSolidMaterialApplicationTonPerAcreRateConversions()
            .Returns(new List <SolidMaterialApplicationTonPerAcreRateConversion>()
            {
                new SolidMaterialApplicationTonPerAcreRateConversion
                {
                    ApplicationRateUnit   = ApplicationRateUnits.CubicMetersPerHectare,
                    TonsPerAcreConversion = "1*1.30795*density/2.47105"
                }
            });

            var calculator = new ManureUnitConversionCalculator(repository);

            var moisture            = 75m;
            var amount              = 10;
            var expectedTonsPerAcre = 3.7m;

            //Act
            var resultTonsPerAcre = calculator.GetSolidsTonsPerAcreApplicationRate(moisture, amount, ApplicationRateUnits.CubicMetersPerHectare);

            //Assert
            expectedTonsPerAcre.ShouldBe(Math.Round(resultTonsPerAcre, 1));
        }
Пример #10
0
        public void GetDensityFactoredConversion()
        {
            //Arrange
            var repository = Substitute.For <IAgriConfigurationRepository>();
            var calculator = new ManureUnitConversionCalculator(repository);

            var expectedLessThan40     = .27m;
            var expectedBetween40And82 = 0.483825m;
            var expectedHigherThan82   = 0.837m;

            var lessThan40Result     = calculator.GetDensity(35);
            var between40And82Result = calculator.GetDensity(50);
            var higherThan82Result   = calculator.GetDensity(83);

            Assert.AreEqual(expectedLessThan40, lessThan40Result);
            Assert.AreEqual(expectedBetween40And82, between40And82Result);
            Assert.AreEqual(expectedHigherThan82, higherThan82Result);
        }
Пример #11
0
        public void GetCalculatedSeparatedManure()
        {
            //Arrange

            var repository = Substitute.For <IAgriConfigurationRepository>();

            repository.GetSolidMaterialsConversionFactors()
            .Returns(new List <SolidMaterialsConversionFactor>()
            {
                new SolidMaterialsConversionFactor
                {
                    InputUnit         = AnnualAmountUnits.CubicMeters,
                    CubicYardsOutput  = "1.30795",
                    CubicMetersOutput = "1",
                    MetricTonsOutput  = "1.30795*density"
                }
            });

            repository.GetLiquidMaterialsConversionFactors()
            .Returns(new List <LiquidMaterialsConversionFactor>()
            {
                new LiquidMaterialsConversionFactor
                {
                    InputUnit = AnnualAmountUnits.CubicMeters, USGallonsOutput = 264.172M
                }
            });

            var conversionCalculator = new ManureUnitConversionCalculator(repository);

            var totalLiquidVolumeToSeparate = 2789687;
            var wholePercentSeparation      = 10;
            var calculator = new ManureLiquidSolidSeparationCalculator(conversionCalculator);

            //Act
            var actual = calculator.CalculateSeparatedManure(totalLiquidVolumeToSeparate, wholePercentSeparation);
            var expectedLiquidsUSGallons = 2510718;
            //38580
            var expectedSolidsTons = 925;

            //Assert
            Assert.AreEqual(expectedLiquidsUSGallons, actual.LiquidUSGallons);
            Assert.AreEqual(expectedSolidsTons, actual.SolidTons);
        }
Пример #12
0
        public void GetLiquidVolumeSuccessfullyForCubicMetersInput()
        {
            //Arrange
            var repository = Substitute.For <IAgriConfigurationRepository>();

            repository.GetLiquidMaterialsConversionFactors()
            .Returns(new List <LiquidMaterialsConversionFactor>()
            {
                new LiquidMaterialsConversionFactor
                {
                    InputUnit = AnnualAmountUnits.CubicMeters, USGallonsOutput = 1
                }
            });

            var calculator        = new ManureUnitConversionCalculator(repository);
            var expectedUSGallons = 1;

            //Act
            var usGallonsResult = calculator.GetUSGallonsVolume(ManureMaterialType.Liquid, 1, AnnualAmountUnits.CubicMeters);

            //Assert
            Assert.AreEqual(expectedUSGallons, usGallonsResult);
        }
Пример #13
0
        public void GetLiquidVolumeSuccessfullyForImpGallonsInput()
        {
            //Arrange
            var repository = Substitute.For <IAgriConfigurationRepository>();

            repository.GetLiquidMaterialsConversionFactors()
            .Returns(new List <LiquidMaterialsConversionFactor>()
            {
                new LiquidMaterialsConversionFactor
                {
                    InputUnit = AnnualAmountUnits.ImperialGallons, USGallonsOutput = 1
                }
            });

            var calculator = new ManureUnitConversionCalculator(repository);
            var expected   = 1m;

            //Act
            var result = calculator.GetUSGallonsVolume(ManureMaterialType.Liquid, 1, AnnualAmountUnits.ImperialGallons);

            //Assert
            expected.ShouldBe(result);
        }
Пример #14
0
        public void GetCalculatedSeparatedManureWithRunOffAndUncoveredArea()
        {
            //Arrange
            var repository = Substitute.For <IAgriConfigurationRepository>();

            repository.GetSolidMaterialsConversionFactors()
            .Returns(new List <SolidMaterialsConversionFactor>()
            {
                new SolidMaterialsConversionFactor
                {
                    InputUnit         = AnnualAmountUnits.CubicMeters,
                    CubicYardsOutput  = "1.30795",
                    CubicMetersOutput = "1",
                    MetricTonsOutput  = "1.30795*density"
                }
            });

            repository.GetLiquidMaterialsConversionFactors()
            .Returns(new List <LiquidMaterialsConversionFactor>()
            {
                new LiquidMaterialsConversionFactor
                {
                    InputUnit = AnnualAmountUnits.CubicMeters, USGallonsOutput = 264.172M
                }
            });

            var storage = new ManureStorageSystem
            {
                ManureMaterialType         = ManureMaterialType.Liquid,
                GetsRunoffFromRoofsOrYards = true,
                RunoffAreaSquareFeet       = 4000,
                ManureStorageStructures    =
                {
                    new ManureStorageStructure
                    {
                        UncoveredAreaSquareFeet = 3000
                    }
                },
                ImportedManuresIncludedInSystem = new List <ImportedManure>
                {
                    new ImportedManure
                    {
                        ManureType = ManureMaterialType.Liquid,
                        AnnualAmountUSGallonsVolume = 100000,
                        Units = AnnualAmountUnits.USGallons
                    }
                }
            };

            var conversionCalculator = new ManureUnitConversionCalculator(repository);
            //171,797 + 100000 = 271797


            var totalLiquidVolumeToSeparate = storage.AnnualTotalAmountofManureInStorage;
            var wholePercentSeparation      = 10;
            var calculator = new ManureLiquidSolidSeparationCalculator(conversionCalculator);

            //Act
            var actual = calculator.CalculateSeparatedManure(totalLiquidVolumeToSeparate, wholePercentSeparation);
            var expectedLiquidsUSGallons = 244617;
            var expectedSolidsTons       = 90;

            //Assert
            Assert.AreEqual(Convert.ToInt32(storage.AnnualTotalPrecipitation), 171797);
            Assert.AreEqual(expectedLiquidsUSGallons, Convert.ToInt32(actual.LiquidUSGallons));
            Assert.AreEqual(expectedSolidsTons, actual.SolidTons);
        }