/// <summary> /// Add Build_Message activity to existing plan and configure the activity with message name and body template /// </summary> /// <param name="plan"></param> /// <param name="ordering"></param> /// <param name="messageName"></param> /// <param name="messageBodyTemplate"></param> /// <returns></returns> public async Task <ActivityDTO> AddAndConfigureBuildMessage(PlanDTO plan, int ordering, string messageName, string messageBodyTemplate) { var activityName = "Build_Message"; var buildMessageActivityDTO = FixtureData.Build_Message_v1_InitialConfiguration(); var activityCategoryParam = ActivityCategories.ProcessId.ToString(); var activityTemplates = await _baseHubITest.HttpGetAsync <List <WebServiceActivitySetDTO> >(_baseHubITest.GetHubApiBaseUrl() + "webservices?id=" + activityCategoryParam); var apmActivityTemplate = activityTemplates .SelectMany(a => a.Activities) .Select(x => new ActivityTemplateSummaryDTO { Name = x.Name, Version = x.Version, TerminalName = x.Terminal.Name, TerminalVersion = x.Terminal.Version }) .Single(a => a.Name == activityName); buildMessageActivityDTO.ActivityTemplate = apmActivityTemplate; //connect current activity with a plan var subPlan = plan.SubPlans.FirstOrDefault(); buildMessageActivityDTO.ParentPlanNodeId = subPlan.SubPlanId; buildMessageActivityDTO.RootPlanNodeId = plan.Id; buildMessageActivityDTO.Ordering = ordering; //call initial configuration to server buildMessageActivityDTO = await _baseHubITest.HttpPostAsync <ActivityDTO, ActivityDTO>(_baseHubITest.GetHubApiBaseUrl() + "activities/save", buildMessageActivityDTO); //this call is without authtoken buildMessageActivityDTO = await _baseHubITest.HttpPostAsync <ActivityDTO, ActivityDTO>(_baseHubITest.GetHubApiBaseUrl() + "activities/configure", buildMessageActivityDTO); //call followup configuration using (var crateStorage = _baseHubITest.Crate.GetUpdatableStorage(buildMessageActivityDTO)) { var controlsCrate = crateStorage.CratesOfType <StandardConfigurationControlsCM>().First(); Assert.IsNotNull(controlsCrate, $"{activityName}: Crate StandardConfigurationControlsCM is missing in API response"); var activityUi = new Build_Message_v1.ActivityUi(); activityUi.SyncWith(controlsCrate.Content); crateStorage.Remove <StandardConfigurationControlsCM>(); activityUi.Name.Value = messageName; activityUi.Body.Value = messageBodyTemplate; crateStorage.Add(Crate <StandardConfigurationControlsCM> .FromContent(controlsCrate.Label, new StandardConfigurationControlsCM(activityUi.Controls.ToArray()))); } buildMessageActivityDTO = await _baseHubITest.HttpPostAsync <ActivityDTO, ActivityDTO>(_baseHubITest.GetHubApiBaseUrl() + "activities/save", buildMessageActivityDTO); buildMessageActivityDTO = await _baseHubITest.HttpPostAsync <ActivityDTO, ActivityDTO>(_baseHubITest.GetHubApiBaseUrl() + "activities/configure", buildMessageActivityDTO); return(buildMessageActivityDTO); }