public void ApplySort_EmptyOrderBy_ReturnsNullException()
        {
            IQueryable <Organization> nullQueryable = Enumerable.Empty <Organization>().AsQueryable();
            var organizationResourceParameters      = new OrganizationResourceParameters {
                OrderBy = ""
            };

            Assert.Equal(nullQueryable,
                         nullQueryable.ApplySort(organizationResourceParameters.OrderBy,
                                                 _propertyMappingService.GetPropertyMapping <OrganizationDto, Organization>()));
        }
        public void ApplySort_NullPropertyMapping_ReturnsNullException()
        {
            IQueryable <Organization> nullQueryable = Enumerable.Empty <Organization>().AsQueryable();
            var organizationResourceParameters      = new OrganizationResourceParameters {
                OrderBy = "Name desc"
            };

            Assert.Throws <ArgumentNullException>(() =>
                                                  nullQueryable.ApplySort(organizationResourceParameters.OrderBy,
                                                                          null));
        }
        public void GetOrganizationsOnly_7OrganizationsInDB_Returns7Organizations()
        {
            //Arrange

            var connectionStringBuilder = new SqliteConnectionStringBuilder {
                DataSource = ":memory:"
            };

            var connection = new SqliteConnection(connectionStringBuilder.ToString());

            var options = new DbContextOptionsBuilder <OrganizationsContext>()
                          .UseLoggerFactory(new LoggerFactory(
                                                new [] { new LogToActionLoggerProvider((log => { _output.WriteLine(log); })) }))
                          .UseSqlite(connection)
                          .Options;

            //This code is for setting InMemory Database
            //var options = new DbContextOptionsBuilder<OrganizationsContext>()
            //    .UseInMemoryDatabase($"OrganizationInMemoryDBForTesting{Guid.NewGuid()}")
            //    .Options;

            var mappingConfig = TestHelpers.SetMapper();

            IMapper mapper = mappingConfig.CreateMapper();


            using (var context = new OrganizationsContext(options))
            {
                context.Database.OpenConnection();
                context.Database.EnsureCreated();

                Helpers.TestHelpers.AddFiveOrganizations(context);
            }

            var organizationResourceParameters = new OrganizationResourceParameters()
            {
                PageSize    = 5,
                CurrentPage = 1
            };

            using (var context = new OrganizationsContext(options))
            {
                //Act
                var organizationRepository = new OrganizationsRepository(context, mapper, new PropertyMappingService());
                var organizations          = organizationRepository.GetOrganizationsOnly();
                //Assert
                Assert.Equal(7, organizations.Count());
            }
        }
Ejemplo n.º 4
0
        public async Task <IActionResult> GetOrganizations(OrganizationResourceParameters organizationResourceParameters, [FromHeader(Name = "Accept")] string mediaType)
        {
            //Adding a comment in dev branch to trigger a CI after making a PR to master branch
            var organizations = await _unitOfWork.Organizations.GetOrganizations(organizationResourceParameters);


            if (!_typeHelperServices.TypeHasProperties <OrganizationDto>(organizationResourceParameters.Fields))
            {
                return(BadRequest());
            }



            //Pagination Metadata
            var previousPageLink = organizations.HasPrevious
                ? CreateOrganizationsResourceUri(organizationResourceParameters, ResourceUriType.PreviousPage)
                : null;
            var nextPageLink = organizations.HasNext
                ? CreateOrganizationsResourceUri(organizationResourceParameters, ResourceUriType.NextPage)
                : null;

            var paginationMetadata = new
            {
                totalCount  = organizations.TotalCount,
                pageSize    = organizations.PageSize,
                currentPage = organizations.CurrentPage,
                totalPages  = organizations.TotalPages,
                previousPageLink,
                nextPageLink
            };

            Response.Headers.Add("X-Pagination", Newtonsoft.Json.JsonConvert.SerializeObject(paginationMetadata));

            var organizationsToReturn = _mapper.Map <IEnumerable <OrganizationDto> >(organizations);


            organizationsToReturn = organizationsToReturn.Select(o =>
            {
                o = CreateLinksForOrganization(o);
                return(o);
            });

            var organizationsToReturnWithoutChildren = _mapper.Map <IEnumerable <OrganizationWithoutChildrenDto> >(organizationsToReturn);

            return(Ok(organizationsToReturnWithoutChildren.ShapeData(organizationResourceParameters.Fields)));
        }
        public void GetOrganizations_PageSizeIsThreeAndCurrentPageIsTwo_ReturnThreeOrganizations()
        {
            //Arrange

            var connectionStringBuilder = new SqliteConnectionStringBuilder {
                DataSource = ":memory:"
            };
            var connection = new SqliteConnection(connectionStringBuilder.ToString());
            var options    = new DbContextOptionsBuilder <OrganizationsContext>().UseSqlite(connection).Options;

            //var options = new DbContextOptionsBuilder<OrganizationsContext>()
            //    .UseInMemoryDatabase($"OrganizationInMemoryDBForTesting{Guid.NewGuid()}")
            //    .Options;

            var mappingConfig = TestHelpers.SetMapper();

            IMapper mapper = mappingConfig.CreateMapper();


            using (var context = new OrganizationsContext(options))
            {
                context.Database.OpenConnection();
                context.Database.EnsureCreated();

                Helpers.TestHelpers.AddFiveOrganizations(context);
            }

            var organizationResourceParameters = new OrganizationResourceParameters()
            {
                PageSize    = 3,
                CurrentPage = 1
            };

            using (var context = new OrganizationsContext(options))
            {
                var organizationRepository = new OrganizationsRepository(context, mapper, new PropertyMappingService());
                var organizations          = organizationRepository.GetOrganizations(organizationResourceParameters).Result;


                //Assert
                Assert.Equal(3, organizations.TotalPages);
                Assert.Equal(7, organizations.TotalCount);
            }
        }
        public async Task <PageList <Organization> > GetOrganizations(OrganizationResourceParameters organizationResourceParameters)
        {
            var organizationBeforePaging =
                _context.Organizations.ApplySort(organizationResourceParameters.OrderBy, _propertyMappingService.GetPropertyMapping <OrganizationDto, Organization>());

            if (!string.IsNullOrEmpty(organizationResourceParameters.Name))
            {
                var descriptionForWhereClause = organizationResourceParameters.Name.Trim().ToLowerInvariant();
                organizationBeforePaging =
                    organizationBeforePaging.Where(o => o.Name.ToLowerInvariant().Contains(descriptionForWhereClause));
            }

            var organizations = await PageList <Organization>
                                .Create(organizationBeforePaging
                                        , organizationResourceParameters.CurrentPage
                                        , organizationResourceParameters.PageSize
                                        );

            return(organizations);
        }
        public void ApplySort_3Organizations_ReturnInExpectedOrder()
        {
            //Arrange

            var connectionStringBuilder = new SqliteConnectionStringBuilder {
                DataSource = ":memory:"
            };

            var connection = new SqliteConnection(connectionStringBuilder.ToString());

            var options = new DbContextOptionsBuilder <OrganizationsContext>()
                          .UseLoggerFactory(new LoggerFactory(
                                                new[] { new LogToActionLoggerProvider((log => { _output.WriteLine(log); })) }))
                          .UseSqlite(connection)
                          .Options;
            var mappingConfig = TestHelpers.SetMapper();

            IMapper mapper = mappingConfig.CreateMapper();


            using (var context = new OrganizationsContext(options))
            {
                context.Database.OpenConnection();
                context.Database.EnsureCreated();
                Helpers.TestHelpers.AddFiveOrganizations(context);

                var organizationResourceParameters = new OrganizationResourceParameters {
                    OrderBy = "Name desc"
                };
                Assert.Equal("Organization1", context.Organizations.First().Name);

                var orderedOrganizations = context.Organizations.ApplySort(organizationResourceParameters.OrderBy,
                                                                           _propertyMappingService.GetPropertyMapping <OrganizationDto, Organization>());

                //Assert
                Assert.Equal("Organization2", orderedOrganizations.First().Name);
                Assert.Equal("Org1", orderedOrganizations.Last().Name);
            }
        }
Ejemplo n.º 8
0
        private string CreateOrganizationsResourceUri(OrganizationResourceParameters organizationResourceParameters,
                                                      ResourceUriType type)
        {
            switch (type)
            {
            case ResourceUriType.NextPage:
                return(_urlHelper.Link("GetOrganizations", new
                {
                    fields = organizationResourceParameters.Fields,
                    orderBy = organizationResourceParameters.OrderBy,
                    name = organizationResourceParameters.Name,
                    currentPage = organizationResourceParameters.CurrentPage + 1,
                    pageSize = organizationResourceParameters.PageSize
                }));

            case ResourceUriType.PreviousPage:
                return(_urlHelper.Link("GetOrganizations", new
                {
                    fields = organizationResourceParameters.Fields,
                    orderBy = organizationResourceParameters.OrderBy,
                    name = organizationResourceParameters.Name,
                    currentPage = organizationResourceParameters.CurrentPage - 1,
                    pageSize = organizationResourceParameters.PageSize
                }));

            default:
                return(_urlHelper.Link("GetOrganizations", new
                {
                    fields = organizationResourceParameters.Fields,
                    orderBy = organizationResourceParameters.OrderBy,
                    name = organizationResourceParameters.Name,
                    currentPage = organizationResourceParameters.CurrentPage,
                    pageSize = organizationResourceParameters.PageSize
                }));
            }
        }