/// <summary>
        /// Wechselt zum Tab InhaltsEditor und selektiert den übergebenen Workflo
        /// </summary>
        /// <param name="workflow">der Workflow der ausgewählt werden soll</param>
        public void SwitchToWorkflow(Workflow workflow)
        {
            // zur "Workflow editieren"-Ansicht wechseln
            SelectedTabIndex = 1;

            ClientSession.Instance.WorkflowAdded(workflow);
        }
        public void CreateJobWithoutFirstTask()
        {
            var createJobResponse = new CreateJobResponse();
            createJobResponse.JobId = 2;
            createJobResponse.TaskId = null;

            var workflow = new Workflow(5);
            var retrievedCreateJobResponse = client.CreateJob(workflow);

            Assert.AreEqual(createJobResponse.JobId, retrievedCreateJobResponse.JobId);
            Assert.AreEqual(createJobResponse.TaskId, retrievedCreateJobResponse.TaskId);
        }
 /// <summary>
 /// Message-Delegate wenn ein Workflow hinzugefügt wurde
 /// </summary>
 /// <param name="workflow"></param>
 public void WorkflowAdded(Workflow workflow)
 {
     UpdateWorkflows(workflow);
 }
        /// <summary>
        /// Meldet das System an allen relevanten Workflow bezogenen Messages an
        /// </summary>
        /// <param name="workflow"></param>
        public void SubscribeToWorkflow(Workflow workflow)
        {
            if (user == null)
            {
                return;
            }

            if (user.IsAdmin)
            {
                MessageClient.AddWorkflowContentEditorConsumer(workflow.Id, WorkflowUpdatedForContentEditor);
                MessageClient.AddWorkflowEditorConsumer(workflow.Id, WorkflowUpdatedForWorkflowEditor);
            }
            else
            {
                MessageClient.AddWorkflowClientConsumer(workflow.Id, WorkflowUpdated);
            }

        }
 /// <summary>
 /// Entfernt einen Workflow sicher.
 /// </summary>
 /// <param name="workflow">Der zu löschenden Workflow</param>
 public void RemoveWorkflow(Workflow workflow)
 {
     if (workflow.Equals(CurrentWorkflow))
     {
         CurrentWorkflow = null;
     }
     Workflows.Remove(workflow);
 }
        /// <summary>
        /// Methode zum befüllen der Workflow-Liste.
        /// Läd alle Workflows eines eingeloggten Users
        /// </summary>
        public void UpdateWorkflows(Workflow selectNewWorkflow)
        {
            var newWorkflows = RelaxoClient.GetWorkflows();

            // wenn es keine neuen Workflows gibt, leeren
            if (newWorkflows.Count <= 0)
            {
                Workflows.Clear();
                return;
            }

            // wenn es keine momentanen workflows gibt, einfach neue workflows nehmen
            if (Workflows.Count <= 0)
            {
                addWorkflows(newWorkflows);
                CurrentWorkflow = Workflows[0];
                return;
            }


            // gelöschte Workflows aus vorhandenen entfernen
            List<Workflow> toRemoveOldWorkflows = new List<Workflow>();
            foreach (Workflow oldWorkflow in Workflows)
            {
                // TODO: lieber equals überschreiben
                bool foundWorkflow = false;
                foreach (Workflow newWorkflow in newWorkflows)
                {
                    if (newWorkflow.Id == oldWorkflow.Id)
                    {
                        foundWorkflow = true;
                        break;
                    }
                }

                if (foundWorkflow == false)
                {
                    toRemoveOldWorkflows.Add(oldWorkflow);
                }
            }
            RemoveWorkflows(toRemoveOldWorkflows);
            

            // ansonsten schon vorhandene aus liste löschen
            foreach (Workflow oldWorkflow in Workflows)
            {
                // TODO: lieber equals überschreiben
                List<Workflow> toRemove = new List<Workflow>();
                foreach (Workflow newWorkflow in newWorkflows)
                {
                    if (newWorkflow.Id == oldWorkflow.Id)
                    {
                        toRemove.Add(newWorkflow);
                    }
                }
                
                // remove
                foreach (Workflow toRemoveWorkflow in toRemove)
                {
                    newWorkflows.Remove(toRemoveWorkflow);
                }

            }

            // fertig, wenn es keine neuen Workflows gibt
            if (newWorkflows.Count <= 0)
            {
                return;
            }

            // ansonsten neue Workflows adden
            addWorkflows(newWorkflows);

            // neuen Workflow auswählen, falls gesetzt
            if (selectNewWorkflow != null)
            {
                foreach (Workflow workflow in Workflows)
                {
                    // Contain/Equals geht nicht, da `selectNewWorkflow` nur ein Dummy von der REST-Response ist
                    if (workflow.Id == selectNewWorkflow.Id)
                    {
                        CurrentWorkflow = workflow;
                    }
                }
            }

        }
        public void CreateJobWithFirstTask()
        {
            restClientMock = new Mock<IRestClient>();
            restClientMock.Setup(x => x.Execute(It.IsAny<IRestRequest>()))
                .Returns(new RestResponse
                {
                    ContentType = "application/json",
                    StatusCode = HttpStatusCode.Created,
                    Content = @"
                    {
                        ""data"": {
                            ""jobId"": 2,
                            ""taskId"": 5
                        }
                    }"
                });
            client = new RelaxoClient(restClientMock.Object);



            var createJobResponse = new CreateJobResponse();
            createJobResponse.JobId = 2;
            createJobResponse.TaskId = 5;

            var workflow = new Workflow(5);
            var retrievedCreateJobResponse = client.CreateJob(workflow);

            Assert.AreEqual(createJobResponse.JobId, retrievedCreateJobResponse.JobId);
            Assert.AreEqual(createJobResponse.TaskId, retrievedCreateJobResponse.TaskId);
        }
 public WorkflowChangedEventArgs(object sender, Workflow oldWorkflow, Workflow newWorkflow)
     :base(sender, newWorkflow)
 {
     OldWorkflow = oldWorkflow;
 }
 public WorkflowEventArgs(object sender, Workflow w)
     :base()
 {
     Workflow = w;
     Sender = sender;
 }