public void ProcessOnePageTest()
        {
            var mg          = MockHtmlGenerator();
            var viewContext = GetViewContext();
            var Routes      = new Dictionary <string, string>();



            mg.Setup(x => x.GenerateActionLink(viewContext, It.IsAny <string>(), null, null, null, null, null, It.IsAny <Dictionary <string, string> >(), It.IsAny <Object>()))
            .Returns((ViewContext v, string text, string a, string c, string p, string h, string pr, Dictionary <string, string> routes, object attr) => {
                var tag = new TagBuilder("div");
                tag.InnerHtml.Append(text);
                return(tag);
            });

            var options = new CoreGridFSPOptions();

            options.PaginationOptions.Count = 5;

            var p = new PaginationTagHelper(mg.Object);

            p.Options = options;

            p.ViewContext = viewContext;

            var output = GetTagHelperOutput();

            p.Process(GetTagHelperContext(), output);

            Assert.IsNotNull(output);
            var expected = "<ul class=\"pagination flex-wrap\"><li class=\"disabled page-item\"><div aria-label=\"First\" class=\"page-link\"><span aria-hidden=\"true\">|&lt;</span><span class=\"sr-only\">First</span></div></li><li class=\"disabled page-item\"><div aria-label=\"Next\" class=\"page-link\"><span aria-hidden=\"true\">&lt;</span><span class=\"sr-only\">Next</span></div></li><li class=\"active page-item\"><div class=\"page-link\">1</div></li><li class=\"disabled page-item\"><div aria-label=\"Previous\" class=\"page-link\"><span aria-hidden=\"true\">&gt;</span><span class=\"sr-only\">Previous</span></div></li><li class=\"disabled page-item\"><div aria-label=\"Last\" class=\"page-link\"><span aria-hidden=\"true\">&gt;|</span><span class=\"sr-only\">Last</span></div></li><li class=\"page-item\"><button class=\"btn-outline-secondary btn\" type=\"button\">Page Size 10</button><button aria-expanded=\"false\" aria-haspopup=\"true\" class=\"dropdown-toggle-split dropdown-toggle btn-outline-secondary btn\" data-toggle=\"dropdown\" type=\"button\"><span class=\"sr-only\">Toggle Dropdown</span></button><div class=\"dropdown-menu\"><div aria-label=\"All\" class=\"page-link dropdown-item\">All</div><div aria-label=\"5\" class=\"page-link dropdown-item\">5</div><div aria-label=\"10\" class=\"page-link dropdown-item\">10</div><div aria-label=\"20\" class=\"page-link dropdown-item\">20</div><div aria-label=\"50\" class=\"page-link dropdown-item\">50</div><div aria-label=\"100\" class=\"page-link dropdown-item\">100</div></div></li></ul>";

            Assert.AreEqual(expected, output.Content.GetContent());
        }
        public void Process_OnFirstPage_GeneratesExpectedOutput()
        {
            // Arrange
            var pth = new PaginationTagHelper();

            pth.Page       = 1;
            pth.PageSize   = 10;
            pth.TotalItems = 50;
            pth.Url        = "/home/pager";
            var query = QueryHelpers.ParseQuery($"page={pth.Page}&pageSize={pth.PageSize}");

            request.Setup(x => x.Query).Returns(new QueryCollection(query));
            context.Setup(x => x.HttpContext.Request).Returns(request.Object);
            viewContext.HttpContext = context.Object.HttpContext;

            pth.ViewContext = viewContext;

            var tagHelperContext = new TagHelperContext(
                new TagHelperAttributeList(),
                new Dictionary <object, object>(),
                Guid.NewGuid().ToString("N"));

            var tagHelperOutput = new TagHelperOutput("pagination",
                                                      new TagHelperAttributeList(),
                                                      (result, encoder) =>
            {
                var tagHelperContent = new DefaultTagHelperContent();
                tagHelperContent.SetHtmlContent(string.Empty);
                return(Task.FromResult <TagHelperContent>(tagHelperContent));
            });

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

            // Assert
            var expectedHtml =
                $"<ul class=\"pagination\">" +
                $"<li class=\"page-item disabled\" tabindex=\"-1\"><a class=\"page-link\" aria-label=\"{pth.FirstPageAriaLabel}\">{pth.FirstPageLinkText}</a></li>" +
                $"<li class=\"page-item disabled\" tabindex=\"-1\"><a class=\"page-link\" aria-label=\"{pth.PreviousPageAriaLabel}\">{pth.PreviousLinkText}</a></li>" +
                $"<li class=\"page-item disabled\" tabindex=\"-1\"><a class=\"page-link\" aria-label=\"{pth.SkipBackAriaLabel.Replace("{0}", "1")}\">{pth.SkipBackPageLink}</a></li>" +
                $"<li class=\"page-item active\"><a class=\"page-link\" aria-current=\"true\" aria-label=\"{pth.CurrentPageAriaLabel} 1\" href=\"/home/pager?page=1&pageSize={pth.PageSize}\">1</a></li>" +
                $"<li class=\"page-item\"><a class=\"page-link\" aria-label=\"{pth.GotoPageAriaLabel} 2\" href=\"/home/pager?page=2&pageSize={pth.PageSize}\">2</a></li>" +
                $"<li class=\"page-item\"><a class=\"page-link\" aria-label=\"{pth.GotoPageAriaLabel} 3\" href=\"/home/pager?page=3&pageSize={pth.PageSize}\">3</a></li>" +
                $"<li class=\"page-item\"><a class=\"page-link\" aria-label=\"{pth.GotoPageAriaLabel} 4\" href=\"/home/pager?page=4&pageSize={pth.PageSize}\">4</a></li>" +
                $"<li class=\"page-item\"><a class=\"page-link\" aria-label=\"{pth.GotoPageAriaLabel} 5\" href=\"/home/pager?page=5&pageSize={pth.PageSize}\">5</a></li>" +
                $"<li class=\"page-item disabled\" tabindex=\"-1\"><a class=\"page-link\" aria-label=\"{pth.SkipForwardAriaLabel.Replace("{0}", "5")}\">{pth.SkipForwardPageLink}</a></li>" +
                $"<li class=\"page-item\"><a class=\"page-link\" aria-label=\"{pth.NextPageAriaLabel}\" href=\"/home/pager?page=2&pageSize={pth.PageSize}\">{pth.NextLinkText}</a></li>" +
                $"<li class=\"page-item\"><a class=\"page-link\" aria-label=\"{pth.LastPageAriaLabel}\" href=\"/home/pager?page=5&pageSize={pth.PageSize}\">{pth.LastPageLinkText}</a></li>" +
                $"</ul>";

            var actualHtml = tagHelperOutput.Content.GetContent();

            Assert.Equal(expectedHtml, actualHtml);
        }
        public void PaginationTagHelperTest()
        {
            var mg = MockHtmlGenerator();
            var p  = new PaginationTagHelper(mg.Object);

            p.Options = new CoreGridFSPOptions();

            Assert.IsNotNull(p.Options);
            Assert.IsTrue(p.Options.PaginationOptions.AllowAllPageSize);
            Assert.AreEqual(5, p.Options.PaginationOptions.AllowedPageSizes.Length);
            Assert.AreEqual(0, p.Options.PaginationOptions.Count);
            Assert.AreEqual(10, p.Options.PaginationOptions.PageSize);
        }
        public void Process_NoPageResults_GeneratesExpectedOutput()
        {
            // Arrange
            var pth = new PaginationTagHelper();

            pth.Page       = 1;
            pth.PageSize   = 10;
            pth.TotalItems = 0;
            pth.Url        = "/home/pager";
            var query = QueryHelpers.ParseQuery($"page={pth.Page}&pageSize={pth.PageSize}");

            request.Setup(x => x.Query).Returns(new QueryCollection(query));
            context.Setup(x => x.HttpContext.Request).Returns(request.Object);
            viewContext.HttpContext = context.Object.HttpContext;

            pth.ViewContext = viewContext;

            var tagHelperContext = new TagHelperContext(
                new TagHelperAttributeList(),
                new Dictionary <object, object>(),
                Guid.NewGuid().ToString("N"));

            var tagHelperOutput = new TagHelperOutput("pagination",
                                                      new TagHelperAttributeList(),
                                                      (result, encoder) =>
            {
                var tagHelperContent = new DefaultTagHelperContent();
                tagHelperContent.SetHtmlContent(string.Empty);
                return(Task.FromResult <TagHelperContent>(tagHelperContent));
            });

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

            // Assert
            var expectedHtml = "";

            var actualHtml = tagHelperOutput.Content.GetContent();

            Assert.Equal(expectedHtml, actualHtml);
        }
 public static void SetPaginationContext(this TagHelperContext context, PaginationTagHelper tagHelper) {
     if (context.Items.ContainsKey(PaginationContext))
         context.Items[PaginationContext] = tagHelper;
     else
         context.Items.Add(PaginationContext, tagHelper);
 }
        public void Process_AjaxRequest_GeneratesExpectedOutput()
        {
            // Arrange
            var ajaxOptionsTagHelper = new AjaxOptionsTagHelper();

            ajaxOptionsTagHelper.UpdateTargetId = "pagedContent";
            ajaxOptionsTagHelper.OnBegin        = "showAjaxLoader()";
            ajaxOptionsTagHelper.OnComplete     = "hideAjaxLoader()";

            var pth = new PaginationTagHelper();

            pth.Page        = 1;
            pth.PageSize    = 5;
            pth.TotalItems  = 50;
            pth.Url         = "/home/ajaxpager";
            pth.AjaxOptions = ajaxOptionsTagHelper;
            var query = QueryHelpers.ParseQuery($"page={pth.Page}&pageSize={pth.PageSize}");

            request.Setup(x => x.Query).Returns(new QueryCollection(query));
            context.Setup(x => x.HttpContext.Request).Returns(request.Object);
            viewContext.HttpContext = context.Object.HttpContext;

            pth.ViewContext = viewContext;

            var tagHelperContext = new TagHelperContext(
                new TagHelperAttributeList(),
                new Dictionary <object, object>(),
                Guid.NewGuid().ToString("N"));

            var tagHelperOutput = new TagHelperOutput("pagination",
                                                      new TagHelperAttributeList(),
                                                      (result, encoder) =>
            {
                var tagHelperContent = new DefaultTagHelperContent();
                tagHelperContent.SetHtmlContent(string.Empty);
                return(Task.FromResult <TagHelperContent>(tagHelperContent));
            });

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

            // Assert
            var expectedHtml =
                $"<ul class=\"pagination\">" +
                $"<li class=\"page-item disabled\" tabindex=\"-1\"><a class=\"page-link\" aria-label=\"{pth.FirstPageAriaLabel}\">&#171;</a></li>" +
                $"<li class=\"page-item disabled\" tabindex=\"-1\"><a class=\"page-link\" aria-label=\"{pth.PreviousPageAriaLabel}\">&#8249; Previous</a></li>" +
                $"<li class=\"page-item disabled\" tabindex=\"-1\"><a class=\"page-link\" aria-label=\"{pth.SkipBackAriaLabel.Replace("{0}", "1")}\">&#46;&#46;</a></li>" +
                $"<li class=\"page-item active\"><a class=\"page-link\" aria-current=\"true\" aria-label=\"{pth.CurrentPageAriaLabel} 1\" href=\"/home/ajaxpager?page=1&pageSize={pth.PageSize}\" data-ajax=\"true\" data-ajax-method=\"Post\" data-ajax-begin=\"{pth.AjaxOptions.OnBegin}\" data-ajax-complete=\"{pth.AjaxOptions.OnComplete}\" data-ajax-update=\"#{pth.AjaxOptions.UpdateTargetId}\" data-ajax-mode=\"replace\">1</a></li>" +
                $"<li class=\"page-item\"><a class=\"page-link\" aria-label=\"{pth.GotoPageAriaLabel} 2\" href=\"/home/ajaxpager?page=2&pageSize={pth.PageSize}\" data-ajax=\"true\" data-ajax-method=\"Post\" data-ajax-begin=\"{pth.AjaxOptions.OnBegin}\" data-ajax-complete=\"{pth.AjaxOptions.OnComplete}\" data-ajax-update=\"#{pth.AjaxOptions.UpdateTargetId}\" data-ajax-mode=\"replace\">2</a></li>" +
                $"<li class=\"page-item\"><a class=\"page-link\" aria-label=\"{pth.GotoPageAriaLabel} 3\" href=\"/home/ajaxpager?page=3&pageSize={pth.PageSize}\" data-ajax=\"true\" data-ajax-method=\"Post\" data-ajax-begin=\"{pth.AjaxOptions.OnBegin}\" data-ajax-complete=\"{pth.AjaxOptions.OnComplete}\" data-ajax-update=\"#{pth.AjaxOptions.UpdateTargetId}\" data-ajax-mode=\"replace\">3</a></li>" +
                $"<li class=\"page-item\"><a class=\"page-link\" aria-label=\"{pth.GotoPageAriaLabel} 4\" href=\"/home/ajaxpager?page=4&pageSize={pth.PageSize}\" data-ajax=\"true\" data-ajax-method=\"Post\" data-ajax-begin=\"{pth.AjaxOptions.OnBegin}\" data-ajax-complete=\"{pth.AjaxOptions.OnComplete}\" data-ajax-update=\"#{pth.AjaxOptions.UpdateTargetId}\" data-ajax-mode=\"replace\">4</a></li>" +
                $"<li class=\"page-item\"><a class=\"page-link\" aria-label=\"{pth.GotoPageAriaLabel} 5\" href=\"/home/ajaxpager?page=5&pageSize={pth.PageSize}\" data-ajax=\"true\" data-ajax-method=\"Post\" data-ajax-begin=\"{pth.AjaxOptions.OnBegin}\" data-ajax-complete=\"{pth.AjaxOptions.OnComplete}\" data-ajax-update=\"#{pth.AjaxOptions.UpdateTargetId}\" data-ajax-mode=\"replace\">5</a></li>" +
                $"<li class=\"page-item\"><a class=\"page-link\" aria-label=\"{pth.SkipForwardAriaLabel.Replace("{0}", "6")}\" href=\"/home/ajaxpager?page=6&pageSize={pth.PageSize}\" data-ajax=\"true\" data-ajax-method=\"Post\" data-ajax-begin=\"{pth.AjaxOptions.OnBegin}\" data-ajax-complete=\"{pth.AjaxOptions.OnComplete}\" data-ajax-update=\"#{pth.AjaxOptions.UpdateTargetId}\" data-ajax-mode=\"replace\">&#46;&#46;</a></li>" +
                $"<li class=\"page-item\"><a class=\"page-link\" aria-label=\"{pth.NextPageAriaLabel}\" href=\"/home/ajaxpager?page=2&pageSize={pth.PageSize}\" data-ajax=\"true\" data-ajax-method=\"Post\" data-ajax-begin=\"{pth.AjaxOptions.OnBegin}\" data-ajax-complete=\"{pth.AjaxOptions.OnComplete}\" data-ajax-update=\"#{pth.AjaxOptions.UpdateTargetId}\" data-ajax-mode=\"replace\">Next &#8250;</a></li>" +
                $"<li class=\"page-item\"><a class=\"page-link\" aria-label=\"{pth.LastPageAriaLabel}\" href=\"/home/ajaxpager?page=10&pageSize={pth.PageSize}\" data-ajax=\"true\" data-ajax-method=\"Post\" data-ajax-begin=\"{pth.AjaxOptions.OnBegin}\" data-ajax-complete=\"{pth.AjaxOptions.OnComplete}\" data-ajax-update=\"#{pth.AjaxOptions.UpdateTargetId}\" data-ajax-mode=\"replace\">&#187;</a></li>" +
                $"</ul>";

            var actualHtml = tagHelperOutput.Content.GetContent();

            Assert.Equal(expectedHtml, actualHtml);
        }