public void CalculateAssessmentSectionAssemblyGroupBoundaries_KernelThrowsAssemblyException_ThrowAssessmentSectionAssemblyGroupBoundariesCalculatorException()
        {
            // Setup
            var    random = new Random(11);
            double maximumAllowableFloodingProbability = random.NextDouble(0.5, 1.0);
            double signalFloodingProbability           = random.NextDouble(0.0, 0.5);

            using (new AssemblyToolKernelFactoryConfig())
            {
                var factory = (TestAssemblyToolKernelFactory)AssemblyToolKernelFactory.Instance;
                AssemblyCategoryLimitsKernelStub kernel = factory.LastCreatedAssemblyCategoryLimitsKernel;
                kernel.ThrowAssemblyExceptionOnCalculate = true;

                var calculator = new AssessmentSectionAssemblyGroupBoundariesCalculator(factory);

                // Call
                void Call() => calculator.CalculateAssessmentSectionAssemblyGroupBoundaries(signalFloodingProbability, maximumAllowableFloodingProbability);

                // Assert
                var exception = Assert.Throws <AssessmentSectionAssemblyGroupBoundariesCalculatorException>(Call);
                Assert.IsInstanceOf <AssemblyException>(exception.InnerException);
                Assert.AreEqual(AssemblyErrorMessageCreator.CreateErrorMessage(new[]
                {
                    AssemblyErrorMessageTestHelper.Create(string.Empty, EAssemblyErrors.EmptyResultsList)
                }), exception.Message);
            }
        }
        public void Constructor_ValidParameters_ExpectedValues()
        {
            // Setup
            var mocks   = new MockRepository();
            var factory = mocks.Stub <IAssemblyToolKernelFactory>();

            mocks.ReplayAll();

            // Call
            var calculator = new AssessmentSectionAssemblyGroupBoundariesCalculator(factory);

            // Assert
            Assert.IsInstanceOf <IAssessmentSectionAssemblyGroupBoundariesCalculator>(calculator);
            mocks.VerifyAll();
        }
        public void CalculateAssessmentSectionAssemblyGroupBoundaries_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator()
        {
            // Setup
            var    random = new Random(11);
            double maximumAllowableFloodingProbability = random.NextDouble(0.5, 1.0);
            double signalFloodingProbability           = random.NextDouble(0.0, 0.5);
            CategoriesList <AssessmentSectionCategory> assessmentSectionCategories = CreateAssessmentSectionCategories();

            using (new AssemblyToolKernelFactoryConfig())
            {
                var factory = (TestAssemblyToolKernelFactory)AssemblyToolKernelFactory.Instance;
                AssemblyCategoryLimitsKernelStub kernel = factory.LastCreatedAssemblyCategoryLimitsKernel;
                kernel.AssessmentSectionCategoryLimits = assessmentSectionCategories;

                var calculator = new AssessmentSectionAssemblyGroupBoundariesCalculator(factory);

                // Call
                IEnumerable <AssessmentSectionAssemblyGroupBoundaries> result = calculator.CalculateAssessmentSectionAssemblyGroupBoundaries(signalFloodingProbability, maximumAllowableFloodingProbability);

                // Assert
                AssessmentSectionAssemblyGroupBoundariesAssert.AssertAssessmentSectionAssemblyGroupBoundaries(assessmentSectionCategories, result);
            }
        }
        public void CalculateAssessmentSectionAssemblyGroupBoundaries_WithInput_InputCorrectlySetToKernel()
        {
            // Setup
            var    random = new Random(11);
            double maximumAllowableFloodingProbability = random.NextDouble(0.5, 1.0);
            double signalFloodingProbability           = random.NextDouble(0.0, 0.5);

            using (new AssemblyToolKernelFactoryConfig())
            {
                var factory = (TestAssemblyToolKernelFactory)AssemblyToolKernelFactory.Instance;
                AssemblyCategoryLimitsKernelStub kernel = factory.LastCreatedAssemblyCategoryLimitsKernel;
                kernel.AssessmentSectionCategoryLimits = CreateAssessmentSectionCategories();

                var calculator = new AssessmentSectionAssemblyGroupBoundariesCalculator(factory);

                // Call
                calculator.CalculateAssessmentSectionAssemblyGroupBoundaries(signalFloodingProbability, maximumAllowableFloodingProbability);

                // Assert
                Assert.AreEqual(maximumAllowableFloodingProbability, kernel.AssessmentSection.MaximumAllowableFloodingProbability);
                Assert.AreEqual(signalFloodingProbability, kernel.AssessmentSection.SignalFloodingProbability);
            }
        }