public IHttpActionResult GetVehicleBodyTypeByMakeAndModelIds(VehicleBodyTypesRequestModel requestModel)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            try
            {
                var bodyTypeIds = this.vehicles.GetBodyTypeIdsByModelIdAndMakeId(requestModel.MakeId, requestModel.ModelId);

                List <VehicleBodyTypeResponseModel> bodyTypes = new List <VehicleBodyTypeResponseModel>();
                foreach (var bodyTypeId in bodyTypeIds)
                {
                    if (bodyTypeId != null)
                    {
                        var bodyType = this.Mapper.Map <VehicleBodyTypeResponseModel>(this.bodyTypes.GetById(bodyTypeId));
                        bodyTypes.Add(bodyType);
                    }
                }

                return(this.Ok(bodyTypes.OrderBy(x => x.Code)));
            }
            catch (Exception e)
            {
                HandlExceptionLogging(e, "", controllerName);
                return(InternalServerError());
            }
        }
        public void GetVehicleBodyTypeByMakeAndModelIds_ShouldReturnInternalServerErrorAndLogError_WhenVehiclesServiceisNull()
        {
            var bodyTypesMock = new Mock <IVehicleBodyTypesService>();
            var controller    = new BodyTypesController(bodyTypesMock.Object, null, mockedLogger.Object);

            var model = new VehicleBodyTypesRequestModel()
            {
                MakeId  = 1,
                ModelId = 3
            };

            var result = controller.GetVehicleBodyTypeByMakeAndModelIds(model);

            Assert.IsInstanceOfType(result, typeof(InternalServerErrorResult));
            mockedLogger.Verify(x => x.LogError(It.IsAny <Exception>(), "", controllerName, "GetVehicleBodyTypeByMakeAndModelIds"));
        }
        public void GetVehicleBodyTypeByMakeAndModelIds_ShouldReturnAllBodyTypes()
        {
            mapper.Execute();

            var         vehiclesMock = new Mock <IVehiclesService>();
            List <int?> bodyTypeIds  = new List <int?>()
            {
                1, 2, null
            };

            vehiclesMock.Setup(v => v.GetBodyTypeIdsByModelIdAndMakeId(1, 3))
            .Returns(bodyTypeIds);

            var             bodyTypesMock = new Mock <IVehicleBodyTypesService>();
            VehicleBodyType bodyType1     = new VehicleBodyType()
            {
                Id = 1, Code = "H5", Description = "Hatcback 5dr"
            };

            bodyTypesMock.Setup(v => v.GetById(1)).Returns(bodyType1);

            VehicleBodyType bodyType2 = new VehicleBodyType()
            {
                Id = 2, Code = "H3", Description = "Hatcback 3dr"
            };

            bodyTypesMock.Setup(v => v.GetById(2)).Returns(bodyType2);

            var controller = new BodyTypesController(bodyTypesMock.Object, vehiclesMock.Object, null);
            var model      = new VehicleBodyTypesRequestModel()
            {
                MakeId  = 1,
                ModelId = 3
            };

            var result = controller.GetVehicleBodyTypeByMakeAndModelIds(model);

            Assert.IsInstanceOfType(result, typeof(OkNegotiatedContentResult <IOrderedEnumerable <VehicleBodyTypeResponseModel> >));
            var responseContent = ((OkNegotiatedContentResult <IOrderedEnumerable <VehicleBodyTypeResponseModel> >)result).Content;

            Assert.AreEqual(responseContent.ToList().Count, 2);
            Assert.AreEqual(responseContent.First().Id, 2);
            Assert.AreEqual(responseContent.Last().Id, 1);

            vehiclesMock.VerifyAll();
            bodyTypesMock.VerifyAll();
        }