public void Constructor_PropertiesSet_ExpectedValues()
        {
            // Setup
            var random            = new Random(21);
            var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike);

            var constructionProperties = new AssessmentSectionMergeData.ConstructionProperties
            {
                MergePiping = random.NextBoolean(),
                MergeGrassCoverErosionInwards  = random.NextBoolean(),
                MergeMacroStabilityInwards     = random.NextBoolean(),
                MergeMicrostability            = random.NextBoolean(),
                MergeStabilityStoneCover       = random.NextBoolean(),
                MergeWaveImpactAsphaltCover    = random.NextBoolean(),
                MergeWaterPressureAsphaltCover = random.NextBoolean(),
                MergeGrassCoverErosionOutwards = random.NextBoolean(),
                MergeGrassCoverSlipOffOutwards = random.NextBoolean(),
                MergeGrassCoverSlipOffInwards  = random.NextBoolean(),
                MergeHeightStructures          = random.NextBoolean(),
                MergeClosingStructures         = random.NextBoolean(),
                MergePipingStructure           = random.NextBoolean(),
                MergeStabilityPointStructures  = random.NextBoolean(),
                MergeDuneErosion = random.NextBoolean()
            };

            // Call
            var mergeData = new AssessmentSectionMergeData(assessmentSection, constructionProperties);

            // Assert
            Assert.AreSame(assessmentSection, mergeData.AssessmentSection);
            Assert.AreEqual(constructionProperties.MergePiping, mergeData.MergePiping);
            Assert.AreEqual(constructionProperties.MergeGrassCoverErosionInwards, mergeData.MergeGrassCoverErosionInwards);
            Assert.AreEqual(constructionProperties.MergeMacroStabilityInwards, mergeData.MergeMacroStabilityInwards);
            Assert.AreEqual(constructionProperties.MergeMicrostability, mergeData.MergeMicrostability);
            Assert.AreEqual(constructionProperties.MergeStabilityStoneCover, mergeData.MergeStabilityStoneCover);
            Assert.AreEqual(constructionProperties.MergeWaveImpactAsphaltCover, mergeData.MergeWaveImpactAsphaltCover);
            Assert.AreEqual(constructionProperties.MergeWaterPressureAsphaltCover, mergeData.MergeWaterPressureAsphaltCover);
            Assert.AreEqual(constructionProperties.MergeGrassCoverErosionOutwards, mergeData.MergeGrassCoverErosionOutwards);
            Assert.AreEqual(constructionProperties.MergeGrassCoverSlipOffOutwards, mergeData.MergeGrassCoverSlipOffOutwards);
            Assert.AreEqual(constructionProperties.MergeGrassCoverSlipOffInwards, mergeData.MergeGrassCoverSlipOffInwards);
            Assert.AreEqual(constructionProperties.MergeHeightStructures, mergeData.MergeHeightStructures);
            Assert.AreEqual(constructionProperties.MergeClosingStructures, mergeData.MergeClosingStructures);
            Assert.AreEqual(constructionProperties.MergePipingStructure, mergeData.MergePipingStructure);
            Assert.AreEqual(constructionProperties.MergeStabilityPointStructures, mergeData.MergeStabilityPointStructures);
            Assert.AreEqual(constructionProperties.MergeDuneErosion, mergeData.MergeDuneErosion);
            Assert.AreSame(constructionProperties.MergeSpecificFailureMechanisms, mergeData.MergeSpecificFailureMechanisms);
        }
        public AssessmentSectionMergeData GetMergeData(AssessmentSection assessmentSection)
        {
            if (assessmentSection == null)
            {
                throw new ArgumentNullException(nameof(assessmentSection));
            }

            SetDataGridViewData(assessmentSection);

            if (ShowDialog() == DialogResult.OK)
            {
                var constructionProperties = new AssessmentSectionMergeData.ConstructionProperties
                {
                    MergePiping = FailureMechanismIsSelectedToMerge <PipingFailureMechanism>(),
                    MergeGrassCoverErosionInwards  = FailureMechanismIsSelectedToMerge <GrassCoverErosionInwardsFailureMechanism>(),
                    MergeMacroStabilityInwards     = FailureMechanismIsSelectedToMerge <MacroStabilityInwardsFailureMechanism>(),
                    MergeMicrostability            = FailureMechanismIsSelectedToMerge <MicrostabilityFailureMechanism>(),
                    MergeStabilityStoneCover       = FailureMechanismIsSelectedToMerge <StabilityStoneCoverFailureMechanism>(),
                    MergeWaveImpactAsphaltCover    = FailureMechanismIsSelectedToMerge <WaveImpactAsphaltCoverFailureMechanism>(),
                    MergeWaterPressureAsphaltCover = FailureMechanismIsSelectedToMerge <WaterPressureAsphaltCoverFailureMechanism>(),
                    MergeGrassCoverErosionOutwards = FailureMechanismIsSelectedToMerge <GrassCoverErosionOutwardsFailureMechanism>(),
                    MergeGrassCoverSlipOffOutwards = FailureMechanismIsSelectedToMerge <GrassCoverSlipOffOutwardsFailureMechanism>(),
                    MergeGrassCoverSlipOffInwards  = FailureMechanismIsSelectedToMerge <GrassCoverSlipOffInwardsFailureMechanism>(),
                    MergeHeightStructures          = FailureMechanismIsSelectedToMerge <HeightStructuresFailureMechanism>(),
                    MergeClosingStructures         = FailureMechanismIsSelectedToMerge <ClosingStructuresFailureMechanism>(),
                    MergePipingStructure           = FailureMechanismIsSelectedToMerge <PipingStructureFailureMechanism>(),
                    MergeStabilityPointStructures  = FailureMechanismIsSelectedToMerge <StabilityPointStructuresFailureMechanism>(),
                    MergeDuneErosion = FailureMechanismIsSelectedToMerge <DuneErosionFailureMechanism>()
                };
                constructionProperties.MergeSpecificFailureMechanisms.AddRange(GetSelectedSpecificFailureMechanismsToMerge());

                return(new AssessmentSectionMergeData(assessmentSection, constructionProperties));
            }

            return(null);
        }