public void ProcessAddsAttributesToTag_WhenClientIdFound()
        {
            // Arrange
            var clientRequestParametersProvider = new Mock <IClientRequestParametersProvider>();

            clientRequestParametersProvider.Setup(c => c.GetClientParameters(It.IsAny <HttpContext>(), It.IsAny <string>()))
            .Returns(new Dictionary <string, string>()
            {
                ["client_id"]     = "SampleApp",
                ["scope"]         = "SampleAPI openid",
                ["redirect_uri"]  = "https://www.example.com/auth-callback",
                ["response_type"] = "id_token code"
            });

            var tagHelperContext = new TagHelperContext(new TagHelperAttributeList(), new Dictionary <object, object>(), "id");
            var tagHelperOutput  = new TagHelperOutput("meta", new TagHelperAttributeList(), (something, encoder) => Task.FromResult <TagHelperContent>(null));
            var tagHelper        = new ClientParametersTagHelper(clientRequestParametersProvider.Object);

            tagHelper.ViewContext = new ViewContext()
            {
                HttpContext = new DefaultHttpContext()
            };

            // Act
            tagHelper.Process(tagHelperContext, tagHelperOutput);

            // Assert
            Assert.Contains(tagHelperOutput.Attributes, th => th.Name == "data-client_id" && th.Value is string value && value == "SampleApp");
            Assert.Contains(tagHelperOutput.Attributes, th => th.Name == "data-scope" && th.Value is string value && value == "SampleAPI openid");
            Assert.Contains(tagHelperOutput.Attributes, th => th.Name == "data-redirect_uri" && th.Value is string value && value == "https://www.example.com/auth-callback");
            Assert.Contains(tagHelperOutput.Attributes, th => th.Name == "data-response_type" && th.Value is string value && value == "id_token code");
        }
        public void ProcessThrows_WhenClientIdNotFound()
        {
            // Arrange
            var clientRequestParametersProvider = new Mock <IClientRequestParametersProvider>();

            clientRequestParametersProvider.Setup(c => c.GetClientParameters(It.IsAny <HttpContext>(), It.IsAny <string>())).Returns <IDictionary <string, string> >(null);
            var tagHelperContext = new TagHelperContext(new TagHelperAttributeList(), new Dictionary <object, object>(), "id");
            var tagHelperOutput  = new TagHelperOutput("meta", new TagHelperAttributeList(), (something, encoder) => Task.FromResult <TagHelperContent>(null));
            var tagHelper        = new ClientParametersTagHelper(clientRequestParametersProvider.Object);

            tagHelper.ClientId    = "id";
            tagHelper.ViewContext = new ViewContext()
            {
                HttpContext = new DefaultHttpContext()
            };

            // Act & Assert
            var exception = Assert.Throws <InvalidOperationException>(() => tagHelper.Process(tagHelperContext, tagHelperOutput));

            Assert.Equal("Parameters for client 'id' not found.", exception.Message);
        }