예제 #1
0
        public async Task ShouldReturnPagination_WithOrderDescendingBy(string orderBy)
        {
            // Arrange & Act
            var filter = new CityPaginationFilterDto
            {
                OrderBy        = orderBy,
                OrderDirection = Shared.Enums.OrderDirection.Descending
            };
            var result = await ArrangeAndAct(filter);

            // Assert
            switch (orderBy)
            {
            case nameof(CityDto.Name):
                result.Items.Should().BeInDescendingOrder(c => c.Name);
                break;

            case nameof(CityDto.Population):
                result.Items.Should().BeInDescendingOrder(c => c.Population);
                break;

            case nameof(CityDto.Established):
                result.Items.Should().BeInDescendingOrder(c => c.Established);
                break;
            }
        }
예제 #2
0
        public async Task <IActionResult> GetPaginatedAsync([FromQuery] CityPaginationFilterDto filterDto)
        {
            var request = new GetPaginatedRequest {
                Filter = filterDto
            };
            var response = await _mediator.Send(request);

            return(Ok(response));
        }
예제 #3
0
        private async Task <PaginatedDto <CityDto> > ArrangeAndAct(CityPaginationFilterDto filter = null)
        {
            // Arrange
            var query = new GetPaginatedRequest {
                Filter = filter
            };

            // Act
            var result = await SendAsync(query);

            return(result);
        }
예제 #4
0
        public async Task ShouldReturnPagination_WithFilterName(string namePart)
        {
            // Arrange & Act
            var filter = new CityPaginationFilterDto {
                Name = namePart
            };
            var result = await ArrangeAndAct(filter);

            // Assert
            result.Items.ForEach(c =>
            {
                c.Name.ToLowerInvariant().Should().Contain(namePart.ToLowerInvariant());
            });
        }
예제 #5
0
        public async Task ShouldReturnLastPagePagination_WithPageIndexBeingThree()
        {
            // Arrange & Act
            const int pageIndex = 3;
            var       filter    = new CityPaginationFilterDto
            {
                PageIndex = pageIndex
            };

            var result = await ArrangeAndAct(filter);

            // Assert
            result.PageIndex.Should().Be(result.TotalPages, "If the request's page index is greater than total pages, resulting index is a last page");
            result.PageIndex.Should().NotBe(pageIndex, $"{pageIndex} is greater than total pages.");
            result.TotalPages.Should().BeLessThan(pageIndex);
        }
예제 #6
0
        public async Task ShouldReturnPagination_WithFilterPopulation(int populationFrom, int populationTo)
        {
            // Arrange & Act
            var filter = new CityPaginationFilterDto
            {
                PopulationFrom = populationFrom,
                PopulationTo   = populationTo
            };
            var result = await ArrangeAndAct(filter);

            // Assert
            result.Items.ForEach(c =>
            {
                c.Population.Should().BeGreaterOrEqualTo(populationFrom);
                c.Population.Should().BeLessThan(populationTo);
            });
        }
예제 #7
0
        public async Task ShouldReturnPagination_WithFilterEstablished(int dateFrom, int dateTo)
        {
            // Arrange & Act
            var after  = new DateTime(dateFrom, 1, 1);
            var before = new DateTime(dateTo, 1, 1);
            var filter = new CityPaginationFilterDto
            {
                DateFrom = new DateTime(dateFrom, 1, 1),
                DateTo   = new DateTime(dateTo, 1, 1)
            };
            var result = await ArrangeAndAct(filter);

            // Assert
            result.Items.ForEach(c =>
            {
                c.Established.Should().BeOnOrAfter(after);
                c.Established.Should().BeOnOrBefore(before);
            });
        }