public void ChangeComposition_SetNewValue_ChangesCompositionAndReturnAffectedObjects(AssessmentSectionComposition oldComposition,
                                                                                             AssessmentSectionComposition newComposition)
        {
            // Setup
            var mocks        = new MockRepository();
            var viewCommands = mocks.Stub <IViewCommands>();

            mocks.ReplayAll();

            var assessmentSection = new AssessmentSection(oldComposition);

            var handler = new AssessmentSectionCompositionChangeHandler(viewCommands);

            // Call
            IEnumerable <IObservable> affectedObjects = handler.ChangeComposition(assessmentSection, newComposition);

            // Assert
            IEnumerable <IObservable> expectedAffectedObjects = new List <IObservable>(assessmentSection.GetFailureMechanisms())
            {
                assessmentSection,
                assessmentSection.FailureMechanismContribution
            };

            CollectionAssert.AreEquivalent(expectedAffectedObjects, affectedObjects);
            mocks.VerifyAll();
        }
        public void Constructor_WithViewCommands_ExpectedValues()
        {
            // Setup
            var mocks        = new MockRepository();
            var viewCommands = mocks.Stub <IViewCommands>();

            mocks.ReplayAll();

            // Call
            var handler = new AssessmentSectionCompositionChangeHandler(viewCommands);

            // Assert
            Assert.IsInstanceOf <IAssessmentSectionCompositionChangeHandler>(handler);
            mocks.VerifyAll();
        }
        public void ChangeComposition_AssessmentSectionNull_ThrowArgumentNullException()
        {
            // Setup
            var mocks        = new MockRepository();
            var viewCommands = mocks.Stub <IViewCommands>();

            mocks.ReplayAll();

            var handler = new AssessmentSectionCompositionChangeHandler(viewCommands);

            // Call
            void Call() => handler.ChangeComposition(null, AssessmentSectionComposition.Dike);

            // Assert
            string paramName = Assert.Throws <ArgumentNullException>(Call).ParamName;

            Assert.AreEqual("assessmentSection", paramName);
            mocks.VerifyAll();
        }
        public void ChangeComposition_ChangeToSameValue_DoNothing()
        {
            // Setup
            var mocks        = new MockRepository();
            var viewCommands = mocks.StrictMock <IViewCommands>();

            mocks.ReplayAll();

            AssessmentSection            assessmentSection   = TestDataGenerator.GetAssessmentSectionWithAllCalculationConfigurations();
            AssessmentSectionComposition originalComposition = assessmentSection.Composition;

            ICalculation[] calculationsWithOutput = assessmentSection.GetFailureMechanisms()
                                                    .OfType <ICalculatableFailureMechanism>()
                                                    .SelectMany(fm => fm.Calculations)
                                                    .Where(c => c.HasOutput)
                                                    .ToArray();

            IEnumerable <DuneLocationCalculation> duneLocationCalculationsWithOutput = assessmentSection.DuneErosion.DuneLocationCalculationsForUserDefinedTargetProbabilities.SelectMany(tp => tp.DuneLocationCalculations)
                                                                                       .Where(HasDuneLocationCalculationOutput)
                                                                                       .ToArray();

            IEnumerable <HydraulicBoundaryLocationCalculation> hydraulicBoundaryLocationCalculationsWithOutput = assessmentSection.WaterLevelCalculationsForMaximumAllowableFloodingProbability.Where(HasHydraulicBoundaryLocationCalculationOutput)
                                                                                                                 .Concat(assessmentSection.WaterLevelCalculationsForSignalFloodingProbability.Where(HasHydraulicBoundaryLocationCalculationOutput))
                                                                                                                 .Concat(assessmentSection.WaterLevelCalculationsForUserDefinedTargetProbabilities.SelectMany(tp => tp.HydraulicBoundaryLocationCalculations))
                                                                                                                 .ToArray();

            var handler = new AssessmentSectionCompositionChangeHandler(viewCommands);

            // Call
            IEnumerable <IObservable> affectedObjects = handler.ChangeComposition(assessmentSection, originalComposition);

            // Assert
            Assert.True(calculationsWithOutput.All(c => c.HasOutput),
                        "All calculations that had output still have them.");

            Assert.True(duneLocationCalculationsWithOutput.All(HasDuneLocationCalculationOutput));
            Assert.True(hydraulicBoundaryLocationCalculationsWithOutput.All(calc => calc.HasOutput));

            CollectionAssert.IsEmpty(affectedObjects);
            mocks.VerifyAll();
        }
        public void ChangeComposition_InAssemblyChanged_CloseViewsForNotInAssemblyFailureMechanisms(AssessmentSectionComposition oldComposition,
                                                                                                    AssessmentSectionComposition newComposition,
                                                                                                    int expectedNumberOfCalls)
        {
            // Setup
            var mocks        = new MockRepository();
            var viewCommands = mocks.StrictMock <IViewCommands>();

            viewCommands.Expect(vc => vc.RemoveAllViewsForItem(Arg <IFailureMechanism> .Matches(fm => !fm.InAssembly)))
            .Repeat.Times(expectedNumberOfCalls);
            mocks.ReplayAll();

            var assessmentSection = new AssessmentSection(oldComposition);

            var handler = new AssessmentSectionCompositionChangeHandler(viewCommands);

            // Call
            handler.ChangeComposition(assessmentSection, newComposition);

            // Assert
            mocks.VerifyAll();
        }