public void GenerateHint_NonEmptyHint_AddsHintIdToDescribedBy()
        {
            // Arrange
            var tagHelperContext = new TagHelperContext(
                tagName: "test",
                allAttributes: new TagHelperAttributeList(),
                items: new Dictionary <object, object>(),
                uniqueId: "test");

            var formGroupContext = new TestFormGroupContext();

            formGroupContext.SetHint(attributes: null, content: new HtmlString("Hint"));

            var modelHelper = new Mock <IModelHelper>();

            var tagHelper = new TestFormGroupTagHelper(new ComponentGenerator(), modelHelper.Object)
            {
                Id = "test"
            };

            // Act
            var hint = tagHelper.GenerateHint(tagHelperContext, formGroupContext);

            // Assert
            var element = hint.RenderToElement();

            Assert.Equal("test-hint", element.GetAttribute("id"));
            Assert.Contains("test-hint", tagHelper.DescribedBy?.Split(' ') ?? Array.Empty <string>());
        }
        public void GenerateHint_NonEmptyModelMetadataDescription_ReturnsContent()
        {
            // Arrange
            var formGroupContext = new TestFormGroupContext();

            var tagHelperContext = new TagHelperContext(
                tagName: "test",
                allAttributes: new TagHelperAttributeList(),
                items: new Dictionary <object, object>(),
                uniqueId: "test");

            var modelExplorer = new EmptyModelMetadataProvider().GetModelExplorerForType(typeof(Model), new Model())
                                .GetExplorerForProperty(nameof(Model.SimpleProperty));
            var viewContext     = new ViewContext();
            var modelExpression = nameof(Model.SimpleProperty);

            var modelHelper = new Mock <IModelHelper>();

            modelHelper.Setup(mock => mock.GetDescription(modelExplorer)).Returns("ModelState hint");

            var tagHelper = new TestFormGroupTagHelper(new ComponentGenerator(), modelHelper.Object)
            {
                AspFor      = new ModelExpression(modelExpression, modelExplorer),
                Id          = "test",
                ViewContext = viewContext
            };

            // Act
            var hint = tagHelper.GenerateHint(tagHelperContext, formGroupContext);

            // Assert
            Assert.NotNull(hint);
        }
        public void GenerateHint_HintOnContext_ReturnsContent()
        {
            // Arrange
            var tagHelperContext = new TagHelperContext(
                tagName: "test",
                allAttributes: new TagHelperAttributeList(),
                items: new Dictionary <object, object>(),
                uniqueId: "test");

            var formGroupContext = new TestFormGroupContext();

            formGroupContext.SetHint(attributes: null, content: new HtmlString("Hint"));

            var modelHelper = new Mock <IModelHelper>();

            var tagHelper = new TestFormGroupTagHelper(new ComponentGenerator(), modelHelper.Object)
            {
                Id = "test"
            };

            // Act
            var hint = tagHelper.GenerateHint(tagHelperContext, formGroupContext);

            // Assert
            Assert.NotNull(hint);
        }
        public void GenerateHint_EmptyHint_DoesNotAddHintIdToDescribedBy()
        {
            // Arrange
            var tagHelperContext = new TagHelperContext(
                tagName: "test",
                allAttributes: new TagHelperAttributeList(),
                items: new Dictionary <object, object>(),
                uniqueId: "test");

            var formGroupContext = new TestFormGroupContext();

            var modelHelper = new Mock <IModelHelper>();

            var tagHelper = new TestFormGroupTagHelper(new ComponentGenerator(), modelHelper.Object)
            {
                Id = "test"
            };

            // Act
            tagHelper.GenerateHint(tagHelperContext, formGroupContext);

            // Assert
            Assert.DoesNotContain("test-hint", tagHelper.DescribedBy?.Split(' ') ?? Array.Empty <string>());
        }
        public void GenerateHint_NoHintOnContextOrModelMetadataDescription_ReturnsNull()
        {
            // Arrange
            var tagHelperContext = new TagHelperContext(
                tagName: "test",
                allAttributes: new TagHelperAttributeList(),
                items: new Dictionary <object, object>(),
                uniqueId: "test");

            var formGroupContext = new TestFormGroupContext();

            var modelHelper = new Mock <IModelHelper>();

            var tagHelper = new TestFormGroupTagHelper(new ComponentGenerator(), modelHelper.Object)
            {
                Id = "test"
            };

            // Act
            var hint = tagHelper.GenerateHint(tagHelperContext, formGroupContext);

            // Assert
            Assert.Null(hint);
        }