예제 #1
0
        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>();
        }