public async Task <IActionResult> GetDeviceSearchCriterion([FromQuery] DeviceSearchCriterion deviceSearchCriterion)
        {
            try
            {
                var products = await _repository.GetDeviceWithCriterion(deviceSearchCriterion);

                var result = _mapper.Map <List <DeviceWithoutValuesDTO> >(products);
                return(Ok(result));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex));
            }
        }
        public async void TestGetDeviceSearchCriterion()
        {
            var device = new DeviceSearchCriterion
            {
                Name = "Laptop"
            };
            var mockRepository = new Mock <IDeviceRepository>();
            var mockMapper     = new Mock <IMapper>();

            var deviceController = new DeviceController(mockRepository.Object, mockMapper.Object);

            var result = await deviceController.GetDeviceSearchCriterion(device);

            var x = result as OkObjectResult;

            Assert.Equal(200, x.StatusCode);
        }
 public async Task <IEnumerable <Device> > GetDeviceWithCriterion(DeviceSearchCriterion deviceSearchCriterion)
 {
     return(await _context.Devices
            .Include(a => a.DeviceType)
            .ThenInclude(devicetype => devicetype.DeviceTypeProperties)
            .Where(p => p.Name.Contains(deviceSearchCriterion.Name) &&
                   p.DeviceType.Name.Contains(deviceSearchCriterion.TypeDevice) &&
                   p.DevicePropertyValues.Any(devPropVal => devPropVal.Value.Contains(deviceSearchCriterion.DeviceValues) &&
                                              p.CreatedDateTime >= deviceSearchCriterion.DateTimeGreatOrEqThan &&
                                              p.CreatedDateTime > deviceSearchCriterion.DateTimeGreatThan &&
                                              p.CreatedDateTime < deviceSearchCriterion.DateTimeLessThan &&
                                              p.CreatedDateTime <= deviceSearchCriterion.DateTimeLessOrEqThan &&
                                              p.PriceDevice >= deviceSearchCriterion.PriceGreatOrEqThan &&
                                              p.PriceDevice > deviceSearchCriterion.PriceGreatThan &&
                                              p.PriceDevice < deviceSearchCriterion.PriceLessThan &&
                                              p.PriceDevice <= deviceSearchCriterion.PriceLessOrEqThan))
            .Skip(deviceSearchCriterion.DeviceNumOnThisPage * (deviceSearchCriterion.PageNumRes - 1))
            .Take(deviceSearchCriterion.DeviceNumOnThisPage)
            .ToListAsync());
 }