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);
        }
Пример #2
0
        public async Task ProcessAsync_SetsErrorMessageOnContext()
        {
            // Arrange
            var formGroupContext = new TestFormGroupContext();

            var context = new TagHelperContext(
                tagName: "test-hint",
                allAttributes: new TagHelperAttributeList(),
                items: new Dictionary <object, object>()
            {
                { typeof(FormGroupContext), formGroupContext }
            },
                uniqueId: "test");

            var output = new TagHelperOutput(
                "test-hint",
                attributes: new TagHelperAttributeList(),
                getChildContentAsync: (useCachedResult, encoder) =>
            {
                var tagHelperContent = new DefaultTagHelperContent();
                tagHelperContent.SetContent("Hint");
                return(Task.FromResult <TagHelperContent>(tagHelperContent));
            });

            var tagHelper = new FormGroupHintTagHelper();

            // Act
            await tagHelper.ProcessAsync(context, output);

            // Assert
            Assert.Equal("Hint", formGroupContext.Hint?.Content?.ToString());
        }
        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 GenerateErrorMessage_NoErrorMessageOnContextOrModelStateErrors_ReturnsNull()
        {
            // Arrange
            var tagHelperContext = new TagHelperContext(
                tagName: "test",
                allAttributes: new TagHelperAttributeList(),
                items: new Dictionary <object, object>(),
                uniqueId: "test");

            var formGroupContext = new TestFormGroupContext();

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

            var modelHelper = new Mock <IModelHelper>();

            modelHelper.Setup(mock => mock.GetValidationMessage(viewContext, modelExplorer, modelExpression)).Returns((string)null);

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

            // Act
            var errorMessage = tagHelper.GenerateErrorMessage(tagHelperContext, formGroupContext);

            // Assert
            Assert.Null(errorMessage);
        }
        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 GenerateLabel_LabelContentOnContextAndAspFor_ReturnsContentFromContext()
        {
            // Arrange
            var formGroupContext = new TestFormGroupContext();

            formGroupContext.SetLabel(isPageHeading: false, attributes: null, content: new HtmlString("Context label"));

            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.GetDisplayName(viewContext, modelExplorer, modelExpression)).Returns("ModelMetadata label");

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

            // Act
            var label = tagHelper.GenerateLabel(formGroupContext);

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

            var formGroupContext = new TestFormGroupContext();

            formGroupContext.SetErrorMessage(visuallyHiddenText: "vht", attributes: null, content: new HtmlString("Error message"));

            var modelHelper = new Mock <IModelHelper>();

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

            // Act
            var errorMessage = tagHelper.GenerateErrorMessage(tagHelperContext, formGroupContext);

            // Assert
            Assert.NotNull(errorMessage);
        }
Пример #8
0
        public void SetHint_SetsHintOnContext()
        {
            // Arrange
            var context = new TestFormGroupContext();

            // Act
            context.SetHint(null, new HtmlString("Hint"));

            // Assert
            Assert.Equal("Hint", context.Hint?.Content?.ToString());
        }
Пример #9
0
        public void SetLabel_SetsLabelOnContext()
        {
            // Arrange
            var context = new TestFormGroupContext();

            // Act
            context.SetLabel(isPageHeading: true, null, new HtmlString("Label"));

            // Assert
            Assert.True(context.Label?.IsPageHeading);
            Assert.Equal("Label", context.Label?.Content?.ToString());
        }
Пример #10
0
        public void SetErrorMessage_SetsErrorMessageOnContext()
        {
            // Arrange
            var context = new TestFormGroupContext();

            // Act
            context.SetErrorMessage(visuallyHiddenText: "vht", null, new HtmlString("Error"));

            // Assert
            Assert.Equal("vht", context.ErrorMessage?.VisuallyHiddenText);
            Assert.Equal("Error", context.ErrorMessage?.Content?.ToString());
        }
Пример #11
0
        public void SetLabel_HintMessageAlreadySet_ThrowsInvalidOperationException()
        {
            // Arrange
            var context = new TestFormGroupContext();

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

            // Act
            var ex = Record.Exception(() => context.SetLabel(false, null, new HtmlString("Hint")));

            // Assert
            Assert.IsType <InvalidOperationException>(ex);
            Assert.Equal("<test-label> must be specified before <test-hint>.", ex.Message);
        }
Пример #12
0
        public void SetHint_AlreadySet_ThrowsInvalidOperationException()
        {
            // Arrange
            var context = new TestFormGroupContext();

            context.SetHint(
                attributes: null,
                content: new HtmlString("Existing hint"));

            // Act
            var ex = Record.Exception(() => context.SetHint(null, new HtmlString("Hint")));

            // Assert
            Assert.IsType <InvalidOperationException>(ex);
            Assert.Equal("Only one <test-hint> element is permitted within each <test>.", ex.Message);
        }
Пример #13
0
        public void SetErrorMessage_AlreadySet_ThrowsInvalidOperationException()
        {
            // Arrange
            var context = new TestFormGroupContext();

            context.SetErrorMessage(
                visuallyHiddenText: null,
                attributes: null,
                content: new HtmlString("Existing error"));

            // Act
            var ex = Record.Exception(() => context.SetErrorMessage(null, null, new HtmlString("Error")));

            // Assert
            Assert.IsType <InvalidOperationException>(ex);
            Assert.Equal("Only one <test-error-message> element is permitted within each <test>.", ex.Message);
        }
Пример #14
0
        public void SetHint_ErrorMessageAlreadySet_ThrowsInvalidOperationException()
        {
            // Arrange
            var context = new TestFormGroupContext();

            context.SetErrorMessage(
                visuallyHiddenText: null,
                attributes: null,
                content: new HtmlString("Error message"));

            // Act
            var ex = Record.Exception(() => context.SetHint(null, new HtmlString("Hint")));

            // Assert
            Assert.IsType <InvalidOperationException>(ex);
            Assert.Equal("<test-hint> must be specified before <test-error-message>.", ex.Message);
        }
        public void GenerateLabel_NoLabelContentOnContextOrAspFor_ThrowsInvalidOperationException()
        {
            // Arrange
            var formGroupContext = new TestFormGroupContext();

            var modelHelper = new Mock <IModelHelper>();

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

            // Act
            var ex = Record.Exception(() => tagHelper.GenerateLabel(formGroupContext));

            // Assert
            Assert.IsType <InvalidOperationException>(ex);
            Assert.Equal("Label content must be specified when the 'asp-for' attribute is not specified.", ex.Message);
        }
        public void GenerateLabel_LabelContentOnContext_ReturnsContentFromContext()
        {
            // Arrange
            var formGroupContext = new TestFormGroupContext();

            formGroupContext.SetLabel(isPageHeading: false, attributes: null, content: new HtmlString("Context label"));

            var modelHelper = new Mock <IModelHelper>();

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

            // Act
            var label = tagHelper.GenerateLabel(formGroupContext);

            // Assert
            Assert.NotNull(label);
            Assert.Contains("Context label", label.RenderToString());
        }
        public void GenerateErrorMessage_AddsErrorToFormErrorContext()
        {
            // Arrange
            var formErrorContext = new FormErrorContext();

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

            var formGroupContext = new TestFormGroupContext();

            formGroupContext.SetErrorMessage(visuallyHiddenText: "vht", attributes: null, content: new HtmlString("Error message"));

            var modelHelper = new Mock <IModelHelper>();

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

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

            // Assert
            Assert.Collection(
                formErrorContext.Errors,
                error =>
            {
                Assert.Equal("Error message", error.Content.RenderToString());
            });
        }
        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);
        }
        public void GenerateErrorMessage_ErrorMessageOnContextAndModelStateUsesContextError_ReturnsContent()
        {
            // Arrange
            var tagHelperContext = new TagHelperContext(
                tagName: "test",
                allAttributes: new TagHelperAttributeList(),
                items: new Dictionary <object, object>(),
                uniqueId: "test");

            var formGroupContext = new TestFormGroupContext();

            formGroupContext.SetErrorMessage(visuallyHiddenText: "vht", attributes: null, content: new HtmlString("Context error"));

            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.GetValidationMessage(viewContext, modelExplorer, modelExpression)).Returns("ModelState error");

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

            // Act
            var errorMessage = tagHelper.GenerateErrorMessage(tagHelperContext, formGroupContext);

            // Assert
            Assert.NotNull(errorMessage);
            Assert.Contains("Context error", errorMessage.RenderToString());
        }
        public void GenerateErrorMessage_NoErrorMessageOnContextOrAspFor_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 errorMessage = tagHelper.GenerateErrorMessage(tagHelperContext, formGroupContext);

            // Assert
            Assert.Null(errorMessage);
        }