public async Task <Document> SaveAnswersAsync(CuratedExperienceAnswersViewModel viewModelAnswer, CuratedExperience curatedExperience) { var dbAnswers = MapCuratedExperienceViewModel(viewModelAnswer, curatedExperience); var savedAnswersDoc = await dbService.GetItemAsync <CuratedExperienceAnswers>(viewModelAnswer.AnswersDocId.ToString(), dbSettings.GuidedAssistantAnswersCollectionId); if (savedAnswersDoc == null || savedAnswersDoc.AnswersDocId == default(Guid)) { return(await dbService.CreateItemAsync(dbAnswers, dbSettings.GuidedAssistantAnswersCollectionId)); } savedAnswersDoc.ButtonComponents.AddRange(dbAnswers.ButtonComponents); savedAnswersDoc.FieldComponents.AddRange(dbAnswers.FieldComponents); return(await dbService.UpdateItemAsync(viewModelAnswer.AnswersDocId.ToString(), savedAnswersDoc, dbSettings.GuidedAssistantAnswersCollectionId)); }
public async Task <IActionResult> SaveAndGetNextComponent([FromBody] CuratedExperienceAnswersViewModel component) { if (component != null) { var curatedExperience = sessionManager.RetrieveCachedCuratedExperience(component.CuratedExperienceId, HttpContext); var document = await curatedExperienceBusinessLogic.SaveAnswersAsync(component, curatedExperience); if (component == null) { return(StatusCode(StatusCodes.Status500InternalServerError)); } return(Ok(await curatedExperienceBusinessLogic.GetNextComponentAsync(curatedExperience, component))); } return(StatusCode(400)); }
public async Task <CuratedExperienceComponentViewModel> GetNextComponentAsync(CuratedExperience curatedExperience, CuratedExperienceAnswersViewModel component) { return(MapComponentViewModel(curatedExperience, await FindDestinationComponentAsync(curatedExperience, component.ButtonId, component.AnswersDocId), component.AnswersDocId)); }
public CuratedExperienceAnswers MapCuratedExperienceViewModel(CuratedExperienceAnswersViewModel viewModelAnswer, CuratedExperience curatedExperience) { var buttonComponent = new CuratedExperienceComponent(); foreach (var component in curatedExperience.Components) { if (component.Buttons.Where(x => x.Id == viewModelAnswer.ButtonId).Any()) { var button = component.Buttons.Where(x => x.Id == viewModelAnswer.ButtonId).FirstOrDefault(); buttonComponent = curatedExperience.Components.Where(x => x.Buttons.Contains(button)).FirstOrDefault(); } } var userSelectedButtons = new List <ButtonComponent>(); userSelectedButtons.Add(new ButtonComponent { ButtonId = viewModelAnswer.ButtonId, Name = buttonComponent.Buttons.Where(x => x.Id == viewModelAnswer.ButtonId).FirstOrDefault().Name, Value = buttonComponent.Buttons.Where(x => x.Id == viewModelAnswer.ButtonId).FirstOrDefault().Value, CodeBefore = buttonComponent.Code.CodeBefore, CodeAfter = buttonComponent.Code.CodeAfter }); var userSelectedFields = new List <FieldComponent>(); foreach (var answerField in viewModelAnswer.Fields) { var fieldComponent = new CuratedExperienceComponent(); foreach (var component in curatedExperience.Components) { if (answerField != null && component.Fields.Where(x => x.Id == Guid.Parse(answerField.FieldId)).Any()) { var selectedField = component.Fields.Where(x => x.Id == Guid.Parse(answerField.FieldId)).FirstOrDefault(); fieldComponent = curatedExperience.Components.Where(x => x.Fields.Contains(selectedField)).FirstOrDefault(); userSelectedFields.Add(new FieldComponent { CodeBefore = userSelectedButtons.Any(x => x.CodeBefore == fieldComponent.Code.CodeBefore) ? string.Empty : fieldComponent.Code.CodeBefore, CodeAfter = userSelectedButtons.Any(x => x.CodeAfter == fieldComponent.Code.CodeAfter) ? string.Empty : fieldComponent.Code.CodeAfter, Fields = new List <AnswerField> { new AnswerField { FieldId = selectedField.Id, Text = answerField.Value, Name = selectedField.Name, Value = selectedField.Value } } }); } } } return(new CuratedExperienceAnswers { CuratedExperienceId = viewModelAnswer.CuratedExperienceId, AnswersDocId = viewModelAnswer.AnswersDocId, ButtonComponents = userSelectedButtons, FieldComponents = userSelectedFields }); }
public void SaveAnswersAsyncNoAnswersDocIdValidate(CuratedExperience curatedExperiencedata, dynamic expectedData, Guid answersDocId, CuratedExperienceAnswersViewModel viewModelAnswer, CuratedExperienceAnswers curatedExperienceAnswers, dynamic CuratedExperienceAnswersSchema) { //arrange var dbResponse = dbService.GetItemAsync <CuratedExperienceAnswers>(answersDocId.ToString(), dbSettings.GuidedAssistantAnswersCollectionId); dbResponse.ReturnsForAnyArgs <CuratedExperienceAnswers>(curatedExperienceAnswers); Document updatedDocument = new Document(); JsonTextReader reader = new JsonTextReader(new StringReader(CuratedExperienceAnswersSchema)); updatedDocument.LoadFrom(reader); dbService.UpdateItemAsync <CuratedExperienceAnswersViewModel>( Arg.Any <string>(), Arg.Any <CuratedExperienceAnswersViewModel>(), Arg.Any <string>()).ReturnsForAnyArgs <Document>(updatedDocument); dbService.CreateItemAsync <CuratedExperienceAnswers>( Arg.Any <CuratedExperienceAnswers>(), Arg.Any <string>()).ReturnsForAnyArgs <Document>(updatedDocument); //act var response = curatedExperience.SaveAnswersAsync(viewModelAnswer, curatedExperiencedata); var actualResult = JsonConvert.SerializeObject(response.Result); //assert Assert.Contains(expectedData, actualResult); }
public void GetNextComponentAsyncValidate(CuratedExperience curatedExperiencedata, CuratedExperienceComponentViewModel expectedData, Guid answersDocId, CuratedExperienceAnswersViewModel component, CuratedExperienceAnswers curatedExperienceAnswers) { //arrange var dbResponse = dbService.GetItemAsync <CuratedExperienceAnswers>(answersDocId.ToString(), dbSettings.GuidedAssistantAnswersCollectionId); dbResponse.ReturnsForAnyArgs <CuratedExperienceAnswers>(curatedExperienceAnswers); //act var response = curatedExperience.GetNextComponentAsync(curatedExperiencedata, component); var actualResult = JsonConvert.SerializeObject(response.Result); var expectedResult = JsonConvert.SerializeObject(expectedData); //assert Assert.Equal(expectedResult, actualResult); }