/// <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);
        }