Esempio n. 1
0
 /// <summary>
 /// Imports <see cref="FailureMechanismSection"/> data for a given enumeration of <see cref="IFailureMechanism{T}"/>.
 /// </summary>
 /// <param name="assessmentSection">The <see cref="AssessmentSection"/> that contains the <see cref="IFailureMechanism{T}"/> instances.</param>
 /// <param name="targetFailureMechanisms">The <see cref="IFailureMechanism{T}"/> instances to import on.</param>
 /// <remarks>
 /// <para>This will import the same 283 failure mechanism sections on all failure mechanisms.</para>
 /// <para>Does not import using <see cref="FileImportActivity"/>.</para>
 /// </remarks>
 public static void ImportFailureMechanismSections(AssessmentSection assessmentSection, IEnumerable <IFailureMechanism <FailureMechanismSectionResult> > targetFailureMechanisms)
 {
     using (var embeddedResourceFileWriter = new EmbeddedResourceFileWriter(typeof(DataImportHelper).Assembly,
                                                                            true,
                                                                            "traject_6-3_vakken.shp",
                                                                            "traject_6-3_vakken.dbf",
                                                                            "traject_6-3_vakken.prj",
                                                                            "traject_6-3_vakken.shx"))
     {
         IFailureMechanism <FailureMechanismSectionResult>[] failureMechanisms = targetFailureMechanisms.ToArray();
         for (var i = 0; i < failureMechanisms.Length; i++)
         {
             IFailureMechanism <FailureMechanismSectionResult> failureMechanism = failureMechanisms[i];
             if (i == 0)
             {
                 string filePath = Path.Combine(embeddedResourceFileWriter.TargetFolderPath,
                                                "traject_6-3_vakken.shp");
                 var importer = new FailureMechanismSectionsImporter(
                     failureMechanism, assessmentSection.ReferenceLine, filePath,
                     new FailureMechanismSectionReplaceStrategy(failureMechanism),
                     new ImportMessageProvider());
                 importer.Import();
             }
             else
             {
                 // Copy same FailureMechanismSection instances to other failure mechanisms
                 FailureMechanismTestHelper.SetSections(failureMechanism, failureMechanisms[0].Sections.Select(DeepCloneSection).ToArray());
             }
         }
     }
 }
        public void Import_InvalidArtificialFileBecauseSomePointsNotOnReferenceLine_AbortImportWithErrorMessage()
        {
            // Setup
            var mocks            = new MockRepository();
            var failureMechanism = mocks.Stub <IFailureMechanism>();
            var updateStrategy   = mocks.StrictMock <IFailureMechanismSectionUpdateStrategy>();
            var messageProvider  = mocks.StrictMock <IImporterMessageProvider>();

            messageProvider.Expect(mp => mp.GetUpdateDataFailedLogMessageText(sectionsTypeDescriptor)).Return(expectedUpdateDataFailedText);
            mocks.ReplayAll();

            string referenceLineFilePath = TestHelper.GetTestDataPath(TestDataPath.Riskeer.Common.IO,
                                                                      Path.Combine("ReferenceLine", "Artificial_referencelijn_testA.shp"));
            string sectionsFilePath = TestHelper.GetTestDataPath(TestDataPath.Riskeer.Common.IO,
                                                                 Path.Combine("FailureMechanismSections", "Artificial_referencelijn_testA_InvalidVakken_PointsTooFarFromReferenceLine.shp"));

            ReferenceLine importReferenceLine = ImportReferenceLine(referenceLineFilePath);

            var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath, updateStrategy, messageProvider);

            // Call
            var importSuccessful = true;

            void Call() => importSuccessful = importer.Import();

            // Assert
            string expectedMessage = string.Format(expectedUpdateDataFailedText, "De opgetelde lengte van de vakken moet overeenkomen met de trajectlengte");

            TestHelper.AssertLogMessageIsGenerated(Call, expectedMessage, 1);
            Assert.IsFalse(importSuccessful);
            mocks.VerifyAll();
        }
        public void Import_MissingNameValue_AbortImportWithErrorMessage()
        {
            // Setup
            var mocks            = new MockRepository();
            var failureMechanism = mocks.Stub <IFailureMechanism>();
            var updateStrategy   = mocks.StrictMock <IFailureMechanismSectionUpdateStrategy>();
            var messageProvider  = mocks.StrictMock <IImporterMessageProvider>();

            mocks.ReplayAll();

            string sectionsFilePath = TestHelper.GetTestDataPath(TestDataPath.Riskeer.Common.IO,
                                                                 Path.Combine("FailureMechanismSections", "vakindeling_Empty_Name_Value.shp"));

            var importer = new FailureMechanismSectionsImporter(failureMechanism, new ReferenceLine(), sectionsFilePath, updateStrategy, messageProvider);

            // Call
            var importSuccessful = true;

            void Call() => importSuccessful = importer.Import();

            // Assert
            var expectedMessage = $"Fout bij het lezen van bestand '{sectionsFilePath}': voor een of meerdere vakken is geen naam opgegeven.";

            TestHelper.AssertLogMessageIsGenerated(Call, expectedMessage, 1);
            Assert.IsFalse(importSuccessful);
            mocks.VerifyAll();
        }
        public void Import_InvalidArtificialFileBecauseUnchainedSections_AbortImportWithErrorMessage()
        {
            // Setup
            var mocks            = new MockRepository();
            var failureMechanism = mocks.Stub <IFailureMechanism>();
            var updateStrategy   = mocks.StrictMock <IFailureMechanismSectionUpdateStrategy>();
            var messageProvider  = mocks.StrictMock <IImporterMessageProvider>();

            messageProvider.Expect(mp => mp.GetUpdateDataFailedLogMessageText(sectionsTypeDescriptor)).Return(expectedUpdateDataFailedText);
            mocks.ReplayAll();

            string referenceLineFilePath = TestHelper.GetTestDataPath(TestDataPath.Riskeer.Common.IO,
                                                                      Path.Combine("ReferenceLine", "Artificial_referencelijn_testA.shp"));
            string sectionsFilePath = TestHelper.GetTestDataPath(TestDataPath.Riskeer.Common.IO,
                                                                 Path.Combine("FailureMechanismSections", "Artificial_referencelijn_testA_InvalidVakken_UnchainedSections.shp"));

            ReferenceLine importReferenceLine = ImportReferenceLine(referenceLineFilePath);

            var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath, updateStrategy, messageProvider);

            // Call
            var importSuccessful = true;

            void Call() => importSuccessful = importer.Import();

            // Assert
            string expectedMessage = string.Format(expectedUpdateDataFailedText, "Het bestand moet vakken bevatten die allen op elkaar aansluiten");

            TestHelper.AssertLogMessageIsGenerated(Call, expectedMessage, 1);
            Assert.IsFalse(importSuccessful);
            mocks.VerifyAll();
        }
        public void Import_FileDoesNotExist_AbortImportWithErrorMessage()
        {
            // Setup
            var mocks            = new MockRepository();
            var failureMechanism = mocks.Stub <IFailureMechanism>();
            var updateStrategy   = mocks.StrictMock <IFailureMechanismSectionUpdateStrategy>();
            var messageProvider  = mocks.StrictMock <IImporterMessageProvider>();

            messageProvider.Expect(mp => mp.GetUpdateDataFailedLogMessageText(sectionsTypeDescriptor)).Return(expectedUpdateDataFailedText);
            mocks.ReplayAll();

            string referenceLineFilePath = TestHelper.GetTestDataPath(TestDataPath.Riskeer.Common.IO,
                                                                      Path.Combine("ReferenceLine", "traject_1-1.shp"));
            string sectionsFilePath = TestHelper.GetTestDataPath(TestDataPath.Riskeer.Common.IO, "I_dont_exist.shp");

            ReferenceLine importReferenceLine = ImportReferenceLine(referenceLineFilePath);

            var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath, updateStrategy, messageProvider);

            // Call
            var importSuccessful = true;

            void Call() => importSuccessful = importer.Import();

            // Assert
            string expectedMessage = string.Format(
                expectedUpdateDataFailedText, $@"Fout bij het lezen van bestand '{sectionsFilePath}': het bestand bestaat niet.");

            TestHelper.AssertLogMessageIsGenerated(Call, expectedMessage, 1);
            Assert.IsFalse(importSuccessful);
            mocks.VerifyAll();
        }
        public void DoPostImport_AfterImport_CallUpdateStrategyAndObserversNotified()
        {
            // Setup
            var updateSectionsWithImportedDataObservable = new TestObservable();
            var doPostUpdateActionsObservable            = new TestObservable();

            var mocks          = new MockRepository();
            var updateStrategy = mocks.StrictMock <IFailureMechanismSectionUpdateStrategy>();

            updateStrategy.Expect(us => us.UpdateSectionsWithImportedData(null, null))
            .IgnoreArguments()
            .Return(new[]
            {
                updateSectionsWithImportedDataObservable
            });
            updateStrategy.Expect(us => us.DoPostUpdateActions())
            .Return(new[]
            {
                doPostUpdateActionsObservable
            });
            var messageProvider = mocks.Stub <IImporterMessageProvider>();

            var updateSectionsWithImportedDataObserver = mocks.StrictMock <IObserver>();

            updateSectionsWithImportedDataObserver.Expect(o => o.UpdateObserver());

            var doPostUpdateActionsObserver = mocks.StrictMock <IObserver>();

            doPostUpdateActionsObserver.Expect(o => o.UpdateObserver());
            mocks.ReplayAll();

            string referenceLineFilePath = TestHelper.GetTestDataPath(TestDataPath.Riskeer.Common.IO,
                                                                      Path.Combine("ReferenceLine", "traject_1-1.shp"));
            string sectionsFilePath = TestHelper.GetTestDataPath(TestDataPath.Riskeer.Common.IO,
                                                                 Path.Combine("FailureMechanismSections", "traject_1-1_vakken.shp"));

            ReferenceLine importReferenceLine = ImportReferenceLine(referenceLineFilePath);

            var failureMechanism = new TestFailureMechanism();
            var importer         = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath, updateStrategy, messageProvider);

            importer.Import();
            updateSectionsWithImportedDataObservable.Attach(updateSectionsWithImportedDataObserver);
            doPostUpdateActionsObservable.Attach(doPostUpdateActionsObserver);

            // Call
            importer.DoPostImport();

            // Assert
            mocks.VerifyAll();
        }
        public void Import_CancelOfImportWhenAddingDataToModel_ContinuesImportAndLogs()
        {
            // Setup
            var mocks            = new MockRepository();
            var failureMechanism = mocks.Stub <IFailureMechanism>();
            var updateStrategy   = mocks.StrictMock <IFailureMechanismSectionUpdateStrategy>();

            updateStrategy.Expect(us => us.UpdateSectionsWithImportedData(null, null))
            .IgnoreArguments()
            .WhenCalled(invocation =>
            {
                CollectionAssert.IsNotEmpty((IEnumerable <FailureMechanismSection>)invocation.Arguments[0]);
            })
            .Return(Enumerable.Empty <IObservable>());

            var messageProvider = mocks.StrictMock <IImporterMessageProvider>();

            messageProvider.Expect(mp => mp.GetAddDataToModelProgressText()).Return(expectedAddDataToModelProgressText);
            mocks.ReplayAll();

            string referenceLineFilePath = TestHelper.GetTestDataPath(TestDataPath.Riskeer.Common.IO,
                                                                      Path.Combine("ReferenceLine", "traject_1-1.shp"));
            string sectionsFilePath = TestHelper.GetTestDataPath(TestDataPath.Riskeer.Common.IO,
                                                                 Path.Combine("FailureMechanismSections", "traject_1-1_vakken.shp"));

            ReferenceLine importReferenceLine = ImportReferenceLine(referenceLineFilePath);

            var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath, updateStrategy, messageProvider);

            importer.SetProgressChanged((description, step, steps) =>
            {
                if (description.Contains(expectedAddDataToModelProgressText))
                {
                    importer.Cancel();
                }
            });

            var importSuccessful = true;

            // Call
            void Call() => importSuccessful = importer.Import();

            // Assert
            TestHelper.AssertLogMessageIsGenerated(Call, "Huidige actie was niet meer te annuleren en is daarom voortgezet.", 2);
            Assert.IsTrue(importSuccessful);
            mocks.VerifyAll();
        }
        public void Import_ReuseOfCanceledImportToValidTargetWithValidFile_TrueAndExpectedImportedData()
        {
            // Setup
            string referenceLineFilePath = TestHelper.GetTestDataPath(TestDataPath.Riskeer.Common.IO,
                                                                      Path.Combine("ReferenceLine", "traject_1-1.shp"));
            string sectionsFilePath = TestHelper.GetTestDataPath(TestDataPath.Riskeer.Common.IO,
                                                                 Path.Combine("FailureMechanismSections", "traject_1-1_vakken.shp"));

            ReferenceLine importReferenceLine = ImportReferenceLine(referenceLineFilePath);

            var mocks            = new MockRepository();
            var failureMechanism = mocks.Stub <IFailureMechanism>();
            var updateStrategy   = mocks.StrictMock <IFailureMechanismSectionUpdateStrategy>();

            updateStrategy.Expect(us => us.UpdateSectionsWithImportedData(null, null))
            .IgnoreArguments()
            .WhenCalled(invocation =>
            {
                var sections = (IEnumerable <FailureMechanismSection>)invocation.Arguments[0];
                Assert.AreEqual(62, sections.Count());
                AssertSectionsAreValidForReferenceLine(sections, importReferenceLine);
                Assert.AreEqual(sectionsFilePath, invocation.Arguments[1]);
            })
            .Return(Enumerable.Empty <IObservable>());

            var messageProvider = mocks.Stub <IImporterMessageProvider>();

            mocks.ReplayAll();

            var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath, updateStrategy, messageProvider);

            importer.SetProgressChanged((description, step, steps) => importer.Cancel());

            Assert.IsFalse(importer.Import());
            importer.SetProgressChanged(null);

            // Call
            var importSuccessful = false;

            void Call() => importSuccessful = importer.Import();

            // Assert
            TestHelper.AssertLogMessageIsGenerated(Call, $"Gegevens zijn geïmporteerd vanuit bestand '{sectionsFilePath}'.", 1);
            Assert.IsTrue(importSuccessful);
            mocks.VerifyAll();
        }
        public void Import_ValidImport_GenerateExpectedProgressMessages()
        {
            // Setup
            var mocks            = new MockRepository();
            var failureMechanism = mocks.Stub <IFailureMechanism>();
            var updateStrategy   = mocks.Stub <IFailureMechanismSectionUpdateStrategy>();

            updateStrategy.Stub(us => us.UpdateSectionsWithImportedData(null, null))
            .IgnoreArguments()
            .Return(Enumerable.Empty <IObservable>());
            var messageProvider = mocks.StrictMock <IImporterMessageProvider>();

            messageProvider.Expect(mp => mp.GetAddDataToModelProgressText()).Return(expectedAddDataToModelProgressText);
            mocks.ReplayAll();

            string referenceLineFilePath = TestHelper.GetTestDataPath(TestDataPath.Riskeer.Common.IO,
                                                                      Path.Combine("ReferenceLine", "Artificial_referencelijn_testA.shp"));
            string sectionsFilePath = TestHelper.GetTestDataPath(TestDataPath.Riskeer.Common.IO,
                                                                 Path.Combine("FailureMechanismSections", "Artificial_referencelijn_testA_ValidVakken.shp"));

            ReferenceLine importReferenceLine = ImportReferenceLine(referenceLineFilePath);

            var progressChangeNotifications = new List <ProgressNotification>();

            var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath, updateStrategy, messageProvider);

            importer.SetProgressChanged((description, step, steps) => progressChangeNotifications.Add(new ProgressNotification(description, step, steps)));

            // Call
            bool importSuccessful = importer.Import();

            // Assert
            Assert.IsTrue(importSuccessful);
            var expectedProgressMessages = new[]
            {
                new ProgressNotification("Inlezen vakindeling.", 1, 3),
                new ProgressNotification("Valideren ingelezen vakindeling.", 2, 3),
                new ProgressNotification(expectedAddDataToModelProgressText, 3, 3)
            };

            ProgressNotificationTestHelper.AssertProgressNotificationsAreEqual(expectedProgressMessages,
                                                                               progressChangeNotifications);
            mocks.VerifyAll();
        }
        public void Constructor_ExpectedValues()
        {
            // Setup
            var mocks            = new MockRepository();
            var failureMechanism = mocks.Stub <IFailureMechanism>();
            var updateStrategy   = mocks.Stub <IFailureMechanismSectionUpdateStrategy>();
            var messageProvider  = mocks.StrictMock <IImporterMessageProvider>();

            mocks.ReplayAll();

            var referenceLine = new ReferenceLine();

            // Call
            var importer = new FailureMechanismSectionsImporter(failureMechanism, referenceLine, "", updateStrategy, messageProvider);

            // Assert
            Assert.IsInstanceOf <FileImporterBase <IFailureMechanism> >(importer);
            mocks.VerifyAll();
        }
        public void Import_ValidArtificialFileWithReversedSectionCoordinatesImperfectlyCorrespondingToReferenceLine_CallsUpdateStrategy(
            string affectedSection)
        {
            // Setup
            var    fileName = $"Artificial_referencelijn_testA_ValidVakken_{affectedSection}.shp";
            string referenceLineFilePath = TestHelper.GetTestDataPath(TestDataPath.Riskeer.Common.IO,
                                                                      Path.Combine("ReferenceLine", "Artificial_referencelijn_testA.shp"));
            string sectionsFilePath = TestHelper.GetTestDataPath(TestDataPath.Riskeer.Common.IO,
                                                                 Path.Combine("FailureMechanismSections", fileName));

            ReferenceLine importReferenceLine = ImportReferenceLine(referenceLineFilePath);

            var mocks            = new MockRepository();
            var failureMechanism = mocks.Stub <IFailureMechanism>();
            var updateStrategy   = mocks.StrictMock <IFailureMechanismSectionUpdateStrategy>();

            updateStrategy.Expect(us => us.UpdateSectionsWithImportedData(null, null))
            .IgnoreArguments()
            .WhenCalled(invocation =>
            {
                var sections = (IEnumerable <FailureMechanismSection>)invocation.Arguments[0];
                Assert.AreEqual(7, sections.Count());
                AssertSectionsAreValidForReferenceLine(sections, importReferenceLine);
                Assert.AreEqual(sectionsFilePath, invocation.Arguments[1]);
            })
            .Return(Enumerable.Empty <IObservable>());
            var messageProvider = mocks.Stub <IImporterMessageProvider>();

            mocks.ReplayAll();

            var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath, updateStrategy, messageProvider);

            // Call
            bool importSuccessful = importer.Import();

            // Assert
            Assert.IsTrue(importSuccessful);
            mocks.VerifyAll();
        }
        public void Import_CancelOfImportWhenValidatingImportedSections_CancelsImportAndLogs()
        {
            // Setup
            var mocks            = new MockRepository();
            var failureMechanism = mocks.Stub <IFailureMechanism>();
            var updateStrategy   = mocks.StrictMock <IFailureMechanismSectionUpdateStrategy>();
            var messageProvider  = mocks.StrictMock <IImporterMessageProvider>();

            messageProvider.Expect(mp => mp.GetCancelledLogMessageText(sectionsTypeDescriptor)).Return(expectedCancelledText);
            mocks.ReplayAll();

            string referenceLineFilePath = TestHelper.GetTestDataPath(TestDataPath.Riskeer.Common.IO,
                                                                      Path.Combine("ReferenceLine", "traject_1-1.shp"));
            string sectionsFilePath = TestHelper.GetTestDataPath(TestDataPath.Riskeer.Common.IO,
                                                                 Path.Combine("FailureMechanismSections", "traject_1-1_vakken.shp"));

            ReferenceLine importReferenceLine = ImportReferenceLine(referenceLineFilePath);

            var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath, updateStrategy, messageProvider);

            importer.SetProgressChanged((description, step, steps) =>
            {
                if (description.Contains("Valideren ingelezen vakindeling."))
                {
                    importer.Cancel();
                }
            });

            var importSuccessful = true;

            // Call
            void Call() => importSuccessful = importer.Import();

            // Assert
            TestHelper.AssertLogMessageIsGenerated(Call, expectedCancelledText, 1);
            Assert.IsFalse(importSuccessful);
            mocks.VerifyAll();
        }