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()); } }
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); } }
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 })); } }