public async Task <IActionResult> Post([FromQuery] RentalQueryParamsModel queryParams, RentalModel rental)
        {
            if (rental == null)
            {
                return(BadRequest());
            }

            var ExistingEntry = await _unitOfWork.Rental.GetAsync(rental.Id, queryParams);

            if (ExistingEntry == null)
            {
                var obj = await _unitOfWork.Rental.InsertAsync(rental);

                await _unitOfWork.CommitAsync();

                return(Ok(obj));
            }
            else
            {
                _unitOfWork.Rental.Update(rental);

                await _unitOfWork.CommitAsync();

                return(Ok(rental));
            }
        }
        public void Test_GenerateOrderByFunc_EmptyKey()
        {
            var queryParams = new RentalQueryParamsModel();

            var orderByFunc = RentalRepository.GenerateOrderByFunc(queryParams);

            Assert.Null(orderByFunc);
        }
        public void Test_Trivial_String_Props(string propName)
        {
            var queryParams = new RentalQueryParamsModel();
            var prop        = queryParams.GetType().GetProperty(propName);

            prop.SetValue(queryParams, "test");
            Assert.Equal("test", prop.GetValue(queryParams));
        }
        public void Test_GenerateOrderByFunc_InvalidKey()
        {
            var queryParams = new RentalQueryParamsModel();

            queryParams.SortKey = "missing";

            var orderByFunc = RentalRepository.GenerateOrderByFunc(queryParams);

            Assert.Null(orderByFunc);
        }
        public void Test_GenerateOrderByFunc(string sortKey)
        {
            var queryParams = new RentalQueryParamsModel();

            queryParams.SortKey = sortKey;

            var orderByFunc = RentalRepository.GenerateOrderByFunc(queryParams);

            Assert.NotNull(orderByFunc);
        }
        public async Task <IActionResult> Get([FromQuery] RentalQueryParamsModel queryParams, int id)
        {
            var obj = await _unitOfWork.Rental.GetAsync(id, queryParams);

            if (obj == null)
            {
                return(NotFound());
            }
            return(Ok(obj));
        }
        public void Test_GenerateFilterFuncs()
        {
            var queryParams = new RentalQueryParamsModel();

            queryParams.HasBedType = "King";
            queryParams.HasAmenity = "Coffee";

            var funcs = RentalRepository.GenerateFilterFuncs(queryParams);

            // 3 filters are always added, +2 more based on params.
            Assert.Equal(5, funcs.Count);
        }
        public void Test_Clamped_Props_Int(string propName, int min, int max)
        {
            var queryParams = new RentalQueryParamsModel();
            var prop        = queryParams.GetType().GetProperty(propName);

            prop.SetValue(queryParams, -99999999);
            Assert.Equal(min, prop.GetValue(queryParams));

            if (min != max)
            {
                prop.SetValue(queryParams, 99999999);
                Assert.Equal(max, prop.GetValue(queryParams));
            }
        }
 public async Task <IActionResult> Get([FromQuery] RentalQueryParamsModel queryParams)
 {
     return(Ok(await _unitOfWork.Rental.GetAsync(queryParams)));
 }