Exemple #1
0
        public void SaveProjectAs_ValidPathToLockedFile_ThrowsUpdateStorageException()
        {
            // Setup
            string         tempProjectFilePath = Path.Combine(workingDirectory, nameof(SaveProjectAs_ValidPathToLockedFile_ThrowsUpdateStorageException));
            RiskeerProject project             = CreateProject();
            var            storage             = new StorageSqLite();

            storage.StageProject(project);

            using (var fileDisposeHelper = new FileDisposeHelper(tempProjectFilePath))
            {
                try
                {
                    fileDisposeHelper.LockFiles();

                    // Call
                    void Call() => storage.SaveProjectAs(tempProjectFilePath);

                    // Assert
                    var exception = Assert.Throws <StorageException>(Call);

                    Assert.IsInstanceOf <Exception>(exception);
                    Assert.IsInstanceOf <IOException>(exception.InnerException);
                    Assert.IsInstanceOf <Exception>(exception);
                    Assert.AreEqual("Het doelbestand is momenteel in gebruik.", exception.Message);
                }
                finally
                {
                    CallGarbageCollector();
                }
            }
        }
        public void WriteAndReadProject()
        {
            var testProjectName = @"D:\Test\FirstProject.sqlite";

            if (File.Exists(testProjectName))
            {
                try
                {
                    File.Delete(testProjectName);
                }
                catch (Exception e)
                {
                    Assert.Fail("Unable to remove previous version of target file.");
                }
            }

            var project       = TestDataGenerator.GenerateAsphaltProject();
            var mainTreeEvent = project.EventTrees.First().MainTreeEvent;

            foreach (var waterLevel in project.HydraulicConditions.Select(hc => hc.WaterLevel).Distinct().OrderBy(w => w))
            {
                mainTreeEvent.FixedFragilityCurve.Add(new FragilityCurveElement(waterLevel, (Probability)0.5));
            }
            var storeProject = new StorageSqLite();

            storeProject.StageProject(project);
            storeProject.SaveProjectAs(testProjectName);

            var retrievedProject = storeProject.LoadProject(testProjectName);

            AssertEqualProjects(project, retrievedProject);
        }
Exemple #3
0
        public void GivenRiskeerGui_WhenRunWithUnmigratedFileAndNoInquireContinuation_MigratedProjectNotSet(string sourceFilePath)
        {
            // Given
            var projectStore  = new StorageSqLite();
            var mocks         = new MockRepository();
            var inquiryHelper = mocks.Stub <IInquiryHelper>();

            inquiryHelper.Expect(helper => helper.InquireContinuation(null))
            .IgnoreArguments()
            .Return(false);
            mocks.ReplayAll();

            var projectMigrator = new ProjectMigrator(inquiryHelper);

            using (var gui = new GuiCore(new MainWindow(), projectStore, projectMigrator, new RiskeerProjectFactory(() => null), new GuiCoreSettings()))
            {
                // When
                gui.Run(sourceFilePath);

                // Then
                Assert.IsNull(gui.ProjectFilePath);
                Assert.IsNull(gui.Project);
            }

            mocks.VerifyAll();
        }
Exemple #4
0
        public void GivenRiskeerGuiWithStorageSql_WhenRunWithMigratedFile_MigratedProjectSet(string sourceFilePath)
        {
            string targetFilePath = Path.Combine(workingDirectory, nameof(GivenRiskeerGuiWithStorageSql_WhenRunWithMigratedFile_MigratedProjectSet));

            MigrateFile(sourceFilePath, targetFilePath);

            // Given
            var projectStore  = new StorageSqLite();
            var mocks         = new MockRepository();
            var inquiryHelper = mocks.StrictMock <IInquiryHelper>();

            mocks.ReplayAll();

            var projectMigrator = new ProjectMigrator(inquiryHelper);
            var guiCoreSettings = new GuiCoreSettings
            {
                ApplicationIcon = SystemIcons.Application
            };

            using (var gui = new GuiCore(new MainWindow(), projectStore, projectMigrator, new RiskeerProjectFactory(() => null), guiCoreSettings))
            {
                // When
                gui.Run(targetFilePath);

                // Then
                Assert.AreEqual(targetFilePath, gui.ProjectFilePath);
                Assert.NotNull(gui.Project);
                string expectedProjectName = Path.GetFileNameWithoutExtension(targetFilePath);
                Assert.AreEqual(expectedProjectName, gui.Project.Name);
                Assert.AreEqual("description", gui.Project.Description);
                Assert.IsInstanceOf <RiskeerProject>(gui.Project);
            }

            mocks.VerifyAll();
        }
Exemple #5
0
        public void LoadProject_ReadProjectThrowsEntityReadException_ThrowsStorageException()
        {
            // Setup
            string tempProjectFilePath = Path.Combine(workingDirectory, nameof(LoadProject_ReadProjectThrowsEntityReadException_ThrowsStorageException));
            var    storage             = new StorageSqLite();

            RiskeerProject project = CreateProject();

            // Precondition
            void Precondition()
            {
                SqLiteDatabaseHelper.CreateValidProjectDatabase(tempProjectFilePath, project);
                SqLiteDatabaseHelper.SetInvalidNumberOfAssessmentSectionEntities(tempProjectFilePath);
            }

            Assert.DoesNotThrow(Precondition);

            // Call
            void Call() => storage.LoadProject(tempProjectFilePath);

            // Assert
            var       exception      = Assert.Throws <StorageException>(Call);
            Exception innerException = exception.InnerException;

            Assert.IsInstanceOf <EntityReadException>(innerException);

            var expectedMessage = $"Fout bij het lezen van bestand '{tempProjectFilePath}': {innerException.Message.FirstToLower()}";

            Assert.AreEqual(expectedMessage, exception.Message);
        }
Exemple #6
0
        public void StageProject_ProjectIsNull_ThrowsArgumentNullException()
        {
            // Setup
            var storage = new StorageSqLite();

            // Call
            void Call() => storage.StageProject(null);

            // Assert
            Assert.Throws <ArgumentNullException>(Call);
        }
Exemple #7
0
        public void DefaultConstructor_ExpectedValues()
        {
            // Call
            var storage = new StorageSqLite();

            // Assert
            Assert.IsInstanceOf <IStoreProject>(storage);
            Assert.AreEqual("Alle projecten (*.risk;*.rtd)|*.risk;*.rtd|" +
                            "Riskeerproject (*.risk)|*.risk|Ringtoetsproject (*.rtd)|*.rtd", storage.OpenProjectFileFilter);

            Assert.AreEqual("Riskeerproject (*.risk)|*.risk", storage.SaveProjectFileFilter);
        }
Exemple #8
0
        public void HasStagedProjectChanges_NoPathGiven_ReturnsTrue()
        {
            // Setup
            var storageSqLite = new StorageSqLite();

            storageSqLite.StageProject(CreateProject());

            // Call
            bool hasChanges = storageSqLite.HasStagedProjectChanges(null);

            // Assert
            Assert.IsTrue(hasChanges);
        }
Exemple #9
0
        public void HasStagedProjectChanges_NoProjectStaged_ThrowInvalidOperationException()
        {
            // Setup
            var storage = new StorageSqLite();

            // Precondition
            Assert.IsFalse(storage.HasStagedProject);

            // Call
            void Call() => storage.HasStagedProjectChanges(null);

            // Assert
            string message = Assert.Throws <InvalidOperationException>(Call).Message;

            Assert.AreEqual("Call 'StageProject(IProject)' first before calling this method.", message);
        }
Exemple #10
0
        public void SaveProjectAs_ValidPathToExistingFile_DoesNotThrowException()
        {
            // Setup
            string         tempProjectFilePath = Path.Combine(workingDirectory, nameof(SaveProjectAs_ValidPathToExistingFile_DoesNotThrowException));
            RiskeerProject project             = CreateProject();
            var            storage             = new StorageSqLite();

            storage.StageProject(project);

            using (File.Create(tempProjectFilePath)) {}

            // Call
            void Call() => storage.SaveProjectAs(tempProjectFilePath);

            // Assert
            Assert.DoesNotThrow(Call);
        }
Exemple #11
0
        public void SaveProjectAs_NoStagedProject_ThrowInvalidOperationException()
        {
            // Setup
            string tempProjectFilePath = TestHelper.GetScratchPadPath(nameof(SaveProjectAs_NoStagedProject_ThrowInvalidOperationException));
            var    storage             = new StorageSqLite();

            // Precondition
            Assert.IsFalse(storage.HasStagedProject);

            // Call
            void Call() => storage.SaveProjectAs(tempProjectFilePath);

            // Assert
            string message = Assert.Throws <InvalidOperationException>(Call).Message;

            Assert.AreEqual("Call 'StageProject(IProject)' first before calling this method.", message);
        }
Exemple #12
0
 /// <summary>
 /// Converts the <paramref name="project"/> into a new project database file.
 /// </summary>
 /// <param name="databaseFilePath">Path to database file.</param>
 /// <param name="project"><see cref="RiskeerProject"/> to save.</param>
 public static void CreateValidProjectDatabase(string databaseFilePath, RiskeerProject project)
 {
     try
     {
         var storageSqLite = new StorageSqLite();
         storageSqLite.StageProject(project);
         storageSqLite.SaveProjectAs(databaseFilePath);
     }
     catch (Exception exception)
     {
         Assert.Fail("Precondition failed: creating database file failed due to {0}", exception);
     }
     finally
     {
         SQLiteConnection.ClearAllPools();
     }
 }
Exemple #13
0
        public void SaveProjectAs_InvalidPath_ThrowsArgumentException(string invalidPath)
        {
            // Setup
            RiskeerProject project = CreateProject();

            var storage = new StorageSqLite();

            storage.StageProject(project);

            // Call
            void Call() => storage.SaveProjectAs(invalidPath);

            // Assert
            var exception = Assert.Throws <ArgumentException>(Call);

            Assert.AreEqual($"Fout bij het lezen van bestand '{invalidPath}': bestandspad mag niet "
                            + "leeg of ongedefinieerd zijn.", exception.Message);
        }
Exemple #14
0
        public void HasStagedProjectChanges_ValidProjectLoaded_ReturnsFalse()
        {
            // Setup
            var            storageSqLite       = new StorageSqLite();
            RiskeerProject storedProject       = CreateProject();
            string         tempProjectFilePath = Path.Combine(workingDirectory, nameof(HasStagedProjectChanges_ValidProjectLoaded_ReturnsFalse));

            SqLiteDatabaseHelper.CreateValidProjectDatabase(tempProjectFilePath, storedProject);
            IProject loadedProject = storageSqLite.LoadProject(tempProjectFilePath);

            storageSqLite.StageProject(loadedProject);

            // Call
            bool hasChanges = storageSqLite.HasStagedProjectChanges(tempProjectFilePath);

            // Assert
            Assert.IsFalse(hasChanges);
        }
Exemple #15
0
        public void HasStagedProjectChanges_InvalidPath_ThrowsArgumentException()
        {
            // Setup
            var storage = new StorageSqLite();

            storage.StageProject(CreateProject());

            string path = Path.Combine(testPath, "ValidCharacteristics.csv");

            char[] invalidCharacters = Path.GetInvalidPathChars();
            string corruptPath       = path.Replace('V', invalidCharacters[0]);

            // Call
            void Call() => storage.HasStagedProjectChanges(corruptPath);

            // Assert
            Assert.Throws <ArgumentException>(Call);
        }
Exemple #16
0
        public void HasStagedProjectChanges_ValidProjectLoadedWithAffectedChange_ReturnsTrue()
        {
            // Setup
            var            storageSqLite       = new StorageSqLite();
            RiskeerProject storedProject       = RiskeerProjectTestHelper.GetFullTestProject();
            const string   changedDescription  = "some description";
            string         tempProjectFilePath = Path.Combine(workingDirectory, nameof(HasStagedProjectChanges_ValidProjectLoadedWithAffectedChange_ReturnsTrue));

            SqLiteDatabaseHelper.CreateValidProjectDatabase(tempProjectFilePath, storedProject);
            IProject loadedProject = storageSqLite.LoadProject(tempProjectFilePath);

            loadedProject.Description = changedDescription;
            storageSqLite.StageProject(loadedProject);

            // Call
            bool hasChanges = storageSqLite.HasStagedProjectChanges(tempProjectFilePath);

            // Assert
            Assert.IsTrue(hasChanges);
        }
Exemple #17
0
        public void HasStagedProjectChanges_SavedToEmptyDatabaseFile_ReturnsFalse()
        {
            // Setup
            var    storage             = new StorageSqLite();
            string tempProjectFilePath = Path.Combine(workingDirectory, nameof(HasStagedProjectChanges_SavedToEmptyDatabaseFile_ReturnsFalse));

            RiskeerProject project = CreateProject();

            // Precondition, required to set the connection string
            storage.StageProject(project);
            void Precondition() => storage.SaveProjectAs(tempProjectFilePath);

            Assert.DoesNotThrow(Precondition, "Precondition failed: creating database file failed");

            storage.StageProject(project);

            // Call
            bool hasChanges = storage.HasStagedProjectChanges(tempProjectFilePath);

            // Assert
            Assert.IsFalse(hasChanges);
        }
Exemple #18
0
        public void LoadProject_ValidDatabase_ReturnsProject()
        {
            // Setup
            string tempProjectFilePath = Path.Combine(workingDirectory, nameof(LoadProject_ValidDatabase_ReturnsProject));
            string projectName         = Path.GetFileNameWithoutExtension(tempProjectFilePath);
            var    storage             = new StorageSqLite();

            RiskeerProject project = CreateProject();

            project.Description = "<some description>";

            // Precondition
            SqLiteDatabaseHelper.CreateValidProjectDatabase(tempProjectFilePath, project);

            // Call
            IProject loadedProject = storage.LoadProject(tempProjectFilePath);

            // Assert
            Assert.IsInstanceOf <RiskeerProject>(loadedProject);
            Assert.AreEqual(projectName, loadedProject.Name);
            Assert.AreEqual(project.Description, loadedProject.Description);
        }
Exemple #19
0
        public void GivenRiskeerGui_WhenRunWithUnmigratedFileAndInquireContinuation_MigratedProjectSet(string sourceFilePath)
        {
            // Given
            string targetFilePath = Path.Combine(workingDirectory, nameof(GivenRiskeerGui_WhenRunWithUnmigratedFileAndInquireContinuation_MigratedProjectSet));

            var projectStore  = new StorageSqLite();
            var mocks         = new MockRepository();
            var inquiryHelper = mocks.Stub <IInquiryHelper>();

            inquiryHelper.Expect(helper => helper.InquireContinuation(null))
            .IgnoreArguments()
            .Return(true);
            inquiryHelper.Expect(helper => helper.GetTargetFileLocation(null, null))
            .IgnoreArguments()
            .Return(targetFilePath);
            mocks.ReplayAll();

            var projectMigrator = new ProjectMigrator(inquiryHelper);
            var guiCoreSettings = new GuiCoreSettings
            {
                ApplicationIcon = SystemIcons.Application
            };

            using (var gui = new GuiCore(new MainWindow(), projectStore, projectMigrator, new RiskeerProjectFactory(() => null), guiCoreSettings))
            {
                // When
                gui.Run(sourceFilePath);

                // Then
                Assert.AreEqual(targetFilePath, gui.ProjectFilePath);
                string expectedProjectName = Path.GetFileNameWithoutExtension(targetFilePath);
                Assert.AreEqual(expectedProjectName, gui.Project.Name);
                Assert.AreEqual("description", gui.Project.Description);
                Assert.IsInstanceOf <RiskeerProject>(gui.Project);
            }

            mocks.VerifyAll();
        }
Exemple #20
0
 public GuiProjectServices(GuiViewModel guiViewModel)
 {
     this.guiViewModel = guiViewModel;
     storageSqLite     = new StorageSqLite();
 }