Inheritance: IServiceDebugInfoModel
 public static IServiceDebugInfoModel CreateServiceDebugInfoModel(IContextualResourceModel resourceModel, string serviceInputData, DebugMode debugSetting)
 {
     IServiceDebugInfoModel serviceDebugInfoModel = new ServiceDebugInfoModel();
     serviceDebugInfoModel.ResourceModel = resourceModel;
     serviceDebugInfoModel.DebugModeSetting = debugSetting;
     serviceDebugInfoModel.ServiceInputData = serviceInputData;
     serviceDebugInfoModel.RememberInputs = true;
     return serviceDebugInfoModel;
 }
        public void WorkflowInputDataViewModel_Save_WithScalarVariable_ExpectNewDataListInputViewModelItems()
        {
            //------------Setup for test--------------------------
            var rm = new Mock<IContextualResourceModel>();
            rm.Setup(r => r.ServerID).Returns(_serverID);
            rm.Setup(r => r.ResourceName).Returns(ResourceName);
            rm.Setup(r => r.WorkflowXaml).Returns(new StringBuilder(StringResourcesTest.DebugInputWindow_WorkflowXaml));
            rm.Setup(r => r.ID).Returns(_resourceID);
            rm.Setup(r => r.DataList).Returns("<DataList><rs Description=\"\" IsEditable=\"True\" ColumnIODirection=\"Input\" ><val Description=\"\" IsEditable=\"True\" ColumnIODirection=\"Input\" /></rs></DataList>");

            var serviceDebugInfoModel = new ServiceDebugInfoModel
            {
                DebugModeSetting = DebugMode.DebugInteractive,
                RememberInputs = true,
                ResourceModel = rm.Object,
                ServiceInputData = "<DataList><rs><val>1</val></rs></DataList>"
            };

            var debugOutputViewModel = CreateDebugOutputViewModel();
            var workflowInputDataViewModel = new WorkflowInputDataViewModelMock(serviceDebugInfoModel, debugOutputViewModel);
            workflowInputDataViewModel.LoadWorkflowInputs();

            //------------Execute Test---------------------------
            workflowInputDataViewModel.WorkflowInputs.Add(new DataListItem { DisplayValue = "rs(2).val", Field = "val", Recordset = "rs", IsRecordset = true, Value = "2", RecordsetIndex = "2" });
            workflowInputDataViewModel.Save();

            //------------Assert Results-------------------------
            const string expectedPayload = @"<DataList>
              <rs>
            <val>1</val>
              </rs>
              <rs>
            <val>2</val>
              </rs>
            </DataList>";
            Assert.AreEqual(expectedPayload, workflowInputDataViewModel.DebugTo.XmlData);
        }
        public void WorkflowInputDataViewModel_ExecuteWorkflow_InvokesSendExecuteRequest()
        {
            //------------Setup for test--------------------------
            var rm = new Mock<IContextualResourceModel>();
            rm.Setup(r => r.ServerID).Returns(_serverID);
            rm.Setup(r => r.ResourceName).Returns(ResourceName);
            rm.Setup(r => r.WorkflowXaml).Returns(new StringBuilder(StringResourcesTest.DebugInputWindow_WorkflowXaml));
            rm.Setup(r => r.ID).Returns(_resourceID);
            rm.Setup(r => r.DataList).Returns(StringResourcesTest.DebugInputWindow_DataList);
            var mockEnvironmentModel = new Mock<IEnvironmentModel>();
            mockEnvironmentModel.Setup(model => model.ID).Returns(Guid.Empty);
            var mockEnvironmentConnection = new Mock<IEnvironmentConnection>();
            mockEnvironmentModel.Setup(model => model.Connection).Returns(mockEnvironmentConnection.Object);
            rm.Setup(model => model.Environment).Returns(mockEnvironmentModel.Object);

            var serviceDebugInfoModel = new ServiceDebugInfoModel
            {
                DebugModeSetting = DebugMode.DebugInteractive,
                RememberInputs = true,
                ResourceModel = rm.Object,
                ServiceInputData = "<DataList></DataList>"
            };

            var debugOutputViewModel = CreateDebugOutputViewModel();
            var workflowInputDataViewModel = new WorkflowInputDataViewModelMock(serviceDebugInfoModel, debugOutputViewModel);
            workflowInputDataViewModel.DebugExecutionStart += () => debugOutputViewModel.DebugStatus = DebugStatus.Executing;
            //------------Execute Test---------------------------
            workflowInputDataViewModel.ExecuteWorkflow();

            //------------Assert Results-------------------------
            Assert.AreEqual(DebugStatus.Executing, debugOutputViewModel.DebugStatus);

            Assert.AreEqual(1, workflowInputDataViewModel.SendExecuteRequestHitCount);
            Assert.IsNotNull(workflowInputDataViewModel.SendExecuteRequestPayload);

            var payload = XElement.Parse(workflowInputDataViewModel.DebugTo.XmlData);
            payload.Add(new XElement("BDSDebugMode", workflowInputDataViewModel.DebugTo.IsDebugMode));
            payload.Add(new XElement("DebugSessionID", workflowInputDataViewModel.DebugTo.SessionID));
            payload.Add(new XElement("EnvironmentID", Guid.Empty));

            var expectedPayload = payload.ToString(SaveOptions.None);
            var actualPayload = workflowInputDataViewModel.SendExecuteRequestPayload.ToString(SaveOptions.None);
            Assert.AreEqual(expectedPayload, actualPayload);
        }
        public void WorkflowInputDataViewModel_ExecuteWorkflowViewInBrowser_InvokesSendViewInBrowserRequest_ScalarsOnly()
        {
            //------------Setup for test--------------------------
            const string datalist = @"<DataList><val IsEditable=""True"" ColumnIODirection=""Input""/><res IsEditable=""True"" ColumnIODirection=""Input""/></DataList>";
            var rm = new Mock<IContextualResourceModel>();
            rm.Setup(r => r.ServerID).Returns(_serverID);
            rm.Setup(r => r.ResourceName).Returns("AnotherWorkflow");
            rm.Setup(r => r.WorkflowXaml).Returns(new StringBuilder(StringResourcesTest.DebugInputWindow_WorkflowXaml));
            rm.Setup(r => r.ID).Returns(_resourceID);
            rm.Setup(r => r.DataList).Returns(datalist);
            var mockEnvironmentModel = new Mock<IEnvironmentModel>();
            mockEnvironmentModel.Setup(model => model.ID).Returns(Guid.Empty);
            var mockEnvironmentConnection = new Mock<IEnvironmentConnection>();
            mockEnvironmentModel.Setup(model => model.Connection).Returns(mockEnvironmentConnection.Object);
            rm.Setup(model => model.Environment).Returns(mockEnvironmentModel.Object);

            var serviceDebugInfoModel = new ServiceDebugInfoModel
            {
                DebugModeSetting = DebugMode.DebugInteractive,
                RememberInputs = true,
                ResourceModel = rm.Object,
                ServiceInputData = datalist
            };

            var debugOutputViewModel = CreateDebugOutputViewModel();
            var workflowInputDataViewModel = new WorkflowInputDataViewModelMock(serviceDebugInfoModel, debugOutputViewModel) { DebugTo = { DataList = datalist } };
            workflowInputDataViewModel.LoadWorkflowInputs();
            workflowInputDataViewModel.XmlData = @"<DataList><val>1</val><res>2</res></DataList>";
            workflowInputDataViewModel.SetWorkflowInputData();
            //------------Execute Test---------------------------
            workflowInputDataViewModel.ViewInBrowser();
            //------------Assert Results-------------------------
            Assert.AreEqual(1, workflowInputDataViewModel.SendViewInBrowserRequestHitCount);
            Assert.IsNotNull(workflowInputDataViewModel.SendViewInBrowserRequestPayload);
            const string expectedPayload = @"val=1&res=2";
            var actualPayload = workflowInputDataViewModel.SendViewInBrowserRequestPayload;
            Assert.AreEqual(expectedPayload, actualPayload);
        }
        public void WorkflowInputDataViewModel_Constructor_DebugTO_Initialized()
        {
            //------------Setup for test--------------------------
            var rm = new Mock<IContextualResourceModel>();
            rm.Setup(r => r.ServerID).Returns(_serverID);
            rm.Setup(r => r.ResourceName).Returns(ResourceName);
            rm.Setup(r => r.WorkflowXaml).Returns(new StringBuilder(StringResourcesTest.DebugInputWindow_WorkflowXaml));
            rm.Setup(r => r.ID).Returns(_resourceID);
            rm.Setup(r => r.DataList).Returns(StringResourcesTest.DebugInputWindow_DataList);

            var serviceDebugInfoModel = new ServiceDebugInfoModel
            {
                DebugModeSetting = DebugMode.DebugInteractive,
                RememberInputs = true,
                ResourceModel = rm.Object,
                ServiceInputData = "xxxxx"
            };

            var debugVM = CreateDebugOutputViewModel();
            //------------Execute Test---------------------------
            var workflowInputDataViewModel = new WorkflowInputDataViewModel(serviceDebugInfoModel, debugVM.SessionID);

            //------------Assert Results-------------------------
            Assert.AreEqual(rm.Object.DataList, workflowInputDataViewModel.DebugTo.DataList);
            Assert.AreEqual(rm.Object.ResourceName, workflowInputDataViewModel.DebugTo.ServiceName);
            Assert.AreEqual(rm.Object.ResourceName, workflowInputDataViewModel.DebugTo.WorkflowID);
            // Travis 05.12 - Was rm.Object.WorkflowXaml.ToString(), since we no longer carry strings this was silly ;)
            Assert.AreEqual(string.Empty, workflowInputDataViewModel.DebugTo.WorkflowXaml);
            Assert.AreEqual(serviceDebugInfoModel.ServiceInputData, workflowInputDataViewModel.DebugTo.XmlData);
            Assert.AreEqual(rm.Object.ID, workflowInputDataViewModel.DebugTo.ResourceID);
            Assert.AreEqual(rm.Object.ServerID, workflowInputDataViewModel.DebugTo.ServerID);
            Assert.AreEqual(serviceDebugInfoModel.RememberInputs, workflowInputDataViewModel.DebugTo.RememberInputs);
            Assert.AreEqual(debugVM.SessionID, workflowInputDataViewModel.DebugTo.SessionID);
            Assert.IsTrue(workflowInputDataViewModel.DebugTo.IsDebugMode);
        }
        public void SetWorkflowInputData_AddRow_WhenNotAllColumnsInput_ExpectNewRowWithOnlyInputColumns()
        {
            //------------Setup for test--------------------------
            const string Shape = @"<DataList><rec Description="""" IsEditable=""True"" ColumnIODirection=""None"" ><a Description="""" IsEditable=""True"" ColumnIODirection=""Input"" /><b Description="""" IsEditable=""True"" ColumnIODirection=""None"" /></rec></DataList>";

            var rm = new Mock<IContextualResourceModel>();
            rm.Setup(r => r.ServerID).Returns(_serverID);
            rm.Setup(r => r.ResourceName).Returns(ResourceName);
            rm.Setup(r => r.WorkflowXaml).Returns(new StringBuilder(StringResourcesTest.DebugInputWindow_WorkflowXaml));
            rm.Setup(r => r.ID).Returns(_resourceID);
            rm.Setup(r => r.DataList).Returns(Shape);

            var serviceDebugInfoModel = new ServiceDebugInfoModel
            {
                DebugModeSetting = DebugMode.DebugInteractive,
                RememberInputs = true,
                ResourceModel = rm.Object,
                ServiceInputData = "xxxxx"
            };

            var debugVM = CreateDebugOutputViewModel();

            var itemToAdd = new DataListItem { DisplayValue = "rec(1).a", Field = "a", Recordset = "rec", IsRecordset = true, RecordsetIndex = "1", RecordsetIndexType = enRecordsetIndexType.Numeric, Value = "1" };

            //------------Execute Test---------------------------
            var workflowInputDataViewModel = new WorkflowInputDataViewModel(serviceDebugInfoModel, debugVM.SessionID);
            workflowInputDataViewModel.LoadWorkflowInputs();
            var inputs = workflowInputDataViewModel.WorkflowInputs;
            Assert.AreEqual(1, inputs.Count);
            inputs[0].Value = "1"; // trick it into thinking this happened from the UI ;)
            workflowInputDataViewModel.AddRow(itemToAdd);

            //------------Assert Results-------------------------
            inputs = workflowInputDataViewModel.WorkflowInputs;
            Assert.AreEqual(2, inputs.Count);
        }