public async Task Transform_ShouldThrowException_If_SubstituteNotFound()
        {
            // Arrange
            _transformDataProvider
            .Setup(_ => _.Get(It.IsAny <string>()))
            .ReturnsAsync((IElement)null);

            ReusableElementSchemaTransformFactory = new ReusableElementSchemaTransformFactory(_transformDataProvider.Object);
            var element = (Reusable) new ElementBuilder()
                          .WithType(EElementType.Reusable)
                          .WithQuestionId("ReusableTest")
                          .Build();

            element.ElementRef = "test";

            // Act
            var result = await Assert.ThrowsAsync <Exception>(() => ReusableElementSchemaTransformFactory.Transform(new FormSchema()
            {
                Pages = new List <Page> {
                    new Page
                    {
                        Elements = new List <IElement>
                        {
                            element
                        }
                    }
                }
            }));

            // Assert
            Assert.Equal("ReusableElementSchemaTransformFactory::CreateSubstituteRecord, No substitute element could be created for question ReusableTest", result.Message);
        }
        public async Task Transform_ShouldCall_TransformDataProvider_And_ShouldUpdate_CustomValidationMessage_WhenSupplied()
        {
            // Arrange
            var validationMessage = "custom validation message";

            _transformDataProvider
            .Setup(_ => _.Get(It.IsAny <string>()))
            .ReturnsAsync(new Textbox
            {
                Properties = new BaseProperty
                {
                    QuestionId = "ReusableTest"
                }
            });

            ReusableElementSchemaTransformFactory = new ReusableElementSchemaTransformFactory(_transformDataProvider.Object);

            var element = (Reusable) new ElementBuilder()
                          .WithType(EElementType.Reusable)
                          .WithQuestionId("ReusableTest")
                          .WithCustomValidationMessage(validationMessage)
                          .Build();

            element.ElementRef = "test";

            // Act
            var result = await ReusableElementSchemaTransformFactory.Transform(new FormSchema()
            {
                Pages = new List <Page> {
                    new Page()
                    {
                        Elements = new List <IElement>
                        {
                            element
                        }
                    }
                }
            });

            // Assert
            Assert.IsType <FormSchema>(result);
            Assert.Equal(validationMessage, result.Pages.FirstOrDefault().Elements.FirstOrDefault().Properties.CustomValidationMessage);
        }
        public async Task Transform_ShouldCall_TransformDataProvider_And_ShouldUpdate_TargetMapping_And_Optional_Properties()
        {
            // Arrange
            _transformDataProvider
            .Setup(_ => _.Get(It.IsAny <string>()))
            .ReturnsAsync(new Textbox
            {
                Properties = new BaseProperty
                {
                    QuestionId = "ReusableTest"
                }
            });

            ReusableElementSchemaTransformFactory = new ReusableElementSchemaTransformFactory(_transformDataProvider.Object);

            var element = (Reusable) new ElementBuilder()
                          .WithType(EElementType.Reusable)
                          .WithQuestionId("ReusableTest")
                          .WithOptional(true)
                          .WithTargetMapping("target.mapping")
                          .Build();

            element.ElementRef = "test";

            // Act
            var result = await ReusableElementSchemaTransformFactory.Transform(new FormSchema()
            {
                Pages = new List <Page> {
                    new Page()
                    {
                        Elements = new List <IElement>
                        {
                            element
                        }
                    }
                }
            });

            // Assert
            Assert.IsType <FormSchema>(result);
            Assert.Equal("target.mapping", result.Pages.FirstOrDefault().Elements.FirstOrDefault().Properties.TargetMapping);
            Assert.True(result.Pages.FirstOrDefault().Elements.FirstOrDefault().Properties.Optional);
        }
        public async Task Transform_ShouldCall_TransformDataProvider_And_Element_ShouldBe_Replaced()
        {
            // Arrange
            _transformDataProvider
            .Setup(_ => _.Get(It.IsAny <string>()))
            .ReturnsAsync(new Textbox
            {
                Properties = new BaseProperty
                {
                    QuestionId = "ReusableTest"
                }
            });

            ReusableElementSchemaTransformFactory = new ReusableElementSchemaTransformFactory(_transformDataProvider.Object);

            var element = (Reusable) new ElementBuilder()
                          .WithType(EElementType.Reusable)
                          .WithQuestionId("ReusableTest")
                          .Build();

            element.ElementRef = "test";

            // Act
            var result = await ReusableElementSchemaTransformFactory.Transform(new FormSchema()
            {
                Pages = new List <Page> {
                    new Page
                    {
                        Elements = new List <IElement>
                        {
                            element
                        }
                    }
                }
            });

            // Assert
            Assert.IsType <FormSchema>(result);
            Assert.True(result.Pages.FirstOrDefault().Elements.FirstOrDefault().Type == EElementType.Textbox);
            _transformDataProvider.Verify(_ => _.Get(It.Is <string>(x => x.Equals("test"))), Times.Once);
        }
 public ReusableElementSchemaTransformFactoryTests()
 {
     ReusableElementSchemaTransformFactory = new ReusableElementSchemaTransformFactory(_transformDataProvider.Object);
 }