public void GetAnswerStringValue_ShouldGenerateCorrectValue_ForBooking_WhenDateTime_IsMinValue() { // Arrange var questionId = "test-bookingID"; var date = DateTime.MinValue; var formAnswers = new FormAnswers { Pages = new List <PageAnswers> { new PageAnswers { Answers = new List <Answers> { new Answers { QuestionId = $"{questionId}-{BookingConstants.RESERVED_BOOKING_DATE}", Response = date.ToString() } } } } }; var element = new ElementBuilder() .WithType(EElementType.Booking) .WithQuestionId(questionId) .Build(); // Act var result = _elementMapper.GetAnswerStringValue(element, formAnswers); // Assert Assert.Equal(string.Empty, result); }
public async Task RenderAsync_ShouldCallGenerateDocumentUploadUrl_Base64StringCaseRef() { //Arrange var element = new ElementBuilder() .WithType(EElementType.DocumentUpload) .Build(); var page = new PageBuilder() .WithElement(element) .Build(); var viewModel = new Dictionary <string, dynamic>(); var schema = new FormSchemaBuilder() .WithName("form-name") .Build(); var formAnswers = new FormAnswers(); //Act await element.RenderAsync( _mockIViewRender.Object, _mockElementHelper.Object, string.Empty, viewModel, page, schema, _mockHostingEnv.Object, formAnswers); //Assert _mockIViewRender.Verify(_ => _.RenderAsync(It.Is <string>(x => x.Equals("DocumentUpload")), It.IsAny <DocumentUpload>(), It.IsAny <Dictionary <string, object> >()), Times.Once); _mockElementHelper.Verify(_ => _.GenerateDocumentUploadUrl(It.IsAny <Element>(), It.IsAny <FormSchema>(), It.IsAny <FormAnswers>()), Times.Once); }
public void CurrentValue_ShouldReturnStoredValueOfElement_WhenCacheDataContainsElementValue() { // Arrange var formAnswers = new FormAnswers { Pages = new List <PageAnswers> { new PageAnswers { PageSlug = "test-slug", Answers = new List <Answers> { new Answers { QuestionId = "test-id", Response = "this is the value" } } } } }; var viewModel = new Dictionary <string, dynamic>(); // Act var result = _elementHelper.CurrentValue("test-id", viewModel, formAnswers); // Assert Assert.Equal("this is the value", result); }
public async Task RenderAsync_ShouldCall_ElementHelper_ToGetCurrentValue_ForAddressFields() { //Arrange var element = new ElementBuilder() .WithType(EElementType.AddressManual) .Build(); var page = new PageBuilder() .WithElement(element) .Build(); var viewModel = new Dictionary <string, dynamic> { { AddressManualConstants.POSTCODE, "sk11aa" } }; var schema = new FormSchemaBuilder() .WithName("form-name") .Build(); var formAnswers = new FormAnswers(); //Act var result = await element.RenderAsync( _mockIViewRender.Object, _mockElementHelper.Object, string.Empty, viewModel, page, schema, _mockHostingEnv.Object, formAnswers); //Assert _mockIViewRender.Verify(_ => _.RenderAsync(It.Is <string>(x => x == "AddressManual"), It.IsAny <form_builder.Models.Elements.AddressManual>(), It.IsAny <Dictionary <string, object> >()), Times.Once); _mockElementHelper.Verify(_ => _.CurrentValue(It.IsAny <string>(), It.IsAny <Dictionary <string, dynamic> >(), It.IsAny <FormAnswers>(), It.IsAny <string>()), Times.Exactly(4)); }
public void Parse_ShouldReturnUpdatedValue_WhenReplacingSingleValue() { var expectedString = "this value testfirstname should be replaced with name question"; var element = new ElementBuilder() .WithType(EElementType.P) .WithPropertyText("this value {{FORMDATA:firstname}} should be replaced with name question") .Build(); var page = new PageBuilder() .WithElement(element) .Build(); var formAnswers = new FormAnswers { AdditionalFormData = new Dictionary <string, object> { { "firstname", "testfirstname" } } }; var result = _tagParser.Parse(page, formAnswers); Assert.Equal(expectedString, result.Elements.FirstOrDefault().Properties.Text); }
private TimeSpan?GetTimeElementValue(string key, FormAnswers formAnswers) { dynamic dateObject = new ExpandoObject(); var timeMinutesKey = $"{key}{TimeConstants.MINUTES_SUFFIX}"; var timeHoursKey = $"{key}{TimeConstants.HOURS_SUFFIX}"; var timeAmPmKey = $"{key}{TimeConstants.AM_PM_SUFFIX}"; var value = formAnswers.Pages.SelectMany(_ => _.Answers) .Where(_ => _.QuestionId.Equals(timeMinutesKey) || _.QuestionId.Equals(timeHoursKey) || _.QuestionId.Equals(timeAmPmKey)) .ToList(); var minutes = value.FirstOrDefault(_ => _.QuestionId.Equals(timeMinutesKey))?.Response ?? string.Empty; var hour = value.FirstOrDefault(_ => _.QuestionId.Equals(timeHoursKey))?.Response ?? string.Empty; var amPm = value.FirstOrDefault(_ => _.QuestionId.Equals(timeAmPmKey))?.Response ?? string.Empty; if (string.IsNullOrEmpty(minutes) || string.IsNullOrEmpty(hour) || string.IsNullOrEmpty(amPm)) { return(null); } var dateTime = DateTime.Parse($"{hour}:{minutes} {amPm}"); return(dateTime.TimeOfDay); }
public void GetReducedAnswers_ShouldReturnPageAnswers_ThatExistInSchema() { // Arrange var formAnswers = new FormAnswers { Pages = new List <PageAnswers> { new PageAnswers { Answers = new List <Answers>(), PageSlug = "page-1" }, new PageAnswers { Answers = new List <Answers>(), PageSlug = "page-2" }, new PageAnswers { Answers = new List <Answers>(), PageSlug = "page-3" } } }; var formSchema = new FormSchemaBuilder() .WithPage(new Page { PageSlug = "page-1", Behaviours = new List <Behaviour> { new Behaviour { BehaviourType = EBehaviourType.GoToPage, PageSlug = "page-3" } } }) .WithPage(new Page { PageSlug = "page-2", Behaviours = new List <Behaviour> { new Behaviour { BehaviourType = EBehaviourType.GoToPage, PageSlug = "page-3" } } } ) .WithFirstPageSlug("page-1") .Build(); // Act var result = formAnswers.GetReducedAnswers(formSchema); // Assert Assert.Single(result); }
public void GetAnswerValue_ShouldReturnSingleDateWhenElementIsDatePicker() { // Arrange var element = new ElementBuilder() .WithType(EElementType.DatePicker) .WithQuestionId("testDate") .Build(); var formAnswers = new FormAnswers { Pages = new List <PageAnswers> { new PageAnswers { Answers = new List <Answers> { new Answers { QuestionId = "testDate", Response = "21/02/2020" } } } } }; // Act var result = _elementMapper.GetAnswerValue(element, formAnswers); // Assert Assert.IsType <DateTime>(result); }
public void GetAnswerValue_ShouldReturnValue() { // Arrange var element = new ElementBuilder() .WithQuestionId("test") .Build(); var formAnswers = new FormAnswers { Pages = new List <PageAnswers> { new PageAnswers { Answers = new List <Answers> { new Answers { QuestionId = "test", Response = "testTwo" } } } } }; // Act var result = _elementMapper.GetAnswerValue(element, formAnswers); // Assert Assert.IsType <string>(result); }
public void GetAnswerValue_ShouldReturnBookingModel_WhenElementIsBooking() { // Arrange var questionId = "testbookingId"; var dateTime = DateTime.Now; var startTime = DateTime.Today.Add(new TimeSpan(22, 0, 0)); var element = new ElementBuilder() .WithQuestionId(questionId) .WithType(EElementType.Booking) .Build(); var formAnswers = new FormAnswers { Pages = new List <PageAnswers> { new PageAnswers { Answers = new List <Answers> { new Answers { QuestionId = $"{questionId}-{BookingConstants.RESERVED_BOOKING_DATE}", Response = dateTime.ToString() }, new Answers { QuestionId = $"{questionId}-{BookingConstants.RESERVED_BOOKING_START_TIME}", Response = dateTime.ToString() } } } } }; // Act var result = _elementMapper.GetAnswerValue(element, formAnswers); // Assert var dateTimeResult = Assert.IsType <Booking>(result); }
public void GetAnswerValue_ShouldReturnNull_WhenElementIsBooking_AndValueNotFound() { // Arrange var dateTime = DateTime.Now.ToString(); var element = new ElementBuilder() .WithQuestionId("testbookingId") .WithType(EElementType.Booking) .Build(); var formAnswers = new FormAnswers { Pages = new List <PageAnswers> { new PageAnswers { Answers = new List <Answers>() } } }; // Act var result = _elementMapper.GetAnswerValue(element, formAnswers); // Assert Assert.Null(result); }
public void GetAnswerValue_ShouldReturnIntWhenNumericIsTrue() { // Arrange var element = new ElementBuilder() .WithNumeric(true) .WithQuestionId("testNumber") .Build(); var formAnswers = new FormAnswers { Pages = new List <PageAnswers> { new PageAnswers { Answers = new List <Answers> { new Answers { QuestionId = "testNumber", Response = "23" } } } } }; // Act var result = _elementMapper.GetAnswerValue(element, formAnswers); // Assert Assert.IsType <int>(result); }
public void GetAnswerValue_ShouldReturnEmptyArray_WhenResponseIsEmpty_ForCheckbox() { // Arrange var element = new ElementBuilder() .WithQuestionId("testCheckbox") .WithType(EElementType.Checkbox) .Build(); var formAnswers = new FormAnswers { Pages = new List <PageAnswers> { new PageAnswers { Answers = new List <Answers> { new Answers { QuestionId = "testCheckbox" } } } } }; // Act var result = _elementMapper.GetAnswerValue(element, formAnswers); // Assert var type = Assert.IsType <List <string> >(result); Assert.Empty(type); }
public void GetAnswerValue_ShouldReturnArrayOfStrings_WhenElementIsCheckbox() { // Arrange var element = new ElementBuilder() .WithQuestionId("testCheckbox") .WithType(EElementType.Checkbox) .Build(); var formAnswers = new FormAnswers { Pages = new List <PageAnswers> { new PageAnswers { Answers = new List <Answers> { new Answers { QuestionId = "testCheckbox", Response = "option1,option2,option3" } } } } }; // Act var result = _elementMapper.GetAnswerValue(element, formAnswers); // Assert var type = Assert.IsType <List <string> >(result); Assert.Equal("option1", type[0]); Assert.Equal("option2", type[1]); Assert.Equal("option3", type[2]); Assert.Equal(3, type.Count); }
public async Task Build_ShouldCall_Parse_On_TagParsers() { // Arrange _tagParser.Setup(_ => _.Parse(It.IsAny<Page>(), It.IsAny<FormAnswers>())) .Returns(new Page()); var tagParserItems = new List<ITagParser> { _tagParser.Object, _tagParser.Object }; _mockTagParsers.Setup(m => m.GetEnumerator()).Returns(() => tagParserItems.GetEnumerator()); _mockPageHelper.Setup(_ => _.GenerateHtml( It.IsAny<Page>(), It.IsAny<Dictionary<string, dynamic>>(), It.IsAny<FormSchema>(), It.IsAny<string>(), It.IsAny<FormAnswers>(), It.IsAny<List<object>>())) .ReturnsAsync(new FormBuilderViewModel { RawHTML = string.Empty }); var formSchema = new FormSchemaBuilder() .WithBaseUrl("base") .WithName("form name") .Build(); var formAnswers = new FormAnswers(); var page = new PageBuilder() .WithPageSlug("page-one") .Build(); // Act await _factory.Build(page, new Dictionary<string, dynamic>(), formSchema, string.Empty, formAnswers); // Assert _tagParser.Verify(_ => _.Parse(It.IsAny<Page>(), It.IsAny<FormAnswers>()), Times.Exactly(2)); }
public void GetAnswerValue_ShouldNotCall_DistributedCache_WhenNoFileWithinAnswers() { // Arrange var key = "fileUploadTestKey"; var formAnswers = new FormAnswers { Pages = new List <PageAnswers> { new PageAnswers { Answers = new List <Answers>() } } }; var element = new ElementBuilder() .WithType(EElementType.FileUpload) .WithQuestionId(key) .Build(); // Act _elementMapper.GetAnswerValue(element, formAnswers); // Assert _wrapper.Verify(_ => _.GetString(It.IsAny <string>()), Times.Never); }
private Address GetAddressElementValue(string key, FormAnswers formAnswers) { var addressObject = new Address(); var uprnKey = $"{key}{AddressConstants.SELECT_SUFFIX}"; var addressDescription = $"{key}{AddressConstants.DESCRIPTION_SUFFIX}"; var manualAddressLineOne = $"{key}-{AddressManualConstants.ADDRESS_LINE_1}"; var manualAddressLineTwo = $"{key}-{AddressManualConstants.ADDRESS_LINE_2}"; var manualAddressLineTown = $"{key}-{AddressManualConstants.TOWN}"; var manualAddressLinePostcode = $"{key}-{AddressManualConstants.POSTCODE}"; var value = formAnswers.Pages.SelectMany(_ => _.Answers) .Where(_ => _.QuestionId.Equals(manualAddressLineOne) || _.QuestionId.Equals(manualAddressLineTwo) || _.QuestionId.Equals(manualAddressLineTown) || _.QuestionId.Equals(manualAddressLinePostcode) || _.QuestionId.Equals(uprnKey) || _.QuestionId.Equals(addressDescription)) .ToList(); addressObject.AddressLine1 = value.FirstOrDefault(_ => _.QuestionId.Equals(manualAddressLineOne))?.Response ?? string.Empty; addressObject.AddressLine2 = value.FirstOrDefault(_ => _.QuestionId.Equals(manualAddressLineTwo))?.Response ?? string.Empty; addressObject.Town = value.FirstOrDefault(_ => _.QuestionId.Equals(manualAddressLineTown))?.Response ?? string.Empty; addressObject.Postcode = value.FirstOrDefault(_ => _.QuestionId.Equals(manualAddressLinePostcode))?.Response ?? string.Empty; addressObject.PlaceRef = value.FirstOrDefault(_ => _.QuestionId.Equals(uprnKey))?.Response ?? string.Empty; addressObject.SelectedAddress = value.FirstOrDefault(_ => _.QuestionId.Equals(addressDescription))?.Response ?? null; return(addressObject.IsEmpty() ? null : addressObject); }
public void Map_ShouldReturnExpandoObject_WhenFormContains_MultipleValidatableElementsWithTargetMapping_WithValues() { // Arrange var elementOneAnswer = "01/01/2000"; var element3 = new ElementBuilder() .WithType(EElementType.DatePicker) .WithQuestionId("test") .WithTargetMapping("customer.datepicker.date") .Build(); var formAnswers = new FormAnswers { Pages = new List <PageAnswers> { new PageAnswers { Answers = new List <Answers> { new Answers { QuestionId = "test", Response = elementOneAnswer } } } } }; var result = _elementMapper.GetAnswerValue(element3, formAnswers); var resultData = Assert.IsType <DateTime>(result); Assert.Equal($"{elementOneAnswer} 00:00:00", resultData.ToString()); }
private async Task AddDynamicOptions(IElement element, FormAnswers convertedAnswers) { LookupSource submitDetails = element.Properties.LookupSources .SingleOrDefault(x => x.EnvironmentName .Equals(_environment.EnvironmentName, StringComparison.OrdinalIgnoreCase)); if (submitDetails is null) { throw new Exception("DynamicLookupPageTransformFactory::AddDynamicOptions, No Environment specific details found"); } RequestEntity request = _actionHelper.GenerateUrl(submitDetails.URL, convertedAnswers); if (string.IsNullOrEmpty(submitDetails.Provider)) { throw new Exception("DynamicLookupPageTransformFactory::AddDynamicOptions, No Provider name given in LookupSources"); } var lookupProvider = _lookupProviders.Get(submitDetails.Provider); List <Option> lookupOptions = await lookupProvider.GetAsync(request.Url, submitDetails.AuthToken); if (!lookupOptions.Any()) { throw new Exception("DynamicLookupPageTransformFactory::AddDynamicOptions, Provider returned no options"); } element.Properties.Options.AddRange(lookupOptions); }
public void GetAnswerValue_ShouldReturnNullWhenResponseIsEmpty_WhenElementIsDatePicker() { // Arrange var element = new ElementBuilder() .WithType(EElementType.DatePicker) .WithQuestionId("testNumber") .Build(); var formAnswers = new FormAnswers { Pages = new List <PageAnswers> { new PageAnswers { Answers = new List <Answers> { new Answers { QuestionId = "testNumber" } } } } }; // Act var result = _elementMapper.GetAnswerValue(element, formAnswers); // Assert Assert.Null(result); }
public void Parse_ShouldReturnUpdatedValue_WhenReplacingSingleValue() { var expectedString = "this value testfirstname should be replaced with name question"; var element = new ElementBuilder() .WithType(EElementType.P) .WithPropertyText("this value {{QUESTION:firstname}} should be replaced with name question") .Build(); var page = new PageBuilder() .WithElement(element) .Build(); var formAnswers = new FormAnswers { Pages = new List <PageAnswers> { new PageAnswers { Answers = new List <Answers> { new Answers { QuestionId = "firstname", Response = "testfirstname" } } } } }; var result = _tagParser.Parse(page, formAnswers); Assert.Equal(expectedString, result.Elements.FirstOrDefault().Properties.Text); }
public void GetAnswerStringValue_ShouldReturnCorrectValue_ForElements(EElementType type, string value) { // Arrange var questionId = "test-questionID"; var formAnswers = new FormAnswers { Pages = new List <PageAnswers> { new PageAnswers { Answers = new List <Answers> { new Answers { QuestionId = questionId, Response = value } } } } }; var element = new ElementBuilder() .WithType(type) .WithQuestionId(questionId) .Build(); // Act var result = _elementMapper.GetAnswerStringValue(element, formAnswers); // Assert Assert.Equal(value, result); }
public void Parse_ShouldCallFormatter_WhenProvided() { var expectedString = "this value should be formatted: FAKE-FORMATTED-VALUE"; var element = new ElementBuilder() .WithType(EElementType.P) .WithPropertyText("this value should be formatted: {{FORMDATA:firstname:testformatter}}") .Build(); var page = new PageBuilder() .WithElement(element) .Build(); var formAnswers = new FormAnswers { AdditionalFormData = new Dictionary <string, object> { { "firstname", "testfirstname" } } }; var result = _tagParser.Parse(page, formAnswers); Assert.Equal(expectedString, result.Elements.FirstOrDefault().Properties.Text); _mockFormatter.Verify(_ => _.Parse(It.IsAny <string>()), Times.Once); }
public void GetAnswerStringValue_ShouldReturnCorrectValue_ForDatePickerElement() { // Arrange var questionId = "test-questionID"; var labelText = "Enter the date"; var value = new DateTime(2000, 01, 01); var formAnswers = new FormAnswers { Pages = new List <PageAnswers> { new PageAnswers { Answers = new List <Answers> { new Answers { QuestionId = questionId, Response = value.ToString() } } } } }; var element = new ElementBuilder() .WithType(EElementType.DatePicker) .WithQuestionId(questionId) .WithLabel(labelText) .Build(); // Act var result = _elementMapper.GetAnswerStringValue(element, formAnswers); // Assert Assert.Equal(value.ToString("dd/MM/yyyy"), result); }
public async Task RenderAsync_ShouldCall_PageHelper_ToGetCurrentValue() { //Arrange var element = new ElementBuilder() .WithType(EElementType.Map) .Build(); var page = new PageBuilder() .WithElement(element) .Build(); var viewModel = new Dictionary <string, dynamic>(); var schema = new FormSchemaBuilder() .WithName("form-name") .Build(); var formAnswers = new FormAnswers(); //Act await element.RenderAsync( _mockIViewRender.Object, _mockElementHelper.Object, string.Empty, viewModel, page, schema, _mockHostingEnv.Object, formAnswers); //Assert _mockIViewRender.Verify(_ => _.RenderAsync(It.Is <string>(x => x.Equals("Map")), It.IsAny <Map>(), It.IsAny <Dictionary <string, object> >()), Times.Once); _mockElementHelper.Verify(_ => _.CurrentValue <object>(It.IsAny <string>(), It.IsAny <Dictionary <string, dynamic> >(), It.IsAny <FormAnswers>(), It.IsAny <string>()), Times.Once); }
public void Validate_ShouldReturn_Valid_IfElement_IsValid_OnSamePageSubmission() { var formAnswers = new FormAnswers { Pages = new List <PageAnswers> { new PageAnswers { Answers = new List <Answers>() } } }; _mockFormAnswersProvider.Setup(_ => _.GetFormAnswers()).Returns(formAnswers); var isDateBeforeValidator = new IsDateBeforeValidator(_mockFormAnswersProvider.Object); var viewModel = new Dictionary <string, dynamic> { { "test-element", "01/01/2019" }, { "test-comparison-element", "01/01/2020" } }; // Act ValidationResult result = isDateBeforeValidator.Validate(datePickerelement, viewModel, SchemaWithDatePickerElement); // Assert Assert.True(result.IsValid); }
public override Task <string> RenderAsync(IViewRender viewRender, IElementHelper elementHelper, string guid, Dictionary <string, dynamic> viewModel, Page page, FormSchema formSchema, IWebHostEnvironment environment, FormAnswers formAnswers, List <object> results = null) { var currentAnswer = elementHelper.CurrentValue <JArray>(Properties.QuestionId, viewModel, formAnswers, FileUploadConstants.SUFFIX); SubmitButtonText = SetSubmitButtonText(page); IsModelStateValid = !viewModel.ContainsKey("modelStateInvalid"); if (currentAnswer != null) { List <FileUploadModel> response = JsonConvert.DeserializeObject <List <FileUploadModel> >(currentAnswer.ToString()); CurrentFilesUploaded = response.Select(_ => _.TrustedOriginalFileName).ToList(); } Properties.HideOptionalText = true; elementHelper.CheckForQuestionId(this); elementHelper.CheckForLabel(this); return(viewRender.RenderAsync(Type.ToString(), this)); }
public async Task RenderAsync_ShouldDisableButton_OnClick_WhenPropertyIsEnabled() { //Arrange var callback = new Button(); _mockIViewRender.Setup(_ => _.RenderAsync(It.IsAny <string>(), It.IsAny <Button>(), It.IsAny <Dictionary <string, dynamic> >())) .Callback <string, Button, Dictionary <string, dynamic> >((a, b, c) => callback = b); var element = new ElementBuilder() .WithType(EElementType.Button) .WithPropertyText("test text") .WithDisableOnClick(true) .Build(); var page = new PageBuilder() .WithElement(element) .Build(); var schema = new FormSchemaBuilder() .WithName("form-name") .Build(); var formAnswers = new FormAnswers(); var viewModel = new Dictionary <string, dynamic>(); //Act await element.RenderAsync(_mockIViewRender.Object, _mockElementHelper.Object, string.Empty, viewModel, page, schema, _mockHostingEnv.Object, formAnswers); //Assert Assert.True(callback.Properties.DisableOnClick); _mockIViewRender.Verify(_ => _.RenderAsync(It.Is <string>(x => x.Equals("Button")), It.IsAny <Button>(), It.IsAny <Dictionary <string, object> >()), Times.Once); }
public void GetDate_WithFormAnswers_ReturnCorrectDate() { var formAnswers = new FormAnswers { Pages = new List <PageAnswers> { new PageAnswers { Answers = new List <Answers> { new Answers { QuestionId = "test-date", Response = "01/01/2020" } } } } }; var result = DatePicker.GetDate(formAnswers, "test-date"); Assert.True(result.HasValue); Assert.True(result.Value == new DateTime(2020, 1, 1)); }
public void GetAnswerStringValue_ShouldGenerateCorrectValue_ForBooking() { // Arrange var questionId = "test-bookingID"; var time = new TimeSpan(4, 30, 0); var date = DateTime.Now; var startTime = DateTime.Today.Add(time); var formAnswers = new FormAnswers { Pages = new List <PageAnswers> { new PageAnswers { Answers = new List <Answers> { new Answers { QuestionId = $"{questionId}-{BookingConstants.RESERVED_BOOKING_DATE}", Response = date.ToString() }, new Answers { QuestionId = $"{questionId}-{BookingConstants.RESERVED_BOOKING_START_TIME}", Response = startTime.ToString() } } } } }; var element = new ElementBuilder() .WithType(EElementType.Booking) .WithQuestionId(questionId) .Build(); // Act var result = _elementMapper.GetAnswerStringValue(element, formAnswers); // Assert Assert.Equal($"{date.ToFullDateFormat()} at 4:30am to 12am", result); }