public void PageOptions_Construct_Defaults()
        {
            // instancia passando apenas total de itens
            PageOptions options = new PageOptions(100);

            // Verifica padrões de pagina atual 1 e itens por pagina 10
            Assert.AreEqual(options.pageNumber, 1);
            Assert.AreEqual(options.pageSize, 10);
        }
        public void PageOptions_Construct_InvalidItemCount()
        {
            // Total -100 itens, pagina atual 1, itens por pagina 5
            PageOptions options = new PageOptions(-100, 1, 5);

            // Verifica se total de páginas dá 0
            Assert.AreEqual(options.pageCount, 0);
            // Verifica se total de itens dá 0
            Assert.AreEqual(options.itemCount, 0);
        }
        public void PageOptions_Construct_InvalidPageSize()
        {
            // Total 100 itens, pagina atual 1, itens por pagina 0
            PageOptions options1 = new PageOptions(100, 1, 0);
            // Total 100 itens, pagina atual 1, itens por pagina -5
            PageOptions options2 = new PageOptions(100, 1, -5);

            // Verifica se total de itens na pagina da 10 (default)
            Assert.AreEqual(options1.pageSize, 10);
            // Verifica se total de itens na pagina da 10 (default)
            Assert.AreEqual(options2.pageSize, 10);
        }
        public void PageOptions_Construct_InvalidPageNumber()
        {
            // Total 100 itens, pagina atual 0, itens por pagina 5
            PageOptions options1 = new PageOptions(100, 0, 5);
            // Total 100 itens, pagina atual -5, itens por pagina 5
            PageOptions options2 = new PageOptions(100, -5, 5);

            // Verifica se numero da página é 1
            Assert.AreEqual(options1.pageNumber, 1);
            // Verifica se numero da página é 1
            Assert.AreEqual(options2.pageNumber, 1);
        }
        /// <summary>
        /// Construtor da lista paginada, responsável por montar toda lista e entregar objeto pronto para o uso.
        /// </summary>
        /// <param name="OriginUrl">URL completa de Origem</param>
        /// <param name="ItemCount">Total de Itens em todas as Páginas</param>
        /// <param name="PageNumber">Página Corrente</param>
        /// <param name="PageSize">Tamanho máximo de itens por página</param>
        /// <param name="NavigatorSize">Tamanho máximo para exibição da navegação numérica, se não informado, não gera essa navegação</param>
        public PagedList(
            string OriginUrl, 
            long ItemCount, 
            int PageNumber = PageOptions.PAGE_NUMBER_DEFAULT,
            int PageSize = PageOptions.PAGE_SIZE_DEFAULT,
            int? NavigatorSize = null
        )
        {
            // Inicializa opções de página
            options = new PageOptions(ItemCount, PageNumber, PageSize);

            // Recupera URL Base para paginar
            OriginUrl = GetUrlBaseToPaging(OriginUrl, PageSize);

            // Inicializa Navegador de URL
            navigator = new UrlNavigator(OriginUrl, options.pageNumber, options.pageCount, NavigatorSize);
        }
        public void PageOptions_Construct_PageNumberOver()
        {
            // Total 100 itens, pagina atual 25, itens por pagina 5, deve dar 20 paginas
            PageOptions options = new PageOptions(100, 25, 5);

            // Verifica se numero da página é igual ao total de páginas
            Assert.AreEqual(options.pageNumber, options.pageCount);
            // Verifica se numero do total de páginas é 20
            Assert.AreEqual(20, options.pageCount);
        }
        public void PageOptions_Construct_PageCount()
        {
            // Total 100 itens, pagina atual 1, itens por pagina 5
            PageOptions options = new PageOptions(100,1,5);

            // Verifica se total de páginas dá 20
            Assert.AreEqual(options.pageCount, 20);
        }