public void Process_ShouldThrow_WhenOutputTagIsNull()
        {
            // Arrange
            var scriptTagHelper = new RecaptchaScriptTagHelper(_settingsMock.Object);

            // Act


            // Assert
            Assert.Throws <ArgumentNullException>(() => scriptTagHelper.Process(_context, null));
        }
        public void Process_ShouldChangeTagTo_ScriptTag()
        {
            // Arrange
            var scriptTagHelper = new RecaptchaScriptTagHelper(_settingsMock.Object);

            // Act
            scriptTagHelper.Process(_context, _tagHelperOutput);

            // Assert
            Assert.AreEqual("script", _tagHelperOutput.TagName);
        }
        public void Process_ShouldAdd_DeferAttribute()
        {
            // Arrange
            var scriptTagHelper = new RecaptchaScriptTagHelper(_settingsMock.Object);

            // Act
            scriptTagHelper.Process(_context, _tagHelperOutput);

            // Assert
            Assert.IsTrue(_tagHelperOutput.Attributes.ContainsName("defer"));
        }
        public void Construction_IsSuccessful()
        {
            // Arrange


            // Act
            var instance = new RecaptchaScriptTagHelper(_settingsMock.Object);

            // Assert
            Assert.NotNull(instance);
            _settingsMock.Verify(settings => settings.CurrentValue, Times.Once);
        }
        public void Process_ShouldAdd_SrcAttribute()
        {
            // Arrange
            var scriptTagHelper = new RecaptchaScriptTagHelper(_settingsMock.Object);

            // Act
            scriptTagHelper.Process(_context, _tagHelperOutput);

            // Assert
            Assert.IsTrue(_tagHelperOutput.Attributes.ContainsName("src"));
            Assert.AreEqual(RecaptchaScriptTagHelper.RecaptchaScriptEndpoint, _tagHelperOutput.Attributes["src"].Value);
        }
        public void Process_ShouldNotContain_Content()
        {
            // Arrange
            var scriptTagHelper = new RecaptchaScriptTagHelper(_settingsMock.Object);

            _tagHelperOutput.Content.SetContent("<p>Inner HTML<p>");

            // Act
            scriptTagHelper.Process(_context, _tagHelperOutput);

            // Assert
            Assert.IsTrue(_tagHelperOutput.Content.IsEmptyOrWhiteSpace);
        }
        public void Process_ShouldChange_TagModeTo_StartTagAndEndTag()
        {
            // Arrange
            var scriptTagHelper = new RecaptchaScriptTagHelper(_settingsMock.Object);

            _tagHelperOutput.TagMode = TagMode.SelfClosing;

            // Act
            scriptTagHelper.Process(_context, _tagHelperOutput);

            // Assert
            Assert.AreEqual(TagMode.StartTagAndEndTag, _tagHelperOutput.TagMode);
        }
        public void Process_ByDefault_ContainsThreeAttributes()
        {
            // Arrange
            var scriptTagHelper = new RecaptchaScriptTagHelper(_settingsMock.Object);

            // Act
            scriptTagHelper.Process(_context, _tagHelperOutput);

            // Assert
            Assert.AreEqual(3, _tagHelperOutput.Attributes.Count);
            Assert.IsTrue(_tagHelperOutput.Attributes.ContainsName("src"));
            Assert.IsTrue(_tagHelperOutput.Attributes.ContainsName("async"));
            Assert.IsTrue(_tagHelperOutput.Attributes.ContainsName("defer"));
        }
        public void Process_ShouldAddExplicit_ToQueryRenderKey()
        {
            // Arrange
            var scriptTagHelper = new RecaptchaScriptTagHelper(_settingsMock.Object)
            {
                Render = Render.Explicit
            };

            // Act
            scriptTagHelper.Process(_context, _tagHelperOutput);
            var query = QueryHelpers.ParseQuery(new Uri(_tagHelperOutput.Attributes["src"].Value.ToString()).Query);

            // Assert
            Assert.AreEqual("explicit", query["render"]);
        }
        public void Process_ShouldNotAdd_HlToQuery_WhenRenderIsV3()
        {
            // Arrange
            var scriptTagHelper = new RecaptchaScriptTagHelper(_settingsMock.Object)
            {
                Render   = Render.V3,
                Language = "fi"
            };

            // Act
            scriptTagHelper.Process(_context, _tagHelperOutput);
            var query = QueryHelpers.ParseQuery(new Uri(_tagHelperOutput.Attributes["src"].Value.ToString()).Query);

            // Assert
            Assert.IsFalse(query.ContainsKey("hl"));
        }
        public void Process_ShouldAdd_RenderSiteKeyToQuery_WhenRenderIsV3AndExplicit()
        {
            // Arrange
            var scriptTagHelper = new RecaptchaScriptTagHelper(_settingsMock.Object)
            {
                Render = Render.V3 | Render.Explicit
            };

            // Act
            scriptTagHelper.Process(_context, _tagHelperOutput);
            var query = QueryHelpers.ParseQuery(new Uri(_tagHelperOutput.Attributes["src"].Value.ToString()).Query);

            // Assert
            _settingsMock.Verify();
            Assert.IsTrue(query.ContainsKey("render"));
            Assert.AreEqual(SiteKey, query["render"]);
        }
        public void Process_ShouldNotAdd_CallbackToQuery_WhenRenderIsV3()
        {
            // Arrange
            var callback        = "myCallback";
            var scriptTagHelper = new RecaptchaScriptTagHelper(_settingsMock.Object)
            {
                OnloadCallback = callback,
                Render         = Render.V3
            };

            // Act
            scriptTagHelper.Process(_context, _tagHelperOutput);
            var query = QueryHelpers.ParseQuery(new Uri(_tagHelperOutput.Attributes["src"].Value.ToString()).Query);

            // Assert
            Assert.IsFalse(query.ContainsKey("onload"));
        }
        public void Process_ShouldAdd_CallbackToQuery()
        {
            // Arrange
            var callback        = "myCallback";
            var scriptTagHelper = new RecaptchaScriptTagHelper(_settingsMock.Object)
            {
                OnloadCallback = callback
            };

            // Act
            scriptTagHelper.Process(_context, _tagHelperOutput);
            var query = QueryHelpers.ParseQuery(new Uri(_tagHelperOutput.Attributes["src"].Value.ToString()).Query);

            // Assert
            Assert.IsTrue(query.ContainsKey("onload"));
            Assert.AreEqual(callback, query["onload"]);
        }
        public void Process_ShouldAdd_HlToQuery()
        {
            // Arrange
            var language = "fi";

            var scriptTagHelper = new RecaptchaScriptTagHelper(_settingsMock.Object)
            {
                Language = language
            };

            // Act
            scriptTagHelper.Process(_context, _tagHelperOutput);
            var query = QueryHelpers.ParseQuery(new Uri(_tagHelperOutput.Attributes["src"].Value.ToString()).Query);

            // Assert
            Assert.IsTrue(query.ContainsKey("hl"));
            Assert.AreEqual(language, query["hl"]);
        }
        private TagHelperOutput ProcessTagHelper(RecaptchaService service, IHttpContextAccessor httpContextAccessor, TagHelperAttributeList attributes, Action <RecaptchaScriptTagHelper> config = null)
        {
            var tagHelper = new RecaptchaScriptTagHelper(service, httpContextAccessor);

            config?.Invoke(tagHelper);

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

            var output = new TagHelperOutput(
                tagName: "doesntmatter",
                attributes: attributes,
                getChildContentAsync: (useCachedResult, encoder) =>
            {
                return(Task.FromResult <TagHelperContent>(new DefaultTagHelperContent()));
            });

            tagHelper.Process(tagHelperContext, output);

            return(output);
        }