public void Create_Controller_Returns_View_To_Index_When_Model_Is_Not_Valid()
        {
            var adService      = new Mock <RealEstateAdService>(It.IsAny <IApplicationDbContext>());
            var cityService    = new Mock <CityService>(It.IsAny <IApplicationDbContext>());
            var imgService     = new Mock <RealEstateImageService>(It.IsAny <IApplicationDbContext>());
            var fileService    = new Mock <UserFileService>();
            var mappingService = new Mock <MappingService>();
            var server         = new Mock <HttpServerUtilityBase>();
            var curUserSvc     = new Mock <CurrentUserService>();

            var controller = new RealEstateAdController(adService.Object, cityService.Object,
                                                        imgService.Object, fileService.Object, curUserSvc.Object, mappingService.Object, server.Object);

            var ad = new CreateAdViewModel()
            {
                Title = "The New Mansion"
            };

            //Simulate validation otherwise ModelState.IsValid will always be true
            controller.ModelState.AddModelError("Error", "Title is incorrect");
            var view = controller.Create(ad) as ViewResult;

            Assert.IsNotNull(view);
            Assert.AreEqual(view.Model, ad, "Failed");
        }
        public void Index_Returns_Correct_Number_Of_Ads_In_The_View()
        {
            var adService = new Mock <IRealEstateAdService>();
            var ads       = new List <RealEstateAd>()
            {
                new RealEstateAd {
                    Id = Guid.NewGuid(), Title = "Home1"
                },
                new RealEstateAd {
                    Id = Guid.NewGuid(), Title = "Home2"
                },
                new RealEstateAd {
                    Id = Guid.NewGuid(), Title = "Home3"
                }
            };

            adService.Setup(a => a.Find(It.IsAny <Expression <Func <RealEstateAd, bool> > >())).Returns(ads.AsQueryable());

            var cityService    = new Mock <CityService>(It.IsAny <IApplicationDbContext>());
            var imgService     = new Mock <RealEstateImageService>(It.IsAny <IApplicationDbContext>());
            var fileService    = new Mock <UserFileService>();
            var mappingService = new Mock <MappingService>();
            var server         = new Mock <HttpServerUtilityBase>();
            var curUserSvc     = new Mock <CurrentUserService>();

            var controller = new RealEstateAdController(adService.Object, cityService.Object,
                                                        imgService.Object, fileService.Object, curUserSvc.Object, mappingService.Object, server.Object);
            var view        = controller.Index() as ViewResult;
            var resultModel = (IEnumerable <RealEstateAd>)view.ViewData.Model;

            Assert.IsNotNull(view);
            Assert.AreEqual(resultModel.Count(), ads.Count(), "Result model has incorrect count");
        }
        public void Index_Returns_View()
        {
            var adService      = new Mock <RealEstateAdService>(It.IsAny <IApplicationDbContext>());
            var cityService    = new Mock <CityService>(It.IsAny <IApplicationDbContext>());
            var imgService     = new Mock <RealEstateImageService>(It.IsAny <IApplicationDbContext>());
            var fileService    = new Mock <UserFileService>();
            var mappingService = new Mock <MappingService>();
            var server         = new Mock <HttpServerUtilityBase>();
            var curUserSvc     = new Mock <CurrentUserService>();

            var controller = new RealEstateAdController(adService.Object, cityService.Object,
                                                        imgService.Object, fileService.Object, curUserSvc.Object, mappingService.Object, server.Object);
            var view = controller.Index() as ViewResult;

            Assert.IsNotNull(view);
        }
        public void Create_Controller_Redirects_To_Index_When_Model_Is_Valid()
        {
            //Arrange
            var controller = new RealEstateAdController(_adSvc.Object, _citySvc.Object,
                                                        _imgSvc.Object, _fileSvc.Object, _curUserSvc.Object, _mappingSvc.Object, _server.Object);
            var ad = new CreateAdViewModel()
            {
                Title = "The New Mansion", PostedImage = _postedFile.Object
            };
            //Act
            var view = controller.Create(ad) as RedirectToRouteResult;

            //Assert

            _adSvc.Verify(a => a.Add(It.IsAny <RealEstateAd>()), Times.Once, "Failed to call Add method of adService");
            _fileSvc.Verify(f => f.UploadFile(It.IsAny <Stream>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <int>()), Times.Once, "Failed to call UploadFile");
            _mappingSvc.Verify(m => m.Map <CreateAdViewModel, RealEstateAd>(It.IsAny <CreateAdViewModel>()), Times.Once, "Failed to call mapper");
            _imgSvc.Verify(i => i.Add(It.IsAny <Image>()), Times.Once);
            Assert.IsNotNull(view, "Controller does not redirect");
        }