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(); } } }
/// <summary> /// Reads the <see cref="ProjectEntity"/> and use the information to construct a <see cref="RiskeerProject"/>. /// </summary> /// <param name="entity">The <see cref="ProjectEntity"/> to create <see cref="RiskeerProject"/> for.</param> /// <param name="collector">The object keeping track of read operations.</param> /// <returns>A new <see cref="RiskeerProject"/>.</returns> /// <exception cref="ArgumentNullException">Thrown when <paramref name="collector"/> is <c>null</c>.</exception> /// <exception cref="EntityReadException">Thrown when <paramref name="entity"/> could not be read successfully.</exception> internal static RiskeerProject Read(this ProjectEntity entity, ReadConversionCollector collector) { if (collector == null) { throw new ArgumentNullException(nameof(collector)); } int nrOfAssessmentSectionEntities = entity.AssessmentSectionEntities.Count; if (nrOfAssessmentSectionEntities > 1) { throw new EntityReadException(Resources.ProjectEntityReadExtensions_Read_ProjectEntity_contains_more_than_one_AssessmentSection); } if (nrOfAssessmentSectionEntities == 0) { throw new EntityReadException(Resources.ProjectEntityReadExtensions_Read_ProjectEntity_contains_no_AssessmentSection); } AssessmentSection assessmentSection = ReadAssessmentSection(entity, collector); var project = new RiskeerProject(assessmentSection) { Description = entity.Description }; return(project); }
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 Create_PersistenceRegistryNull_ThrowsArgumentNullException() { // Setup var project = new RiskeerProject(new AssessmentSection(AssessmentSectionComposition.Dike)); // Call TestDelegate test = () => project.Create(null); // Assert string parameterName = Assert.Throws <ArgumentNullException>(test).ParamName; Assert.AreEqual("registry", parameterName); }
public void DefaultConstructor_ExpectedValue() { // Setup AssessmentSection assessmentSection = CreateAssessmentSection(); // Call var project = new RiskeerProject(assessmentSection); // Assert Assert.IsInstanceOf <IProject>(project); Assert.AreEqual("Project", project.Name); Assert.AreEqual("", project.Description); Assert.AreSame(assessmentSection, project.AssessmentSection); }
public void NameConstructor_SetNameAndInitializeOtherProperties() { // Setup const string someName = "<Some name>"; AssessmentSection assessmentSection = CreateAssessmentSection(); // Call var project = new RiskeerProject(someName, assessmentSection); // Assert Assert.IsInstanceOf <IProject>(project); Assert.AreEqual(someName, project.Name); Assert.AreEqual("", project.Description); Assert.AreSame(assessmentSection, project.AssessmentSection); }
public void GivenProjectEntity_WhenGeneratingFingerprintMultipleTime_ThenHashRemainsEqual() { // Given RiskeerProject project = RiskeerProjectTestHelper.GetFullTestProject(); ProjectEntity entity = project.Create(new PersistenceRegistry()); // When byte[] hash1 = FingerprintHelper.Get(entity); byte[] hash2 = FingerprintHelper.Get(entity); // Then Assert.IsNotNull(hash1); CollectionAssert.IsNotEmpty(hash1); CollectionAssert.AreEqual(hash1, hash2); }
/// <summary> /// Creates a <see cref="ProjectEntity"/> based on the information of the <see cref="RiskeerProject"/>. /// </summary> /// <param name="project">The project to create a database entity for.</param> /// <param name="registry">The object keeping track of create operations.</param> /// <returns>A new <see cref="ProjectEntity"/>.</returns> /// <exception cref="ArgumentNullException">Thrown when <paramref name="registry"/> is <c>null</c>.</exception> internal static ProjectEntity Create(this RiskeerProject project, PersistenceRegistry registry) { if (registry == null) { throw new ArgumentNullException(nameof(registry)); } var entity = new ProjectEntity { Description = project.Description.DeepClone() }; entity.AssessmentSectionEntities.Add(project.AssessmentSection.Create(registry)); return(entity); }
public void GivenProjectEntity_WhenComparingFingerprintsBeforeAndAfterChange_ThenHashDifferent() { // Given RiskeerProject project = RiskeerProjectTestHelper.GetFullTestProject(); ProjectEntity entity = project.Create(new PersistenceRegistry()); // When byte[] hash1 = FingerprintHelper.Get(entity); entity.AssessmentSectionEntities.First().Name = "Something completely different"; byte[] hash2 = FingerprintHelper.Get(entity); // Then Assert.IsNotNull(hash1); CollectionAssert.IsNotEmpty(hash1); CollectionAssert.AreNotEqual(hash1, hash2); }
public void GetRootData_RiskeerProject_ReturnsExpectedRootData() { // Setup var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike); var project = new RiskeerProject(assessmentSection); // Call object rootData = info.GetRootData(project); // Assert Assert.IsNotNull(rootData); Assert.IsInstanceOf <AssessmentSectionStateRootContext>(rootData); var assessmentSectionStateRootContext = (AssessmentSectionStateRootContext)rootData; Assert.AreSame(assessmentSection, assessmentSectionStateRootContext.WrappedData); }
public void GivenProjectEntity_WhenGeneratingFingerprintEqualData_ThenHashRemainsEqual() { // Setup RiskeerProject project1 = RiskeerProjectTestHelper.GetFullTestProject(); RiskeerProject project2 = RiskeerProjectTestHelper.GetFullTestProject(); ProjectEntity entity1 = project1.Create(new PersistenceRegistry()); ProjectEntity entity2 = project2.Create(new PersistenceRegistry()); // Call byte[] hash1 = FingerprintHelper.Get(entity1); byte[] hash2 = FingerprintHelper.Get(entity2); // Assert Assert.IsNotNull(hash1); CollectionAssert.IsNotEmpty(hash1); CollectionAssert.AreEqual(hash1, hash2); }
/// <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(); } }
public void AutomaticProperties_SetAndGettingValue_ShouldReturnSetValue() { // Setup const string niceProjectName = "Nice project name"; const string nicerDescription = "Nicer description"; // Call var project = new RiskeerProject(CreateAssessmentSection()) { Name = niceProjectName, Description = nicerDescription }; // Assert Assert.AreEqual(niceProjectName, project.Name); Assert.AreEqual(nicerDescription, project.Description); }
public void Create_StringPropertiesDoNotShareReference() { // Setup const string testdescription = "original description"; var project = new RiskeerProject(new AssessmentSection(AssessmentSectionComposition.Dike)) { Description = testdescription }; var registry = new PersistenceRegistry(); // Call ProjectEntity entity = project.Create(registry); // Assert Assert.AreNotSame(testdescription, entity.Description); Assert.AreEqual(testdescription, entity.Description); }
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); }
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); }
public void Create_WithRegistry_ReturnsProjectEntityWithDescription() { // Setup const string testDescription = "testDescription"; var project = new RiskeerProject(new AssessmentSection(AssessmentSectionComposition.Dike)) { Description = testDescription }; var registry = new PersistenceRegistry(); // Call ProjectEntity entity = project.Create(registry); // Assert Assert.NotNull(entity); Assert.AreEqual(testDescription, entity.Description); Assert.AreEqual(1, entity.AssessmentSectionEntities.Count); }
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 NotifyObservers_WithObserverAttached_ObserverIsNotified() { // Setup var mockRepository = new MockRepository(); var observer = mockRepository.StrictMock <IObserver>(); observer.Expect(o => o.UpdateObserver()); mockRepository.ReplayAll(); var project = new RiskeerProject(CreateAssessmentSection()); project.Attach(observer); // Call project.NotifyObservers(); // Assert mockRepository.VerifyAll(); }
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 Read_WithAssessmentSection_ReturnsNewProjectWithAssessmentSection() { // Setup AssessmentSectionEntity assessmentSectionEntity = CreateAssessmentSectionEntity(1); var entity = new ProjectEntity { Description = "testName", AssessmentSectionEntities = { assessmentSectionEntity } }; // Call RiskeerProject project = entity.Read(new ReadConversionCollector()); // Assert Assert.AreEqual(entity.Description, project.Description); Assert.AreEqual(assessmentSectionEntity.Name, project.AssessmentSection.Name); }
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 LoadAssessmentSection_LoadingProjectSuccessful_ReturnsRiskeerProject() { // Setup RiskeerProject project = CreateProject(); var mocks = new MockRepository(); var storeProject = mocks.StrictMock <IStoreProject>(); storeProject.Expect(sp => sp.LoadProject(null)) .IgnoreArguments() .Return(project); mocks.ReplayAll(); var service = new LoadAssessmentSectionService(storeProject); // Call AssessmentSection assessmentSection = service.LoadAssessmentSection(string.Empty); // Assert Assert.AreSame(project.AssessmentSection, assessmentSection); mocks.VerifyAll(); }
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); }
public StagedProject(RiskeerProject projectModel, ProjectEntity projectEntity) { Model = projectModel; Entity = projectEntity; }