Пример #1
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);
        }
Пример #2
0
        public void LoadProject_DatabaseFromFutureVersion_ThrowStorageValidationException(int additionalVersionNumber)
        {
            // Setup
            string tempProjectFilePath    = Path.Combine(workingDirectory, $"{nameof(LoadProject_DatabaseFromFutureVersion_ThrowStorageValidationException)}_{Path.GetRandomFileName()}");
            string currentDatabaseVersion = ProjectVersionHelper.GetCurrentDatabaseVersion();
            string versionCode            = additionalVersionNumber + currentDatabaseVersion;

            void Precondition()
            {
                SqLiteDatabaseHelper.CreateCompleteDatabaseFileEmpty(tempProjectFilePath);
                SqLiteDatabaseHelper.AddVersionEntity(tempProjectFilePath, versionCode);
            }

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

            // Call
            void Call() => new StorageSqLite().LoadProject(tempProjectFilePath);

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

            Assert.IsInstanceOf <Exception>(exception);
            Assert.AreEqual($@"Fout bij het lezen van bestand '{tempProjectFilePath}': riskeer "
                            + $"bestand versie '{versionCode}' is hoger dan de huidig ondersteunde versie "
                            + $"('{currentDatabaseVersion}'). Update Riskeer naar een nieuwere versie.",
                            exception.Message);
        }
Пример #3
0
        public void LoadProject_DatabaseWithMultipleVersionEntities_ThrowStorageValidationException()
        {
            // Setup
            string projectFilePath        = Path.Combine(workingDirectory, nameof(LoadProject_DatabaseWithMultipleVersionEntities_ThrowStorageValidationException));
            string currentDatabaseVersion = ProjectVersionHelper.GetCurrentDatabaseVersion();

            void Precondition()
            {
                SqLiteDatabaseHelper.CreateCompleteDatabaseFileEmpty(projectFilePath);
                SqLiteDatabaseHelper.AddVersionEntity(projectFilePath, currentDatabaseVersion);
                SqLiteDatabaseHelper.AddVersionEntity(projectFilePath, currentDatabaseVersion);
            }

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

            // Call
            void Call() => new StorageSqLite().LoadProject(projectFilePath);

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

            Assert.IsInstanceOf <Exception>(exception);
            Assert.AreEqual($@"Fout bij het lezen van bestand '{projectFilePath}': database moet één rij in de VersionEntity tabel hebben.",
                            exception.Message);
            Assert.IsInstanceOf <InvalidOperationException>(exception.InnerException);
        }
Пример #4
0
        public void LoadProject_CorruptProjectFileThatPassesValidation_ThrowsStorageExceptionWithFullStackTrace()
        {
            // Setup
            string tempProjectFilePath = Path.Combine(workingDirectory, nameof(LoadProject_CorruptProjectFileThatPassesValidation_ThrowsStorageExceptionWithFullStackTrace));

            void Precondition() => SqLiteDatabaseHelper.CreateCorruptDatabaseFile(tempProjectFilePath);

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

            // Call
            void Call() => new StorageSqLite().LoadProject(tempProjectFilePath);

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

            Assert.IsInstanceOf <Exception>(exception);
            Assert.AreEqual($@"Fout bij het lezen van bestand '{tempProjectFilePath}': het bestand is geen geldig Riskeer bestand.",
                            exception.Message);

            Assert.IsInstanceOf <DataException>(exception.InnerException);
            Assert.AreEqual("An error occurred while executing the command definition. See the inner exception for details.",
                            exception.InnerException.Message);

            Assert.IsInstanceOf <SQLiteException>(exception.InnerException.InnerException);
            Assert.AreEqual($"SQL logic error{Environment.NewLine}"
                            + "no such table: AssessmentSectionEntity", exception.InnerException.InnerException.Message);
        }
Пример #5
0
        public void DatabaseCreator_Explicit_CreatesProjectDatabaseFile()
        {
            // Setup
            string storageFile = GetPathToStorageFile();

            if (File.Exists(storageFile))
            {
                TestDelegate precondition = () => File.Delete(storageFile);
                Assert.DoesNotThrow(precondition, "Precondition failed: file could not be deleted: '{0}'", storageFile);
            }

            // Call
            SqLiteDatabaseHelper.CreateDatabaseFile(storageFile, Resources.DatabaseStructure);

            // Assert
            Assert.IsTrue(File.Exists(storageFile));
        }
Пример #6
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);
        }
Пример #7
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);
        }
Пример #8
0
        public void LoadProject_ProjectFileWithTwoProjects_ThrowsStorageExceptionAndStorageValidationException()
        {
            // Setup
            string tempProjectFilePath = Path.Combine(workingDirectory, nameof(LoadProject_ProjectFileWithTwoProjects_ThrowsStorageExceptionAndStorageValidationException));

            void Precondition() => SqLiteDatabaseHelper.CreateCompleteDatabaseFileWithoutProjectData(tempProjectFilePath);

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

            // Call
            void Call() => new StorageSqLite().LoadProject(tempProjectFilePath);

            // Assert
            var expectedMessage = $@"Fout bij het lezen van bestand '{tempProjectFilePath}': het bestand is geen geldig Riskeer bestand.";

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

            Assert.IsInstanceOf <Exception>(exception);
            Assert.AreEqual(expectedMessage, exception.Message);
        }
Пример #9
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);
        }
Пример #10
0
        public void LoadProject_DatabaseWithInvalidVersionCode_ThrowStorageValidationException(string versionCode)
        {
            // Setup
            string tempProjectFilePath = Path.Combine(workingDirectory, $"{nameof(LoadProject_DatabaseWithInvalidVersionCode_ThrowStorageValidationException)}_{Path.GetRandomFileName()}");

            void Precondition()
            {
                SqLiteDatabaseHelper.CreateCompleteDatabaseFileEmpty(tempProjectFilePath);
                SqLiteDatabaseHelper.AddVersionEntity(tempProjectFilePath, versionCode);
            }

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

            // Call
            void Call() => new StorageSqLite().LoadProject(tempProjectFilePath);

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

            Assert.IsInstanceOf <Exception>(exception);
            Assert.AreEqual($@"Fout bij het lezen van bestand '{tempProjectFilePath}': riskeer "
                            + $"bestand versie '{versionCode}' is niet valide. De versie van het Riskeer projectbestand "
                            + "dient '16.4' of hoger te zijn.", exception.Message);
        }