private static CaseEltInstance BuildStage(string id, tStage stage, string casePlanInstanceId) { var planItems = BuildPlanItems(stage, casePlanInstanceId); var result = new CaseEltInstance { Id = CaseEltInstance.BuildId(casePlanInstanceId, stage.id, 0), Name = stage.name, EltId = id, Type = CasePlanElementInstanceTypes.STAGE }; foreach (var planItem in planItems) { result.AddChild(planItem); } if (!result.ExitCriterions.Any() && stage.exitCriterion != null) { foreach (var exitCriteria in stage.exitCriterion) { var sEntry = stage.sentry.First(s => s.id == exitCriteria.sentryRef); result.AddExitCriteria(new Criteria(exitCriteria.name) { SEntry = BuildSEntry(sEntry) }); } } return(result); }
public async Task When_Execute_Human_Task() { var humanTaskInstanceId = Guid.NewGuid().ToString(); var instance = CasePlanInstanceBuilder.New("1", "firstCase") .AddHumanTask("2", "humanTask", null, (_) => { }) .Build(); var jobServer = FakeCaseJobServer.New(); jobServer.HttpMessageHandler.Protected() .As <IHttpMessageHandler>() .Setup(x => x.SendAsync(It.IsAny <HttpRequestMessage>(), It.IsAny <CancellationToken>())) .ReturnsAsync(new HttpResponseMessage { Content = new StringContent("{ 'id' : '{" + humanTaskInstanceId + "}' }") }); await jobServer.RegisterCasePlanInstance(instance, CancellationToken.None); await jobServer.EnqueueCasePlanInstance("1", CancellationToken.None); await jobServer.PublishExternalEvt("complete", "1", CaseEltInstance.BuildId("1", "2", 0), new Dictionary <string, string> { { "firstname", "firstname" } }, CancellationToken.None); var casePlanInstance = await jobServer.Get("1", CancellationToken.None); var firstHumanTask = casePlanInstance.StageContent.Children.ElementAt(0); Assert.Equal(CaseStates.Completed, casePlanInstance.State); Assert.Equal(TaskStageStates.Completed, firstHumanTask.TakeStageState); }
public async Task When_Execute_FileItem() { var instance = CasePlanInstanceBuilder.New("1", "firstCase") .AddFileItem("2", "directory", (_) => { _.DefinitionType = CMMNConstants.ContentManagementTypes.FAKE_CMIS_DIRECTORY; }) .AddEmptyTask("3", "emptytask", (_) => { _.AddEntryCriteria("entry", (__) => { __.AddFileItemOnPart("2", CMMNTransitions.AddChild); }); }) .Build(); var jobServer = FakeCaseJobServer.New(); await jobServer.RegisterCasePlanInstance(instance, CancellationToken.None); await jobServer.EnqueueCasePlanInstance("1", CancellationToken.None); await jobServer.PublishExternalEvt("addchild", "1", CaseEltInstance.BuildId("1", "2"), new Dictionary <string, string> { { "fileId", "file" } }, CancellationToken.None); var casePlanInstance = await jobServer.Get("1", CancellationToken.None); var firstFileItem = casePlanInstance.FileItems.ElementAt(0); var firstEmptyTask = casePlanInstance.StageContent.Children.ElementAt(0); Assert.Equal(CaseStates.Completed, casePlanInstance.State); Assert.Equal(CaseFileItemStates.Available, firstFileItem.FileState); Assert.Equal(TaskStageStates.Completed, firstEmptyTask.TakeStageState); }
public async Task When_Execute_Task_With_ManualActivationRule() { var instance = CasePlanInstanceBuilder.New("1", "firstCase") .AddEmptyTask("2", "firstTask", (_) => { _.SetManualActivationRule("name", new CMMNExpression("csharp", "true")); }) .AddEmptyTask("3", "secondTask", (_) => { }) .AddEmptyTask("4", "thirdTask", (_) => { _.AddEntryCriteria("entry", (__) => { __.AddPlanItemOnPart("2", CMMNTransitions.Complete); __.AddPlanItemOnPart("3", CMMNTransitions.Complete); }); }) .Build(); var jobServer = FakeCaseJobServer.New(); await jobServer.RegisterCasePlanInstance(instance, CancellationToken.None); await jobServer.EnqueueCasePlanInstance("1", CancellationToken.None); await jobServer.PublishExternalEvt("manualstart", "1", CaseEltInstance.BuildId("1", "2", 0), new Dictionary <string, string>(), CancellationToken.None); var casePlanInstance = await jobServer.Get("1", CancellationToken.None); var firstEmptyTask = casePlanInstance.StageContent.Children.ElementAt(0); var secondEmptyTask = casePlanInstance.StageContent.Children.ElementAt(0); var thirdEmptyTask = casePlanInstance.StageContent.Children.ElementAt(0); Assert.Equal(CaseStates.Completed, casePlanInstance.State); Assert.Equal(TaskStageStates.Completed, firstEmptyTask.TakeStageState); Assert.Equal(TaskStageStates.Completed, secondEmptyTask.TakeStageState); Assert.Equal(TaskStageStates.Completed, thirdEmptyTask.TakeStageState); }
private static CaseEltInstance BuildPlanItem(string id, string name, tPlanItemDefinition planItemDef, string casePlanInstanceId) { if (string.IsNullOrWhiteSpace(name)) { name = planItemDef.name; } if (planItemDef is tHumanTask) { var humanTask = planItemDef as tHumanTask; List <tHumanTaskParameter> pars = new List <tHumanTaskParameter>(); if (humanTask.implementation == CMMNConstants.UserTaskImplementations.WSHUMANTASK) { var parameters = humanTask.extensionElements?.Any.FirstOrDefault(_ => _.Name == "cmg:parameters"); if (parameters != null) { var xmlSerializer = new XmlSerializer(typeof(tHumanTaskParameter), "https://github.com/simpleidserver/CaseManagement"); foreach (XmlNode child in parameters.ChildNodes) { using (var txtReader = new StringReader(child.OuterXml)) { pars.Add((tHumanTaskParameter)xmlSerializer.Deserialize(txtReader)); } } } } var result = new CaseEltInstance { Id = CaseEltInstance.BuildId(casePlanInstanceId, id, 0), EltId = id, NbOccurrence = 0, Name = name, Type = CasePlanElementInstanceTypes.HUMANTASK }; result.UpdateFormId(humanTask.formId); result.UpdateImplementation(humanTask.implementation); result.UpdateInputParameters(pars.ToDictionary(kvp => kvp.key, kvp => kvp.value)); result.UpdatePerformerRef(humanTask.performerRef); return(result); } if (planItemDef is tTask) { return(new CaseEltInstance { Id = CaseEltInstance.BuildId(casePlanInstanceId, id, 0), EltId = id, NbOccurrence = 0, Name = name, Type = CasePlanElementInstanceTypes.EMPTYTASK }); } if (planItemDef is tTimerEventListener) { var timer = planItemDef as tTimerEventListener; CMMNExpression expression = new CMMNExpression { Body = timer.timerExpression.Text.First(), Language = timer.timerExpression.language }; var result = new CaseEltInstance { Id = CaseEltInstance.BuildId(casePlanInstanceId, id, 0), EltId = id, NbOccurrence = 0, Name = name, Type = CasePlanElementInstanceTypes.TIMER }; result.UpdateTimerExpression(expression); return(result); } if (planItemDef is tMilestone) { return(new CaseEltInstance { Id = CaseEltInstance.BuildId(casePlanInstanceId, id, 0), EltId = id, NbOccurrence = 0, Name = name, Type = CasePlanElementInstanceTypes.MILESTONE }); } if (planItemDef is tStage) { return(BuildStage(id, planItemDef as tStage, casePlanInstanceId)); } return(null); }
protected override string BuildId() { return(CaseEltInstance.BuildId(CasePlanInstanceId, EltId, Version)); }