public void When_Default_is_called_Then_FirstPageNumber_CurrentPageNumber_and_LastPageNumber_should_be_0()
        {
            // Act.
            var defaultNavigation = PagedEnumerableNavigation.Default();

            // Assert.
            defaultNavigation.FirstPageNumber.Should().Be(0L);
            defaultNavigation.CurrentPageNumber.Should().Be(0L);
            defaultNavigation.LastPageNumber.Should().Be(0L);
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="PagedEnumerableMetadata"/> class
        /// using the given builder.
        /// </summary>
        /// <param name="builder">The builder to use.</param>
        private PagedEnumerableMetadata(PagedEnumerableMetadataBuilder builder)
        {
            if (builder is null)
            {
                throw new System.ArgumentNullException(nameof(builder));
            }

            this.Count      = builder.Count ?? PagedEnumerableCount.Default();
            this.Navigation = builder.Navigation ?? PagedEnumerableNavigation.Default();
        }
        public void When_Default_is_called_Then_Count_and_Navigation_should_equal_respective_Default()
        {
            // Act.
            var defaultMetadata   = PagedEnumerableMetadata.Default();
            var defaultCount      = PagedEnumerableCount.Default();
            var defaultNavigation = PagedEnumerableNavigation.Default();

            // Assert.
            defaultMetadata.Count.Should().BeEquivalentTo(defaultCount);
            defaultMetadata.Navigation.Should().BeEquivalentTo(defaultNavigation);
        }
        public void Given_a_null_builder_When_Create_is_called_Then_an_ArgumentNullException_should_be_thrown()
        {
            // Arrange.
            PagedEnumerableNavigationBuilder builder = null;

            // Act.
            Action testCode = () => PagedEnumerableNavigation.Create(builder);

            // Assert.
            testCode.Should()
            .Throw <ArgumentNullException>()
            .WithMessage("*cannot be null*builder*");
        }
        public void Given_null_input_When_WithNavigation_is_called_Then_an_ArgumentNullException_will_be_thrown()
        {
            // Arrange.
            PagedEnumerableNavigation      input   = null;
            PagedEnumerableMetadataBuilder builder = PagedEnumerableMetadataBuilder.Create();

            // Act.
            Action testCode = () => builder.WithNavigation(input);

            // Assert.
            testCode.Should()
            .Throw <ArgumentNullException>()
            .WithMessage("*cannot be null* navigation*");
        }
        public void Given_no_inputs_When_Create_is_called_Then_instance_will_have_Default_members()
        {
            // Arrange.
            var defaultCount      = PagedEnumerableCount.Default();
            var defaultNavigation = PagedEnumerableNavigation.Default();
            PagedEnumerableMetadata metadata;

            // Act.
            metadata = PagedEnumerableMetadataBuilder.Create()
                       .Build();

            // Assert.
            metadata.Count.Should().BeEquivalentTo(defaultCount);
            metadata.Navigation.Should().BeEquivalentTo(defaultNavigation);
        }
        public void Given_a_builder_with_CurrentPageNumber_greater_than_LastPageNumber_When_Create_is_called_Then_an_ArgumentOutOfRangeException_should_be_thrown()
        {
            // Arrange.
            var builder = PagedEnumerableNavigationBuilder
                          .Create()
                          .WithFirstPageNumber(0)
                          .WithCurrentPageNumber(2)
                          .WithLastPageNumber(1);

            // Act.
            Action testCode = () => PagedEnumerableNavigation.Create(builder);

            // Assert.
            testCode.Should()
            .Throw <ArgumentOutOfRangeException>()
            .WithMessage("*CurrentPageNumber* must be less than *LastPageNumber*");
        }