public void FinshFeedback_Expected_RecordingStoppedAndEmailFeedbackInvoked()
        {
            Mock <IFeedBackRecorder> feedbackRecorder = new Mock <IFeedBackRecorder>();

            feedbackRecorder.Setup(r => r.StopRecording()).Verifiable();
            Mock <IFeedbackInvoker> feedbackInvoker = new Mock <IFeedbackInvoker>();

            feedbackInvoker.Setup(r => r.InvokeFeedback(It.IsAny <IFeedbackAction>())).Verifiable();
            Mock <IPopupController> popup = Dev2MockFactory.CreateIPopup(MessageBoxResult.Yes);

            CustomContainer.Register <IFeedBackRecorder>(feedbackRecorder.Object);
            CustomContainer.Register <IFeedbackInvoker>(feedbackInvoker.Object);
            CustomContainer.Register <IWindowManager>(new Mock <IWindowManager>().Object);
            CustomContainer.Register <IPopupController>(popup.Object);

            RecorderFeedbackAction        recorderFeedbackAction = new RecorderFeedbackAction();
            Mock <IEnvironmentModel>      mockEnvironment        = Dev2MockFactory.SetupEnvironmentModel();
            Mock <IEnvironmentConnection> mockConn = Dev2MockFactory.SetupIEnvironmentConnection(new Exception());

            mockConn.Setup(mock => mock.ExecuteCommand(It.IsAny <StringBuilder>(), It.IsAny <Guid>(), It.IsAny <Guid>())).Returns(new StringBuilder(@"""2013/06/07 02:23:22 PM :: ERROR -> Procedure or function 'fn_Greeting' expects parameter '@Name', which was not supplied.\r\n   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)\r\n   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)\r\n   at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)\r\n   at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()\r\n   at System.Data.SqlClient.SqlDataReader.get_MetaData()\r\n   at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)\r\n   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite)\r\n   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite)\r\n   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)\r\n   at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)\r\n   at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)\r\n   at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)\r\n   at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)\r\n   at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)\r\n   at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)\r\n   at Dev2.Runtime.ServiceModel.Esb.Brokers.MsSqlBroker.ExecuteSelect(IDbCommand command) in c:\\Development\\DEV2 SCRUM Project\\Branches\\BUG_9598\\Dev2.Runtime.Services\\ServiceModel\\Esb\\Brokers\\MsSqlBroker.cs:line 105\r\n   at Dev2.Runtime.ServiceModel.Esb.Brokers.AbstractDatabaseBroker.TestService(DbService dbService) in c:\\Development\\DEV2 SCRUM Project\\Branches\\BUG_9598\\Dev2.Runtime.Services\\ServiceModel\\Esb\\Brokers\\AbstractDatabaseBroker.cs:line 94\r\n2013/06/07 02:23:22 PM :: INFO -> Error retrieving shape from service output.\r\n2013/06/07 02:23:22 PM :: INFO -> Error retrieving shape from service output. Stacktrace : Error retrieving shape from service output.\r\n2013/06/07 02:23:25 PM :: ERROR -> Transactional Error : This SqlTransaction has completed; it is no longer usable.\r\n   at System.Data.SqlClient.SqlTransaction.ZombieCheck()\r\n   at System.Data.SqlClient.SqlTransaction.Rollback()\r\n   at Dev2.Runtime.ServiceModel.Esb.Brokers.AbstractDatabaseBroker.TestService(DbService dbService) in c:\\Development\\DEV2 SCRUM Project\\Branches\\BUG_9598\\Dev2.Runtime.Services\\ServiceModel\\Esb\\Brokers\\AbstractDatabaseBroker.cs:line 121\r\n2013/06/07 04:14:38 PM :: INFO -> Preloading assemblies...  \r\n2013/06/07 04:14:38 PM :: INFO -> done.\r\n2013/06/07 04:14:38 PM :: INFO -> SLM garbage collection manager disabled.\r\n2013/06/07 04:14:38 PM :: INFO -> Starting DataList Server...  \r\n2013/06/07 04:14:38 PM :: INFO -> done.\r\n2013/06/07 04:14:38 PM :: INFO -> \r\n2013/06/07 04:14:38 PM :: INFO -> Loading resource catalog...  \r\n2013/06/07 04:14:39 PM :: ERROR -> Resource 'Cities Database' from file 'C:\\Development\\DEV2 SCRUM Project\\Branches\\BUG_9598\\Dev2.Server\\bin\\Debug\\Sources\\Cities Database.xml' wasn't loaded because a resource with the same name has already been loaded from file 'Cities Database'.\r\n2013/06/07 04:14:39 PM :: ERROR -> Resource 'EndPointInterrogator' from file 'C:\\Development\\DEV2 SCRUM Project\\Branches\\BUG_9598\\Dev2.Server\\bin\\Debug\\Services\\EndPointInterrogator.xml' wasn't loaded because a resource with the same name has already been loaded from file 'EndPointInterrogator'.\r\n2013/06/07 04:14:39 PM :: ERROR -> Resource 'Dev2HorizontialLinkMenu' from file 'C:\\Development\\DEV2 SCRUM Project\\Branches\\BUG_9598\\Dev2.Server\\bin\\Debug\\Services\\Dev2HorizontialMenu.xml' wasn't loaded because a resource with the same name has already been loaded from file 'Dev2HorizontialLinkMenu'.\r\n2013/06/07 04:14:39 PM :: ERROR -> Resource 'Textbox.wiz' from file 'C:\\Development\\DEV2 SCRUM Project\\Branches\\BUG_9598\\Dev2.Server\\bin\\Debug\\Services\\Textbox.wiz.xml' wasn't loaded because a resource with the same name has already been loaded from file 'Textbox.wiz'.\r\n2013/06/07 04:14:41 PM :: INFO -> done.\r\n2013/06/07 04:14:41 PM :: INFO -> Loading server workspace...  \r\n2013/06/07 04:14:41 PM :: INFO -> done.\r\n2013/06/07 04:14:41 PM :: INFO -> Opening Execution Channel...  \r\n2013/06/07 04:14:41 PM :: INFO -> done.\r\n2013/06/07 04:14:41 PM :: INFO -> \r\n2013/06/07 04:14:41 PM :: INFO -> Opening DataList Channel...  \r\n2013/06/07 04:14:41 PM :: INFO -> done.\r\n2013/06/07 04:14:41 PM :: INFO -> \r\n2013/06/07 04:14:41 PM :: INFO -> Studio Server listening on 127.0.0.1:77\r\n2013/06/07 04:14:41 PM :: INFO -> Studio Server listening on 192.168.104.25:77\r\n2013/06/07 04:14:41 PM :: INFO -> \r\nWeb Server Started\r\n2013/06/07 04:14:41 PM :: INFO -> Web server listening at http://*:1234/\r\n2013/06/07 04:14:41 PM :: INFO -> Web server listening at https://*:1236/\r\n2013/06/07 04:14:41 PM :: INFO -> Loading settings provider...  \r\n2013/06/07 04:14:41 PM :: INFO -> done.\r\n2013/06/07 04:14:41 PM :: INFO -> Configure logging...  \r\n2013/06/07 04:14:41 PM :: INFO -> done.\r\n2013/06/07 04:14:41 PM :: INFO -> Press <ENTER> to terminate service and/or web server if started\r\n2013/06/07 04:14:54 PM :: ERROR -> Resource 'Cities Database' from file 'C:\\Development\\DEV2 SCRUM Project\\Branches\\BUG_9598\\Dev2.Server\\bin\\Debug\\Workspaces\\c65db9c9-fb35-4468-aefd-4c5c48fe3b49\\Sources\\Cities Database.xml' wasn't loaded because a resource with the same name has already been loaded from file 'Cities Database'.\r\n2013/06/07 04:14:54 PM :: ERROR -> Resource 'Dev2HorizontialLinkMenu' from file 'C:\\Development\\DEV2 SCRUM Project\\Branches\\BUG_9598\\Dev2.Server\\bin\\Debug\\Workspaces\\c65db9c9-fb35-4468-aefd-4c5c48fe3b49\\Services\\Dev2HorizontialMenu.xml' wasn't loaded because a resource with the same name has already been loaded from file 'Dev2HorizontialLinkMenu'.\r\n2013/06/07 04:14:54 PM :: ERROR -> Resource 'EndPointInterrogator' from file 'C:\\Development\\DEV2 SCRUM Project\\Branches\\BUG_9598\\Dev2.Server\\bin\\Debug\\Workspaces\\c65db9c9-fb35-4468-aefd-4c5c48fe3b49\\Services\\EndPointInterrogator.xml' wasn't loaded because a resource with the same name has already been loaded from file 'EndPointInterrogator'.\r\n2013/06/07 04:14:54 PM :: ERROR -> Resource 'Textbox.wiz' from file 'C:\\Development\\DEV2 SCRUM Project\\Branches\\BUG_9598\\Dev2.Server\\bin\\Debug\\Workspaces\\c65db9c9-fb35-4468-aefd-4c5c48fe3b49\\Services\\Textbox.wiz.xml' wasn't loaded because a resource with the same name has already been loaded from file 'Textbox.wiz'.\r\n2013/06/07 04:14:57 PM :: ERROR -> fileTest -> Cache MISS\r\n2013/06/07 04:14:57 PM :: ERROR -> Resource 'Cities Database' from file 'C:\\Development\\DEV2 SCRUM Project\\Branches\\BUG_9598\\Dev2.Server\\bin\\Debug\\Workspaces\\c65db9c9-fb35-4468-aefd-4c5c48fe3b49\\Sources\\Cities Database.xml' wasn't loaded because a resource with the same name has already been loaded from file 'Cities Database'.\r\n2013/06/07 04:14:57 PM :: ERROR -> Resource 'EndPointInterrogator' from file 'C:\\Development\\DEV2 SCRUM Project\\Branches\\BUG_9598\\Dev2.Server\\bin\\Debug\\Workspaces\\c65db9c9-fb35-4468-aefd-4c5c48fe3b49\\Services\\EndPointInterrogator.xml' wasn't loaded because a resource with the same name has already been loaded from file 'EndPointInterrogator'.\r\n2013/06/07 04:14:57 PM :: ERROR -> Resource 'Dev2HorizontialLinkMenu' from file 'C:\\Development\\DEV2 SCRUM Project\\Branches\\BUG_9598\\Dev2.Server\\bin\\Debug\\Workspaces\\c65db9c9-fb35-4468-aefd-4c5c48fe3b49\\Services\\Dev2HorizontialMenu.xml' wasn't loaded because a resource with the same name has already been loaded from file 'Dev2HorizontialLinkMenu'.\r\n2013/06/07 04:14:57 PM :: ERROR -> Resource 'Textbox.wiz' from file 'C:\\Development\\DEV2 SCRUM Project\\Branches\\BUG_9598\\Dev2.Server\\bin\\Debug\\Workspaces\\c65db9c9-fb35-4468-aefd-4c5c48fe3b49\\Services\\Textbox.wiz.xml' wasn't loaded because a resource with the same name has already been loaded from file 'Textbox.wiz'.\r\n"""));
            mockEnvironment.Setup(mock => mock.Connection).Returns(mockConn.Object);

            recorderFeedbackAction.FinishFeedBack(mockEnvironment.Object);

            feedbackRecorder.Verify(r => r.StopRecording(), Times.Exactly(1));
            feedbackInvoker.Verify(r => r.InvokeFeedback(It.IsAny <EmailFeedbackAction>()), Times.Exactly(1));
        }
        // ReSharper disable InconsistentNaming
        public void StartFeedback_Expected_RecordingStarted()
        {
            Mock <IFeedBackRecorder> feedbackRecorder = new Mock <IFeedBackRecorder>();

            feedbackRecorder.Setup(r => r.StartRecording(It.IsAny <string>())).Verifiable();
            CustomContainer.Register <IFeedBackRecorder>(feedbackRecorder.Object);
            Mock <IFeedbackInvoker> feedbackInvoker = new Mock <IFeedbackInvoker>();
            Mock <IPopupController> popup           = Dev2MockFactory.CreateIPopup(MessageBoxResult.OK);

            CustomContainer.Register <IFeedbackInvoker>(feedbackInvoker.Object);
            CustomContainer.Register <IWindowManager>(new Mock <IWindowManager>().Object);
            CustomContainer.Register <IPopupController>(popup.Object);

            RecorderFeedbackAction recorderFeedbackAction = new RecorderFeedbackAction();

            recorderFeedbackAction.StartFeedback();

            feedbackRecorder.Verify(r => r.StartRecording(It.IsAny <string>()), Times.Exactly(1));
        }
        public void CancelFeedback_Expected_KillAllInvoked()
        {
            Mock <IFeedBackRecorder> feedbackRecorder = new Mock <IFeedBackRecorder>();

            feedbackRecorder.Setup(r => r.KillAllRecordingTasks()).Verifiable();

            Mock <IFeedbackInvoker> feedbackInvoker = new Mock <IFeedbackInvoker>();
            Mock <IPopupController> popup           = Dev2MockFactory.CreateIPopup(MessageBoxResult.OK);

            CustomContainer.Register <IFeedBackRecorder>(feedbackRecorder.Object);
            CustomContainer.Register <IFeedbackInvoker>(feedbackInvoker.Object);
            CustomContainer.Register <IWindowManager>(new Mock <IWindowManager>().Object);
            CustomContainer.Register <IPopupController>(popup.Object);

            RecorderFeedbackAction recorderFeedbackAction = new RecorderFeedbackAction();

            recorderFeedbackAction.CancelFeedback();

            feedbackRecorder.Verify(r => r.KillAllRecordingTasks(), Times.Exactly(1));
        }
        public void StartFeedback_Where_FeedbackRecordingAlreadyRunningAndYesIsAnsweredToKillPrompt_Expected_KillAllRecordingTasks()
        {
            int callCount = 0;
            Mock <IFeedBackRecorder> feedbackRecorder = new Mock <IFeedBackRecorder>();

            feedbackRecorder.Setup(r => r.StartRecording(It.IsAny <string>())).Callback(() =>
            {
                callCount++;

                if (callCount == 1)
                {
                    throw new FeedbackRecordingInprogressException();
                }

                if (callCount > 2)
                {
                    throw new Exception("Error in test mock logic, this point should never be reached. This exception's purpose is to end a potential infinite loop.");
                }
            }
                                                                                        ).Verifiable();
            feedbackRecorder.Setup(r => r.KillAllRecordingTasks()).Verifiable();

            CustomContainer.Register <IFeedBackRecorder>(feedbackRecorder.Object);
            Mock <IFeedbackInvoker> feedbackInvoker = new Mock <IFeedbackInvoker>();
            Mock <IPopupController> popup           = Dev2MockFactory.CreateIPopup(MessageBoxResult.Yes);

            CustomContainer.Register <IFeedbackInvoker>(feedbackInvoker.Object);
            CustomContainer.Register <IWindowManager>(new Mock <IWindowManager>().Object);
            CustomContainer.Register <IPopupController>(popup.Object);

            RecorderFeedbackAction recorderFeedbackAction = new RecorderFeedbackAction();

            recorderFeedbackAction.StartFeedback();

            feedbackRecorder.Verify(r => r.StartRecording(It.IsAny <string>()), Times.Exactly(2));
            feedbackRecorder.Verify(r => r.KillAllRecordingTasks(), Times.Exactly(1));
            popup.Verify(p => p.Show(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <MessageBoxButton>(), It.IsAny <MessageBoxImage>(), It.IsAny <string>()), Times.Exactly(3));
        }
        public void CancelFeedback_Where_TimeOutOccurs_Expected_KillAllInvoked()
        {
            Mock <IFeedBackRecorder> feedbackRecorder = new Mock <IFeedBackRecorder>();

            feedbackRecorder.Setup(r => r.KillAllRecordingTasks()).Callback(() =>
            {
                throw new FeedbackRecordingTimeoutException();
            }).Verifiable();

            Mock <IFeedbackInvoker> feedbackInvoker = new Mock <IFeedbackInvoker>();
            Mock <IPopupController> popup           = Dev2MockFactory.CreateIPopup(MessageBoxResult.OK);

            CustomContainer.Register <IFeedBackRecorder>(feedbackRecorder.Object);
            CustomContainer.Register <IFeedbackInvoker>(feedbackInvoker.Object);
            CustomContainer.Register <IWindowManager>(new Mock <IWindowManager>().Object);
            CustomContainer.Register <IPopupController>(popup.Object);

            RecorderFeedbackAction recorderFeedbackAction = new RecorderFeedbackAction();

            recorderFeedbackAction.CancelFeedback();

            feedbackRecorder.Verify(r => r.KillAllRecordingTasks(), Times.Exactly(1));
            popup.Verify(p => p.Show(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <MessageBoxButton>(), It.IsAny <MessageBoxImage>(), It.IsAny <string>()), Times.Exactly(1));
        }
        public void FinshFeedback_Where_NoProcessesToStop_Expected_RecordingStoppedInvoked()
        {
            Mock <IFeedBackRecorder> feedbackRecorder = new Mock <IFeedBackRecorder>();

            feedbackRecorder.Setup(r => r.StopRecording()).Callback(() =>
            {
                throw new FeedbackRecordingNoProcessesExcpetion();
            }).Verifiable();

            Mock <IFeedbackInvoker> feedbackInvoker = new Mock <IFeedbackInvoker>();
            Mock <IPopupController> popup           = Dev2MockFactory.CreateIPopup(MessageBoxResult.OK);

            CustomContainer.Register <IFeedBackRecorder>(feedbackRecorder.Object);
            CustomContainer.Register <IFeedbackInvoker>(feedbackInvoker.Object);
            CustomContainer.Register <IWindowManager>(new Mock <IWindowManager>().Object);
            CustomContainer.Register <IPopupController>(popup.Object);

            RecorderFeedbackAction recorderFeedbackAction = new RecorderFeedbackAction();

            recorderFeedbackAction.FinishFeedBack();

            feedbackRecorder.Verify(r => r.StopRecording(), Times.Exactly(1));
            popup.Verify(p => p.Show(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <MessageBoxButton>(), It.IsAny <MessageBoxImage>(), It.IsAny <string>()), Times.Exactly(1));
        }