public void Import_CancelingImport_CancelImportAndLog(string expectedProgressMessage)
        {
            // Setup
            var calculationGroup = new CalculationGroup();

            string filePath = Path.Combine(readerPath, "validConfiguration.xml");
            var importer = new CalculationConfigurationImporter(filePath, calculationGroup);

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

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

            // Assert
            TestHelper.AssertLogMessageIsGenerated(Call, "Berekeningenconfiguratie importeren afgebroken. Geen gegevens gewijzigd.", 1);
            CollectionAssert.IsEmpty(calculationGroup.Children);
            Assert.IsFalse(importSuccessful);
        }
        public void Import_ValidConfigurationWithValidData_DataAddedToModel()
        {
            // Setup
            string filePath = Path.Combine(readerPath, "validConfiguration.xml");

            var calculationGroup = new CalculationGroup();

            var importer = new CalculationConfigurationImporter(filePath, calculationGroup);

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

            // Assert
            Assert.IsTrue(successful);
            AssertCalculationGroup(GetExpectedNestedData(), calculationGroup);
        }
        public void Import_FileDoesNotExist_CancelImportWithErrorMessage()
        {
            // Setup
            string filePath = TestHelper.GetTestDataPath(TestDataPath.Riskeer.Common.IO, "I_dont_exist");

            var importer = new CalculationConfigurationImporter(filePath, new CalculationGroup());

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

            // Assert
            string expectedMessage = $"Fout bij het lezen van bestand '{filePath}': het bestand bestaat niet. " + Environment.NewLine +
                                     "Er is geen berekeningenconfiguratie geïmporteerd.";
            TestHelper.AssertLogMessageIsGenerated(Call, expectedMessage, 1);
            Assert.IsFalse(importSuccessful);
        }
        public void Import_FilePathIsDirectory_CancelImportWithErrorMessage()
        {
            // Setup
            string filePath = TestHelper.GetTestDataPath(TestDataPath.Riskeer.Common.IO, Path.DirectorySeparatorChar.ToString());

            var importer = new CalculationConfigurationImporter(filePath, new CalculationGroup());

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

            // Assert
            string expectedMessage = $"Fout bij het lezen van bestand '{filePath}': bestandspad mag niet verwijzen naar een lege bestandsnaam. " + Environment.NewLine +
                                     "Er is geen berekeningenconfiguratie geïmporteerd.";
            TestHelper.AssertLogMessageIsGenerated(Call, expectedMessage, 1);
            Assert.IsFalse(importSuccessful);
        }
        public void Import_InvalidFile_CancelImportWithErrorMessage()
        {
            // Setup
            string filePath = Path.Combine(readerPath, "invalidFolderNoName.xml");
            var importer = new CalculationConfigurationImporter(filePath, new CalculationGroup());

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

            // Assert
            TestHelper.AssertLogMessages(Call, messages =>
            {
                string[] msgs = messages.ToArray();
                Assert.AreEqual(1, msgs.Length);
                StringAssert.StartsWith($"Fout bij het lezen van bestand '{filePath}': het XML-document dat de configuratie voor de berekeningen beschrijft is niet geldig.", msgs[0]);
            });

            Assert.IsFalse(importSuccessful);
        }
        public void GivenImport_WhenImporting_ThenExpectedProgressMessagesGenerated()
        {
            // Given
            string filePath = Path.Combine(readerPath, "validConfiguration.xml");
            var progressChangeNotifications = new List<ProgressNotification>();

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

            // When
            importer.Import();

            // Then
            var expectedProgressNotifications = new[]
            {
                new ProgressNotification("Inlezen berekeningenconfiguratie.", 1, 3),
                new ProgressNotification("Valideren berekeningenconfiguratie.", 2, 3),
                new ProgressNotification("Geïmporteerde data toevoegen aan het faalmechanisme.", 3, 3)
            };
            ProgressNotificationTestHelper.AssertProgressNotificationsAreEqual(expectedProgressNotifications, progressChangeNotifications);
        }