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); }
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); }
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); }
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); }
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)); }
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); }
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); }
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); }
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); }
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); }