public void Constructor_ExpectedValues(bool savingExistingProject) { // Setup var mocks = new MockRepository(); var storeProject = mocks.Stub <IStoreProject>(); var project = mocks.Stub <IProject>(); var projectOwner = mocks.Stub <IProjectOwner>(); mocks.ReplayAll(); // Call var activity = new SaveProjectActivity(project, "", savingExistingProject, storeProject, projectOwner); // Assert Assert.IsInstanceOf <Activity>(activity); Assert.IsNull(activity.ProgressText); Assert.AreEqual(ActivityState.None, activity.State); string exitingPrefix = savingExistingProject ? "bestaand " : ""; string expectedName = $"Opslaan van {exitingPrefix}project"; Assert.AreEqual(expectedName, activity.Description); mocks.VerifyAll(); }
public void GivenSaveProjectActivityAndSuccessfullySavedExistingProject_WhenFinishingSaveProjectActivity_ThenDoNotUpdateProjectAndProjectOwnerWithMessage() { // Given const string fileName = "A"; string filePath = $@"C:\\folder\{fileName}.rtd"; var mocks = new MockRepository(); var storeProject = mocks.Stub <IStoreProject>(); var project = mocks.StrictMock <IProject>(); var projectOwner = mocks.StrictMock <IProjectOwner>(); mocks.ReplayAll(); var activity = new SaveProjectActivity(project, filePath, true, storeProject, projectOwner); activity.Run(); // Precondition Assert.AreEqual(ActivityState.Executed, activity.State); // When Action call = () => { activity.LogState(); activity.Finish(); }; // Assert Tuple <string, LogLevelConstant> expectedMessage = Tuple.Create("Opslaan van bestaand project is gelukt.", LogLevelConstant.Info); TestHelper.AssertLogMessageWithLevelIsGenerated(call, expectedMessage, 1); Assert.AreEqual(ActivityState.Finished, activity.State); mocks.VerifyAll(); }
public void Run_SaveExistingProjectAsThrowsException_FailedWithAdditionalLogMessages(Exception exception, string errorMessage) { // Setup const string filePath = "A"; var mocks = new MockRepository(); var project = mocks.Stub <IProject>(); var projectOwner = mocks.Stub <IProjectOwner>(); var storeProject = mocks.Stub <IStoreProject>(); storeProject.Stub(sp => sp.HasStagedProject) .Return(true); storeProject.Stub(sp => sp.SaveProjectAs(filePath)) .Throw(exception); mocks.ReplayAll(); var activity = new SaveProjectActivity(project, filePath, true, storeProject, projectOwner); // Call Action call = () => activity.Run(); // Assert TestHelper.AssertLogMessagesWithLevelAreGenerated(call, new[] { Tuple.Create("Opslaan van bestaand project is gestart.", LogLevelConstant.Info), Tuple.Create(errorMessage, LogLevelConstant.Error) }, 2); Assert.AreEqual(ActivityState.Failed, activity.State); mocks.VerifyAll(); }
public void Run_AlreadyStagedProject_SaveProjectWithoutAdditionalLogMessages(bool saveExistingProject) { // Setup const string filePath = "A"; var mocks = new MockRepository(); var project = mocks.Stub <IProject>(); var projectOwner = mocks.Stub <IProjectOwner>(); var storeProject = mocks.StrictMock <IStoreProject>(); storeProject.Stub(sp => sp.HasStagedProject) .Return(true); storeProject.Expect(sp => sp.SaveProjectAs(filePath)); mocks.ReplayAll(); var activity = new SaveProjectActivity(project, filePath, saveExistingProject, storeProject, projectOwner); // Call Action call = () => activity.Run(); // Assert string prefix = saveExistingProject ? "bestaand " : ""; TestHelper.AssertLogMessageIsGenerated(call, $"Opslaan van {prefix}project is gestart.", 1); Assert.AreEqual(ActivityState.Executed, activity.State); mocks.VerifyAll(); }
public void GivenActivitySavingStagedProject_WhenCancelling_ThenProjectSavedWithAdditionalLogMessage(bool saveExistingProject) { // Given const string filePath = "A"; var mocks = new MockRepository(); var project = mocks.Stub <IProject>(); var projectOwner = mocks.Stub <IProjectOwner>(); if (!saveExistingProject) { projectOwner.Expect(po => po.SetProject(project, filePath)); } var storeProject = mocks.StrictMock <IStoreProject>(); storeProject.Stub(sp => sp.HasStagedProject) .Return(true); storeProject.Expect(sp => sp.SaveProjectAs(filePath)); mocks.ReplayAll(); var calledCancel = false; var activity = new SaveProjectActivity(project, filePath, saveExistingProject, storeProject, projectOwner); activity.ProgressChanged += (sender, args) => { if (calledCancel) { activity.Cancel(); calledCancel = true; } }; // When Action call = () => { activity.Run(); // Cancel called mid-progress but beyond 'point of no return' activity.LogState(); activity.Finish(); }; // Then string prefix = saveExistingProject ? "bestaand " : ""; TestHelper.AssertLogMessagesWithLevelAreGenerated(call, new[] { Tuple.Create($"Opslaan van {prefix}project is gestart.", LogLevelConstant.Info), Tuple.Create($"Opslaan van {prefix}project is gelukt.", LogLevelConstant.Info) }, 2); Assert.AreEqual(ActivityState.Finished, activity.State); mocks.VerifyAll(); }
public bool SaveProjectAs() { IProject project = projectOwner.Project; string filePath = OpenProjectSaveFileDialog(project.Name); if (string.IsNullOrWhiteSpace(filePath)) { return(false); } var activity = new SaveProjectActivity(project, filePath, false, projectPersister, projectOwner); ActivityProgressDialogRunner.Run(mainWindowController.MainWindow, activity); return(activity.State == ActivityState.Finished); }
public void Finish_SuccessfullySavedNewProject_ExpectedProgressMessages(bool hasStagedProject) { // Setup const string fileName = "A"; string filePath = $@"C:\\folder\{fileName}.rtd"; var mocks = new MockRepository(); var project = mocks.Stub <IProject>(); var storeProject = mocks.Stub <IStoreProject>(); storeProject.Stub(sp => sp.HasStagedProject).Return(hasStagedProject); storeProject.Stub(sp => sp.StageProject(project)); storeProject.Stub(sp => sp.SaveProjectAs(filePath)); var projectOwner = mocks.Stub <IProjectOwner>(); mocks.ReplayAll(); var activity = new SaveProjectActivity(project, filePath, false, storeProject, projectOwner); activity.Run(); // Precondition Assert.AreEqual(ActivityState.Executed, activity.State); var progressMessages = new List <string>(); activity.ProgressChanged += (sender, args) => { Assert.AreSame(activity, sender); Assert.AreEqual(EventArgs.Empty, args); progressMessages.Add(activity.ProgressText); }; // Call activity.Finish(); // Assert int totalSteps = hasStagedProject ? 2 : 3; string[] expectedProgressMessages = { $"Stap {totalSteps} van {totalSteps} | Initialiseren van opgeslagen project" }; CollectionAssert.AreEqual(expectedProgressMessages, progressMessages); mocks.VerifyAll(); }
public bool SaveProject() { IProject project = projectOwner.Project; string filePath = projectOwner.ProjectFilePath; // If file path is not set, go to SaveAs if (string.IsNullOrWhiteSpace(filePath) || !File.Exists(filePath)) { return(SaveProjectAs()); } var activity = new SaveProjectActivity(project, filePath, true, projectPersister, projectOwner); ActivityProgressDialogRunner.Run(mainWindowController.MainWindow, activity); return(activity.State == ActivityState.Finished); }
public void GivenActivityStagingProject_WhenCancelling_ThenProjectNotSavedWithAdditionalLogMessages(bool saveExistingProject) { // Given const string filePath = "A"; var mocks = new MockRepository(); var project = mocks.Stub <IProject>(); var projectOwner = mocks.StrictMock <IProjectOwner>(); var storeProject = mocks.StrictMock <IStoreProject>(); storeProject.Stub(sp => sp.HasStagedProject) .Return(false); using (mocks.Ordered()) { storeProject.Expect(sp => sp.StageProject(project)); storeProject.Expect(sp => sp.SaveProjectAs(filePath)) .Repeat.Never(); } mocks.ReplayAll(); var activity = new SaveProjectActivity(project, filePath, saveExistingProject, storeProject, projectOwner); activity.ProgressChanged += (sender, args) => activity.Cancel(); // When Action call = () => { activity.Run(); // Cancel called mid-progress activity.LogState(); activity.Finish(); }; // Then string prefix = saveExistingProject ? "bestaand " : ""; TestHelper.AssertLogMessagesWithLevelAreGenerated(call, new[] { Tuple.Create($"Opslaan van {prefix}project is gestart.", LogLevelConstant.Info), Tuple.Create($"Opslaan van {prefix}project is geannuleerd.", LogLevelConstant.Warn) }, 2); Assert.AreEqual(ActivityState.Canceled, activity.State); mocks.VerifyAll(); }
public void Run_UnstagedProject_ExpectedProgressMessages(bool saveExistingProject) { // Setup const string filePath = "A"; var mocks = new MockRepository(); var project = mocks.Stub <IProject>(); var projectOwner = mocks.Stub <IProjectOwner>(); var storeProject = mocks.StrictMock <IStoreProject>(); storeProject.Stub(sp => sp.HasStagedProject) .Return(false); using (mocks.Ordered()) { storeProject.Expect(sp => sp.StageProject(project)); storeProject.Expect(sp => sp.SaveProjectAs(filePath)); } mocks.ReplayAll(); var progressMessages = new List <string>(); var activity = new SaveProjectActivity(project, filePath, saveExistingProject, storeProject, projectOwner); activity.ProgressChanged += (sender, args) => { Assert.AreSame(activity, sender); Assert.AreEqual(EventArgs.Empty, args); progressMessages.Add(activity.ProgressText); }; // Call activity.Run(); // Assert int totalSteps = saveExistingProject ? 2 : 3; string[] expectedProgressMessages = { $"Stap 1 van {totalSteps} | Voorbereidingen opslaan", $"Stap 2 van {totalSteps} | Project opslaan" }; CollectionAssert.AreEqual(expectedProgressMessages, progressMessages); mocks.VerifyAll(); }