public IActionResult GetSpotsInCity(SpotResourceParameters spotResourceParameters) { try { _logger.LogTrace($"Getting list of spotfs for city id : {spotResourceParameters.cityId} with search parameter {spotResourceParameters.SearchQuery} and type = {spotResourceParameters.Type}"); var spotsFromRepo = _cityInfoRepository.GetSpotsForCity(spotResourceParameters); if (!spotsFromRepo.Any()) { _logger.LogInformation($"City Id {spotResourceParameters.cityId} is not exist"); return(NotFound()); } var spots = Mapper.Map <IEnumerable <SpotDto> >(spotsFromRepo); spots = spots.Select(spot => { spot = CreateLinksForSpot(spot); return(spot); }); var wrapper = new LinkedCollectionResourceWrapperDto <SpotDto>(spots); return(Ok(CreateLinksForSpots(wrapper))); } catch (Exception e) { _logger.LogError($"Error on getting sports for city : {spotResourceParameters.cityId}"); _logger.LogError(e.ToString()); throw; } }
public async Task GetSpots_HaveTwoSpots_ReturnOkEmptyList() { //Arrange Mapper.Initialize(cfg => { cfg.CreateMap <City, CityDto>(); cfg.CreateMap <Spot, SpotDto>() .ForMember(dest => dest.Type, opt => opt.MapFrom(src => src.Type.Name)); }); var cityInfoRepoMock = new Mock <ICityInfoRepository>(); var loggerMock = new Mock <ILogger <SpotController> >(); var urlHelperMock = new Mock <IUrlHelper>(); var param = new SpotResourceParameters() { cityId = 1, SearchQuery = "", Type = "" }; cityInfoRepoMock.Setup(c => c.GetSpotsForCity(param)).Returns(() => new List <Spot>() { new Spot() { Id = 1, CityId = 1, Name = "Test Spot 1", Description = "Desc 1" }, new Spot() { Id = 2, CityId = 1, Name = "Test Spot 2", Description = "Desc 2" } }); var controller = new SpotController(cityInfoRepoMock.Object, loggerMock.Object, urlHelperMock.Object); //Act var result = controller.GetSpotsInCity(param); //Assert var okResult = result.Should().BeOfType <OkObjectResult>(); var spots = okResult.Subject.Value.Should().BeAssignableTo <LinkedCollectionResourceWrapperDto <SpotDto> >().Subject; spots.Value.Count().Should().Be(2); }
public IEnumerable <Spot> GetSpotsForCity(SpotResourceParameters spotResourceParameters) { var originalSpots = _cityInfoContext.Spots.Where(s => s.CityId == spotResourceParameters.cityId).AsQueryable(); if (!string.IsNullOrEmpty(spotResourceParameters.Type)) { var typeClause = spotResourceParameters.Type.Trim().ToLowerInvariant(); originalSpots = originalSpots.Where(s => s.Type.Name.ToLowerInvariant() == typeClause); } if (!string.IsNullOrEmpty(spotResourceParameters.SearchQuery)) { var searchQueryForWhereClause = spotResourceParameters.SearchQuery.Trim().ToLowerInvariant(); originalSpots = originalSpots.Where( a => a.Type.Name.ToLowerInvariant().Contains(searchQueryForWhereClause) || a.Name.ToLowerInvariant().Contains(searchQueryForWhereClause) ); } return(originalSpots.Include(t => t.Type).OrderBy(p => p.Name).ToList()); }
public async Task GetSpots_EmptySpots_ReturnNotFound() { //Arrange var cityInfoRepoMock = new Mock <ICityInfoRepository>(); var loggerMock = new Mock <ILogger <SpotController> >(); var urlHelperMock = new Mock <IUrlHelper>(); var param = new SpotResourceParameters() { cityId = 1, SearchQuery = "", Type = "" }; cityInfoRepoMock.Setup(c => c.GetSpotsForCity(param)).Returns(() => new List <Spot>()); var controller = new SpotController(cityInfoRepoMock.Object, loggerMock.Object, urlHelperMock.Object); //Act var result = controller.GetSpotsInCity(param); //Assert var notFound = result.Should().BeOfType <NotFoundResult>(); }