Index: Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Views/FailureMechanismContributionViewTest.cs =================================================================== diff -u -r64be9f4e7f80d711fc18c93c066b91ba8420ce98 -ra5406118c8b9b1863334b7966adcc408778605a4 --- Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Views/FailureMechanismContributionViewTest.cs (.../FailureMechanismContributionViewTest.cs) (revision 64be9f4e7f80d711fc18c93c066b91ba8420ce98) +++ Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Views/FailureMechanismContributionViewTest.cs (.../FailureMechanismContributionViewTest.cs) (revision a5406118c8b9b1863334b7966adcc408778605a4) @@ -93,6 +93,8 @@ var mocks = new MockRepository(); IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(null, mocks); assessmentSection.Stub(section => section.Composition).Return(AssessmentSectionComposition.Dike); + assessmentSection.Stub(section => section.Attach(null)).IgnoreArguments(); + assessmentSection.Stub(section => section.Detach(null)).IgnoreArguments(); var viewCommands = mocks.Stub(); mocks.ReplayAll(); @@ -119,7 +121,7 @@ } [Test] - public void ReturnPeriodTextBox_Initialize_TextSetToData() + public void Constructor_Always_SetReturnPeriodTextBox() { // Setup var mocks = new MockRepository(); @@ -152,6 +154,8 @@ var mocks = new MockRepository(); IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(null, mocks); assessmentSection.Stub(section => section.Composition).Return(AssessmentSectionComposition.Dike); + assessmentSection.Stub(section => section.Attach(null)).IgnoreArguments(); + assessmentSection.Stub(section => section.Detach(null)).IgnoreArguments(); var viewCommands = mocks.Stub(); mocks.ReplayAll(); @@ -195,10 +199,12 @@ var mocks = new MockRepository(); var viewCommands = mocks.Stub(); - var someMechanism = mocks.StrictMock(testName, testCode, 1); + var someMechanism = mocks.Stub(testName, testCode, 1); someMechanism.Contribution = testContribution; IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(someMechanism, mocks); assessmentSection.Stub(section => section.Composition).Return(AssessmentSectionComposition.Dike); + assessmentSection.Stub(section => section.Attach(null)).IgnoreArguments(); + assessmentSection.Stub(section => section.Detach(null)).IgnoreArguments(); mocks.ReplayAll(); // Call @@ -227,108 +233,9 @@ } [Test] - public void UpdateObserver_ChangeReturnPeriodAndNotify_UpdateReturnPeriodTextBox() - { - // Setup - const int initialReturnPeriod = 100; - const int newReturnPeriod = 200; - - var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike, 1.0 / initialReturnPeriod, 1.0 / 300); - - var mocks = new MockRepository(); - var viewCommands = mocks.Stub(); - mocks.ReplayAll(); - - using (var distributionView = new FailureMechanismContributionView(assessmentSection, viewCommands)) - { - ShowFormWithView(distributionView); - var returnPeriodLabel = new ControlTester(returnPeriodLabelName); - - // Precondition - string initialReturnPeriodLabelText = $"Norm van het dijktraject: 1 / {initialReturnPeriod.ToString(CultureInfo.CurrentCulture)}"; - Assert.AreEqual(initialReturnPeriodLabelText, returnPeriodLabel.Properties.Text); - - // Call - assessmentSection.FailureMechanismContribution.LowerLimitNorm = 1.0 / newReturnPeriod; - assessmentSection.FailureMechanismContribution.NotifyObservers(); - - // Assert - string newReturnPeriodLabelText = $"Norm van het dijktraject: 1 / {newReturnPeriod.ToString(CultureInfo.CurrentCulture)}"; - Assert.AreEqual(newReturnPeriodLabelText, returnPeriodLabel.Properties.Text); - } - - mocks.VerifyAll(); - } - - [Test] - public void UpdateObserver_ChangeNormativeNormAndNotify_UpdateReturnPeriodTextBox() - { - // Setup - const int lowerLimitNorm = 100; - const int signalingNorm = 1000; - - var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike, 1.0 / lowerLimitNorm, 1.0 / signalingNorm); - - var mocks = new MockRepository(); - var viewCommands = mocks.Stub(); - mocks.ReplayAll(); - - using (var distributionView = new FailureMechanismContributionView(assessmentSection, viewCommands)) - { - ShowFormWithView(distributionView); - var returnPeriodLabel = new ControlTester(returnPeriodLabelName); - - // Precondition - string initialReturnPeriodLabelText = $"Norm van het dijktraject: 1 / {lowerLimitNorm.ToString(CultureInfo.CurrentCulture)}"; - Assert.AreEqual(initialReturnPeriodLabelText, returnPeriodLabel.Properties.Text); - - // Call - assessmentSection.FailureMechanismContribution.NormativeNorm = NormType.Signaling; - assessmentSection.FailureMechanismContribution.NotifyObservers(); - - // Assert - string newReturnPeriodLabelText = $"Norm van het dijktraject: 1 / {signalingNorm.ToString(CultureInfo.CurrentCulture)}"; - Assert.AreEqual(newReturnPeriodLabelText, returnPeriodLabel.Properties.Text); - } - - mocks.VerifyAll(); - } - - [Test] - public void GivenFailureMechanismContributionView_WhenObserverNotified_UpdatesDataSource() - { - // Given - var mocks = new MockRepository(); - var viewCommands = mocks.Stub(); - var failureMechanism = mocks.Stub(); - IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(failureMechanism, mocks); - assessmentSection.Stub(section => section.Composition).Return(AssessmentSectionComposition.Dike); - mocks.ReplayAll(); - - using (var view = new FailureMechanismContributionView(assessmentSection, viewCommands)) - { - ShowFormWithView(view); - - // Precondition - var dataGridView = (DataGridView) new ControlTester(dataGridViewControlName).TheObject; - - var invalidated = false; - dataGridView.Invalidated += (sender, args) => invalidated = true; - - // When - assessmentSection.FailureMechanismContribution.NotifyObservers(); - - // Then - Assert.IsTrue(invalidated); - } - - mocks.VerifyAll(); - } - - [Test] [TestCase(true)] [TestCase(false)] - public void GivenFailureMechanismContributionView_WhenSettingData_ProperlyInitializeRelevancyColumn(bool isFailureMechanismRelevant) + public void Constructor_Always_ProperlyInitializeRelevancyColumn(bool isFailureMechanismRelevant) { // Given var mocks = new MockRepository(); @@ -342,28 +249,30 @@ failureMechanism.IsRelevant = isFailureMechanismRelevant; IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(failureMechanism, mocks); assessmentSection.Stub(section => section.Composition).Return(AssessmentSectionComposition.Dike); + assessmentSection.Stub(section => section.Attach(null)).IgnoreArguments(); + assessmentSection.Stub(section => section.Detach(null)).IgnoreArguments(); mocks.ReplayAll(); + // When using (var view = new FailureMechanismContributionView(assessmentSection, viewCommands)) { - // When ShowFormWithView(view); // Then - var dataGridView = (DataGridView) new ControlTester(dataGridViewControlName).TheObject; + var dataGridView = (DataGridView)new ControlTester(dataGridViewControlName).TheObject; DataGridViewRow row = dataGridView.Rows[0]; - var isRelevantGridCell = (DataGridViewCheckBoxCell) row.Cells[isRelevantColumnIndex]; + var isRelevantGridCell = (DataGridViewCheckBoxCell)row.Cells[isRelevantColumnIndex]; Assert.AreEqual(isFailureMechanismRelevant, isRelevantGridCell.Value); } mocks.VerifyAll(); } [Test] - public void GivenFailureMechanismContributionView_WhenSettingDataWithZeroContributionFailureMechanism_ProbabilitySpaceShowsAsNotApplicable() + public void Constructor_FailureMechanismWithZeroContribution_ProbabilitySpaceShowsAsNotApplicable() { - // Given + // Setup var mocks = new MockRepository(); var viewCommands = mocks.Stub(); var failureMechanism = mocks.Stub(); @@ -374,15 +283,17 @@ failureMechanism.Contribution = 0; IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(failureMechanism, mocks); assessmentSection.Stub(section => section.Composition).Return(AssessmentSectionComposition.Dike); + assessmentSection.Stub(section => section.Attach(null)).IgnoreArguments(); + assessmentSection.Stub(section => section.Detach(null)).IgnoreArguments(); mocks.ReplayAll(); + // Call using (var view = new FailureMechanismContributionView(assessmentSection, viewCommands)) { - // When ShowFormWithView(view); - // Then - var dataGridView = (DataGridView) new ControlTester(dataGridViewControlName).TheObject; + // Assert + var dataGridView = (DataGridView)new ControlTester(dataGridViewControlName).TheObject; DataGridViewRow zeroContributionFailureMechanismRow = dataGridView.Rows[0]; DataGridViewCell probabilitySpaceCell = zeroContributionFailureMechanismRow.Cells[probabilitySpaceColumnIndex]; @@ -393,9 +304,9 @@ } [Test] - public void GivenFailureMechanismContributionView_WhenSettingDataWithNormalContributionFailureMechanism_ProbabilitySpaceShowsAsLocalisedText() + public void Constructor_FailureMechanismWithContribution_ProbabilitySpaceShowsAsLocalisedText() { - // Given + // Setup const double contribution = 25.0; const double norm = 1.0 / 30000; @@ -409,16 +320,18 @@ failureMechanism.Contribution = contribution; IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(failureMechanism, mocks); assessmentSection.Stub(section => section.Composition).Return(AssessmentSectionComposition.Dike); + assessmentSection.Stub(section => section.Attach(null)).IgnoreArguments(); + assessmentSection.Stub(section => section.Detach(null)).IgnoreArguments(); assessmentSection.FailureMechanismContribution.NormativeNorm = NormType.Signaling; mocks.ReplayAll(); + // Call using (var view = new FailureMechanismContributionView(assessmentSection, viewCommands)) { - // When ShowFormWithView(view); - // Then - var dataGridView = (DataGridView) new ControlTester(dataGridViewControlName).TheObject; + // Assert + var dataGridView = (DataGridView)new ControlTester(dataGridViewControlName).TheObject; DataGridViewRow zeroContributionFailureMechanismRow = dataGridView.Rows[0]; DataGridViewCell probabilitySpaceCell = zeroContributionFailureMechanismRow.Cells[probabilitySpaceColumnIndex]; @@ -433,10 +346,77 @@ } [Test] + public void GivenView_WhenFailureMechanismContributionNotified_ThenReturnPeriodTextBoxUpdated() + { + // Setup + const int lowerLimitNorm = 100; + const int signalingNorm = 1000; + + var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike, 1.0 / lowerLimitNorm, 1.0 / signalingNorm); + + var mocks = new MockRepository(); + var viewCommands = mocks.Stub(); + mocks.ReplayAll(); + + using (var distributionView = new FailureMechanismContributionView(assessmentSection, viewCommands)) + { + ShowFormWithView(distributionView); + var returnPeriodLabel = new ControlTester(returnPeriodLabelName); + + // Precondition + string initialReturnPeriodLabelText = $"Norm van het dijktraject: 1 / {lowerLimitNorm.ToString(CultureInfo.CurrentCulture)}"; + Assert.AreEqual(initialReturnPeriodLabelText, returnPeriodLabel.Properties.Text); + + // Call + assessmentSection.FailureMechanismContribution.NormativeNorm = NormType.Signaling; + assessmentSection.FailureMechanismContribution.NotifyObservers(); + + // Assert + string newReturnPeriodLabelText = $"Norm van het dijktraject: 1 / {signalingNorm.ToString(CultureInfo.CurrentCulture)}"; + Assert.AreEqual(newReturnPeriodLabelText, returnPeriodLabel.Properties.Text); + } + + mocks.VerifyAll(); + } + + [Test] + public void GivenFailureMechanismContributionView_WhenFailureMechanismContributionNotified_ThenDataGridViewInvalidated() + { + // Given + var mocks = new MockRepository(); + var viewCommands = mocks.Stub(); + var failureMechanism = mocks.Stub(); + IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(failureMechanism, mocks); + assessmentSection.Stub(section => section.Composition).Return(AssessmentSectionComposition.Dike); + assessmentSection.Stub(section => section.Attach(null)).IgnoreArguments(); + assessmentSection.Stub(section => section.Detach(null)).IgnoreArguments(); + mocks.ReplayAll(); + + using (var view = new FailureMechanismContributionView(assessmentSection, viewCommands)) + { + ShowFormWithView(view); + + // Precondition + var dataGridView = (DataGridView) new ControlTester(dataGridViewControlName).TheObject; + + var invalidated = false; + dataGridView.Invalidated += (sender, args) => invalidated = true; + + // When + assessmentSection.FailureMechanismContribution.NotifyObservers(); + + // Then + Assert.IsTrue(invalidated); + } + + mocks.VerifyAll(); + } + + [Test] [TestCase(AssessmentSectionComposition.Dike, "Dijk")] [TestCase(AssessmentSectionComposition.Dune, "Duin")] [TestCase(AssessmentSectionComposition.DikeAndDune, "Dijk / Duin")] - public void CompositionComboBox_WithDataSet_SelectedDisplayTextAndValueCorrect(AssessmentSectionComposition composition, string expectedDisplayText) + public void Constructor_Always_CompositionComboBoxSelectedDisplayTextAndValueCorrect(AssessmentSectionComposition composition, string expectedDisplayText) { // Setup var assessmentSection = new AssessmentSection(composition); @@ -445,14 +425,13 @@ var viewCommands = mocks.Stub(); mocks.ReplayAll(); + // Call using (var view = new FailureMechanismContributionView(assessmentSection, viewCommands)) { ShowFormWithView(view); - // Call - var compositionLabel = (Label) new ControlTester(assessmentSectionConfigurationLabelName).TheObject; - // Assert + var compositionLabel = (Label)new ControlTester(assessmentSectionConfigurationLabelName).TheObject; string expectedLabelValue = $"Trajecttype: {expectedDisplayText}"; Assert.AreEqual(expectedLabelValue, compositionLabel.Text); } @@ -467,7 +446,7 @@ [TestCase(AssessmentSectionComposition.Dune, AssessmentSectionComposition.DikeAndDune)] [TestCase(AssessmentSectionComposition.DikeAndDune, AssessmentSectionComposition.Dike)] [TestCase(AssessmentSectionComposition.DikeAndDune, AssessmentSectionComposition.Dune)] - public void UpdateObserver_ChangeAssessmentSectionCompositionAndNotify_ChangeCompositionComboBoxItem( + public void GivenView_WhenAssessmentSectionCompositionChangedAndNotified_ThenCompositionComboBoxItemUpdated( AssessmentSectionComposition initialComposition, AssessmentSectionComposition newComposition) { @@ -482,19 +461,19 @@ { ShowFormWithView(view); + var compositionLabel = (Label)new ControlTester(assessmentSectionConfigurationLabelName).TheObject; + // Precondition - Assert.AreNotEqual(assessmentSection.Composition, newComposition); + string initialCompositionDisplayName = new EnumDisplayWrapper(initialComposition).DisplayName; + Assert.AreEqual($"Trajecttype: {initialCompositionDisplayName}", compositionLabel.Text); - // Call + // When assessmentSection.ChangeComposition(newComposition); assessmentSection.NotifyObservers(); - // Assert - var compositionLabel = (Label) new ControlTester(assessmentSectionConfigurationLabelName).TheObject; - + // Then string compositionDisplayName = new EnumDisplayWrapper(newComposition).DisplayName; - string newCompositionValue = $"Trajecttype: {compositionDisplayName}"; - Assert.AreEqual(newCompositionValue, compositionLabel.Text); + Assert.AreEqual($"Trajecttype: {compositionDisplayName}", compositionLabel.Text); } mocks.VerifyAll(); @@ -653,6 +632,8 @@ failureMechanism.Expect(fm => fm.NotifyObservers()); IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(failureMechanism, mocks); assessmentSection.Stub(section => section.Composition).Return(AssessmentSectionComposition.Dike); + assessmentSection.Stub(section => section.Attach(null)).IgnoreArguments(); + assessmentSection.Stub(section => section.Detach(null)).IgnoreArguments(); var viewCommands = mocks.Stub(); viewCommands.Expect(c => c.RemoveAllViewsForItem(failureMechanism)); mocks.ReplayAll();