Exemple #1
0
        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();
        }
Exemple #2
0
        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();
        }
Exemple #3
0
        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();
        }
Exemple #4
0
        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();
        }
Exemple #5
0
        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);
        }
Exemple #7
0
        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);
        }
Exemple #9
0
        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();
        }
Exemple #10
0
        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();
        }