private static async Task <ICollection <string> > SavePictures(CreateAdBindingModel model)
        {
            var pictures = new List <string>();

            if (model.FirstPicturePath != null)
            {
                var fullFilePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "images", "Profile", $"{model.Title}.{model.CreatorId}.First.{model.FirstPicturePath.FileName}");
                var fileStream   = new FileStream(fullFilePath, FileMode.Create);
                await model.FirstPicturePath.CopyToAsync(fileStream);

                var path = $"/images/Profile/{model.Title}.{model.CreatorId}.First.{model.FirstPicturePath.FileName}";
                pictures.Add(path);
            }
            if (model.SecondPicturePath != null)
            {
                var fullFilePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "images", "Profile", $"{model.Title}.{model.CreatorId}.Second.{model.SecondPicturePath.FileName}");
                var fileStream   = new FileStream(fullFilePath, FileMode.Create);
                await model.SecondPicturePath.CopyToAsync(fileStream);

                var path = $"/images/Profile/{model.Title}.{model.CreatorId}.Second.{model.SecondPicturePath.FileName}";
                pictures.Add(path);
            }
            if (model.ThirdPicturePath != null)
            {
                var fullFilePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "images", "Profile", $"{model.Title}.{model.CreatorId}.Third.{model.ThirdPicturePath.FileName}");
                var fileStream   = new FileStream(fullFilePath, FileMode.Create);
                await model.ThirdPicturePath.CopyToAsync(fileStream);

                var path = $"/images/Profile/{model.Title}.{model.CreatorId}.Third.{model.ThirdPicturePath.FileName}";
                pictures.Add(path);
            }
            return(pictures);
        }
Beispiel #2
0
        public IHttpActionResult CreateAd([FromUri] CreateAdBindingModel model)
        {
            var ad = new Ad
            {
                Name        = model.Name,
                Description = model.Description,
                TypeId      = model.TypeId,
                Price       = model.Price,
                PostedOn    = DateTime.Now,
                OwnerId     = this.User.Identity.GetUserId()
            };

            foreach (var categoryId in model.Categories)
            {
                var category = this.Data.Categories.Find(categoryId);
                ad.Categories.Add(category);
            }

            this.Data.Ads.Add(ad);
            this.Data.SaveChanges();

            var newAd = this.Data.Ads
                        .Where(a => a.Id == ad.Id)
                        .Select(AdViewModel.Create)
                        .FirstOrDefault();

            return(this.Ok(newAd));
        }
Beispiel #3
0
        public IHttpActionResult PostCreateAd(CreateAdBindingModel model)
        {
            if (model == null)
            {
                return(this.BadRequest("Model cannot be empty!"));
            }

            if (!this.ModelState.IsValid)
            {
                return(this.BadRequest(this.ModelState));
            }

            if (!model.Categories.Any() || model.Categories.Count() > 3)
            {
                return(this.BadRequest("Categories count cannot be " + model.Categories.Count()));
            }

            var dbType = this.Data.AdTypes.All().FirstOrDefault(c => c.Id == model.TypeId);

            if (dbType == null)
            {
                return(this.BadRequest("No type with id " + model.TypeId + " found!"));
            }

            var categories = new List <Category>();

            foreach (var categoryId in model.Categories)
            {
                var dbCategory = this.Data.Categories.All().FirstOrDefault(c => c.Id == categoryId);
                if (dbCategory == null)
                {
                    return(this.BadRequest("No category with id " + model.TypeId + " found!"));
                }

                categories.Add(dbCategory);
            }

            var userId = this.User.Identity.GetUserId();
            var user   = this.Data.Users.All().FirstOrDefault(u => u.Id == userId);
            var newAd  = new Ad()
            {
                Categories  = categories,
                PostedOn    = DateTime.Now,
                Description = model.Description,
                Name        = model.Name,
                Owner       = user,
                Price       = model.Price,
                Type        = dbType
            };

            this.Data.Ads.Add(newAd);
            this.Data.SaveChanges();

            var dbAd = this.Data.Ads.All()
                       .Where(a => a.Id == newAd.Id)
                       .Select(AdViewModel.Create)
                       .FirstOrDefault();

            return(this.Ok(dbAd));
        }
        public IHttpActionResult CreateAd(CreateAdBindingModel model)
        {
            if (model == null)
            {
                return this.BadRequest("Model cannot be empty!");
            }

            if (!this.ModelState.IsValid)
            {
                return this.BadRequest(this.ModelState);
            }

            var type = Data.AdTypes.All().FirstOrDefault(t => t.Id == model.TypeId);
            if (type == null)
            {
                return this.BadRequest("There is no ad type with such id!");
            }

            int numOfCategories = model.Categories.Count();
            if (numOfCategories < 1 || numOfCategories > 3)
            {
                return this.BadRequest("The number of categories should be between 1 and 3");
            }

            List<Category> categories = new List<Category>();
            foreach (var catId in model.Categories)
            {
                var category = Data.Categories.All().FirstOrDefault(c => c.Id == catId);
                if (category == null)
                {
                    string message = string.Format("There is no category with such id: {0}!", catId);
                    return this.BadRequest(message);
                }
                categories.Add(category);
            }

            var userId = this.UserIdProvider.GetUserId();

            var ad = new Ad()
            {
                Name = model.Name,
                Description = model.Description,
                PostedOn = DateTime.Now,
                TypeId = model.TypeId,
                OwnerId = userId,
                Price = model.Price,
                Categories = categories,

            };

            Data.Ads.Add(ad);
            Data.SaveChanges();

            var result = this.Data.Ads.All()
                .Where(a => a.Id == ad.Id)
                .Select(AdViewModel.Create)
                .FirstOrDefault();

            return this.Ok(result);
        }
        public IHttpActionResult CreateNewAd(CreateAdBindingModel model)
        {
            if (model == null)
            {
                return(this.BadRequest("model is empty"));
            }

            if (!this.ModelState.IsValid)
            {
                return(this.BadRequest(this.ModelState));
            }

            if (!this.Data.AdTypes.All().Any(t => t.Id == model.TypeId))
            {
                string badRequest = string.Format("There is no type with id - {0}",
                                                  model.TypeId);
                return(this.BadRequest(badRequest));
            }

            var userId = this.User.Identity.GetUserId();
            var ad     = new Ad
            {
                Name        = model.Name,
                Description = model.Description,
                Price       = model.Price,
                PostedOn    = DateTime.Now,
                Status      = AdStatus.Open,
                OwnerId     = userId,
                TypeId      = model.TypeId
            };

            if (model.Categories.Count() >= 1 && model.Categories.Count() <= 3)
            {
                foreach (var categoryId in model.Categories)
                {
                    var category = this.Data.Categories.Find(categoryId);
                    if (category == null)
                    {
                        return(this.BadRequest("Non existing category"));
                    }

                    ad.Categories.Add(category);
                }
            }
            else
            {
                return(this.BadRequest("You can add at least 1 category and no more than 3"));
            }

            this.Data.Ads.Add(ad);
            this.Data.SaveChanges();

            var result = this.Data.Ads.All()
                         .Where(a => a.Id == ad.Id)
                         .Select(AdViewModel.Create)
                         .FirstOrDefault();

            return(this.Ok(result));
        }
Beispiel #6
0
        public void CreateAd_Should_Succsessfully_Add_To_Repository()
        {
            // Arrange
            var ads      = new List <Ad>();
            var fakeUser = this.mocks.UserRepositoryMock.Object.All()
                           .FirstOrDefault();

            if (fakeUser == null)
            {
                Assert.Fail("Cannot perform test - no users available.");
            }

            this.mocks.AdRepositoryMock
            .Setup(r => r.Add(It.IsAny <Ad>()))
            .Callback((Ad ad) =>
            {
                ad.Owner = fakeUser;
                ads.Add(ad);
            });

            var mockContext = new Mock <IOnlineShopData>();

            mockContext.Setup(c => c.Ads)
            .Returns(this.mocks.AdRepositoryMock.Object);
            mockContext.Setup(c => c.Categories)
            .Returns(this.mocks.CategoryRepositoryMock.Object);
            mockContext.Setup(c => c.Users)
            .Returns(this.mocks.UserRepositoryMock.Object);
            mockContext.Setup(c => c.AdTypes)
            .Returns(this.mocks.AdTypeRepositoryMock.Object);

            var mockUserIdProvider = new Mock <IUserIdProvider>();

            mockUserIdProvider.Setup(uip => uip.GetUserId())
            .Returns(fakeUser.Id);

            var adsController = new AdsController(mockContext.Object, mockUserIdProvider.Object);

            this.SetupController(adsController);

            var randomName = Guid.NewGuid().ToString();
            var newAd      = new CreateAdBindingModel
            {
                Name        = randomName,
                Price       = 555,
                TypeId      = 1,
                Description = "Some description.",
                Categories  = new[] { 3, 1, 99 }
            };

            var response = adsController.CreateAd(newAd)
                           .ExecuteAsync(CancellationToken.None).Result;

            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
            mockContext.Verify(c => c.SaveChanges(), Times.Once);
            Assert.AreEqual(1, ads.Count);
            Assert.AreEqual(newAd.Name, ads[0].Name);
        }
        public IHttpActionResult CreateNewAd(CreateAdBindingModel model)
        {
            if (model == null)
            {
                return this.BadRequest("model is empty");
            }

            if (!this.ModelState.IsValid)
            {
                return this.BadRequest(this.ModelState);
            }

            if (!this.Data.AdTypes.All().Any(t => t.Id == model.TypeId))
            {
                string badRequest = string.Format("There is no type with id - {0}",
                    model.TypeId);
                return this.BadRequest(badRequest);
            }

            var userId = this.User.Identity.GetUserId();
            var ad = new Ad
            {
                Name = model.Name,
                Description = model.Description,
                Price = model.Price,
                PostedOn = DateTime.Now,
                Status = AdStatus.Open,
                OwnerId = userId,
                TypeId = model.TypeId
            };

            if(model.Categories.Count() >= 1 && model.Categories.Count() <= 3){
                foreach (var categoryId in model.Categories)
                {
                    var category = this.Data.Categories.Find(categoryId);
                    if (category == null)
                    {
                        return this.BadRequest("Non existing category");
                    }

                    ad.Categories.Add(category);
                }
            }
            else
            {
                return this.BadRequest("You can add at least 1 category and no more than 3");
            }

            this.Data.Ads.Add(ad);
            this.Data.SaveChanges();

            var result = this.Data.Ads.All()
                .Where(a => a.Id == ad.Id)
                .Select(AdViewModel.Create)
                .FirstOrDefault();

            return this.Ok(result);
        }
Beispiel #8
0
        public IHttpActionResult CreateAd([FromBody] CreateAdBindingModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (!model.Categories.Any())
            {
                return(BadRequest("You must specify at least 1 category!"));
            }

            if (model.Categories.Count() > 3)
            {
                return(BadRequest("You cannot have more than 3 categories!"));
            }

            if (!Data.AdTypes.All().Any(ad => ad.Id == model.TypeId))
            {
                return(BadRequest("Type with the Id specified doesnt exist!"));
            }

            if (Data.Categories.All().Where(c => model.Categories.Contains(c.Id)).ToList().Count !=
                model.Categories.Count())
            {
                return(BadRequest("One or more of the specified category Id's doesnt belong to a category!"));
            }


            var uId = UserIdProvider.GetUserId();

            var add = new Ad
            {
                Name        = model.Name,
                Description = model.Description,
                TypeId      = model.TypeId,
                Status      = 0,
                PostedOn    = DateTime.Now,
                OwnerId     = uId,
                Price       = model.Price,
                Categories  = (Data.Categories.All().Where(c => model.Categories.Contains(c.Id)))
                              .ToList()
            };


            Data.Ads.Add(add);

            Data.SaveChanges();

            var result = Data.Ads.All().Where(d => d.Id == add.Id)
                         .Select(AdViewModel.Create)
                         .FirstOrDefault();

            return(Ok(result));
        }
        public IHttpActionResult CreateAd(CreateAdBindingModel model)
        {
            if (model == null)
            {
                return(this.BadRequest("Model cannot be null"));
            }

            if (!this.ModelState.IsValid)
            {
                return(this.BadRequest(this.ModelState));
            }

            var currentUserId = this.UserIdProvider.GetUserId();    // Check if id is correct
            var adType        = this.Data.AdTypes.Find(model.TypeId);

            if (adType == null)
            {
                return(this.BadRequest("AdType with such id does not exists"));
            }

            var ad = new Ad
            {
                Name        = model.Name,
                Description = model.Description,
                Price       = model.Price,
                PostedOn    = DateTime.Now,
                Status      = AdStatus.Open,
                TypeId      = adType.Id,
                OwnerId     = currentUserId
            };

            if (model.Categories.Count() > 3 || model.Categories == null)
            {
                return(this.BadRequest("Categories must be in range [1..3]"));
            }

            foreach (var categoryId in model.Categories)
            {
                var category = this.Data.Categories.All().FirstOrDefault(c => c.Id == categoryId);
                if (category == null)
                {
                    return(this.BadRequest("Invalid category id."));
                }

                ad.Categories.Add(category);
            }

            this.Data.Ads.Add(ad);
            this.Data.SaveChanges();
            var result =
                this.Data.Ads.All().Where(a => a.Id == ad.Id).Select(AllAdsViewModel.Create).FirstOrDefault();

            return(this.Ok(result));
        }
Beispiel #10
0
        public IHttpActionResult CreateNewAd(CreateAdBindingModel model)
        {
            var userId = this.User.Identity.GetUserId();
            if (userId == null)
            {
                return this.Unauthorized();
            }

            if (model == null)
            {
                return this.BadRequest("model is empty");
            }

            if (!this.ModelState.IsValid)
            {
                return this.BadRequest(this.ModelState);
            }

            if (!this.Data.AdTypes.Any(t => t.Id == model.TypeId))
            {
                return this.BadRequest("there is no type with the provided id in the database");
            }

            var ad = new Ad
            {
                Name = model.Name,
                Description = model.Description,
                Price = model.Price,
                PostedOn = DateTime.Now,
                Status = AdStatus.Open,
                OwnerId = userId,
                TypeId = model.TypeId
            };

            foreach (var categoryId in model.Categories)
            {
                var category = this.Data.Categories.Find(categoryId);
                if (category == null)
                {
                    return this.BadRequest("Non existing category");
                }

                ad.Categories.Add(category);
            }

            this.Data.Ads.Add(ad);
            this.Data.SaveChanges();
            var result = this.Data.Ads
                .Where(a => a.Id == ad.Id)
                .Select(AdViewModel.Create)
                .FirstOrDefault();

            return this.Ok(result);
        }
        public void CreateAd_WithCorrectData_ShouldSuccessfullyAddAdInRepository()
        {
            // Arrange
            var ads = new List <Ad>();

            // Act
            var mockContext    = new Mock <IOnlineShopData>();
            var fakeAds        = this.mockContainer.AdRepositoryMock.Object.All();
            var fakeAdTypes    = this.mockContainer.AdTypeRepositoryMock.Object.All();
            var fakeCategories = this.mockContainer.CategoryRepositoryMock.Object.All();
            var fakeUsers      = this.mockContainer.ApplicationUserRepositoryMock.Object.All();

            mockContext.Setup(r => r.Ads).Returns(this.mockContainer.AdRepositoryMock.Object);
            mockContext.Setup(r => r.AdTypes).Returns(this.mockContainer.AdTypeRepositoryMock.Object);
            mockContext.Setup(r => r.Categories).Returns(this.mockContainer.CategoryRepositoryMock.Object);
            mockContext.Setup(r => r.ApplicationUsers).Returns(this.mockContainer.ApplicationUserRepositoryMock.Object);
            var fakeUser       = this.mockContainer.ApplicationUserRepositoryMock.Object.All().FirstOrDefault();
            var mockIdProvider = new Mock <IUserIdProvider>();

            if (fakeUser == null)
            {
                Assert.Fail("Cannot perform test no users available.");
            }

            mockIdProvider.Setup(r => r.GetUserId()).Returns(fakeUser.Id);

            var adsController = new AdsController(mockContext.Object, mockIdProvider.Object);

            this.SetupController(adsController);
            this.mockContainer.AdRepositoryMock.Setup(r => r.Add(It.IsAny <Ad>()))
            .Callback((Ad ad) =>
            {
                // ad.Id = 10;   // Uncomment if id is required in the test
                ad.Owner = fakeUser;
                ads.Add(ad);
            });
            var randomName = Guid.NewGuid().ToString();
            var newAd      = new CreateAdBindingModel()
            {
                Name        = randomName,
                Price       = 555,
                TypeId      = 1,
                Description = "Put description here",
                Categories  = new[] { 1, 2 }
            };

            var httpResponse = adsController.CreateAd(newAd).ExecuteAsync(CancellationToken.None).Result;

            // Assert
            mockContext.Verify(c => c.SaveChanges(), Times.Once);
            Assert.AreEqual(1, ads.Count);
            Assert.AreEqual(ads[0].Name, newAd.Name);
        }
Beispiel #12
0
        // POST api/ads
        public IHttpActionResult Post(CreateAdBindingModel createAdModel)
        {
            //var userId = this.User.Identity.GetUserId();
            //if (userId == null)
            //{
            //    this.Unauthorized();
            //}

            if (!this.ModelState.IsValid)
            {
                return(this.BadRequest(this.ModelState));
            }

            if (createAdModel.Categories.Count() < 1 ||
                createAdModel.Categories.Count() > 3)
            {
                return(this.BadRequest("Categories count should be between 1 and 3"));
            }

            var newAd = createAdModel.CreateAd();
            var type  = this.Data.AdTypes.Find(createAdModel.TypeId);

            if (type == null)
            {
                return(this.BadRequest(
                           string.Format("No type with id {0} found", createAdModel.TypeId)));
            }

            newAd.Type = type;
            foreach (var categoryId in createAdModel.Categories)
            {
                var category = this.Data.Categories.Find(categoryId);
                if (category == null)
                {
                    return(this.BadRequest(
                               string.Format("No category with id {0} found", categoryId)));
                }

                newAd.Categories.Add(category);
            }

            string userId = this.User.Identity.GetUserId();
            var    user   = this.Data.Users.Find(userId);

            newAd.Owner = user;

            this.Data.Ads.Add(newAd);
            this.Data.SaveChanges();

            return(this.Ok());
        }
Beispiel #13
0
        public IHttpActionResult CreateAd(CreateAdBindingModel model)
        {
            string userId = this.User.Identity.GetUserId();

            if (userId == null)
            {
                return(this.Unauthorized());
            }

            if (model == null)
            {
                return(this.BadRequest("Ad model cannot be null."));
            }

            if (!this.ModelState.IsValid)
            {
                return(this.BadRequest(this.ModelState));
            }

            var newAd = new Ad
            {
                Name        = model.Name,
                Description = model.Description,
                TypeId      = model.TypeId,
                Price       = model.Price,
                PostedOn    = DateTime.Now,
                OwnerId     = userId
            };

            foreach (var categoryId in model.Categories)
            {
                var category = this.Data.Categories.Find(categoryId);
                newAd.Categories.Add(category);
            }

            this.Data.Ads.Add(newAd);
            this.Data.SaveChanges();
            var adInDb = this.Data.Ads
                         .Where(a => a.Id == newAd.Id)
                         .Select(AdViewModel.Create)
                         .FirstOrDefault();

            return(this.Ok(adInDb));
        }
Beispiel #14
0
        public IHttpActionResult CreateAd(CreateAdBindingModel model)
        {
            var userId = this.User.Identity.GetUserId();

            if (model == null) return this.BadRequest("Invalid user data.");

            // AUTHORIZE ATTRIBUTE CHECK THE SAME
            //if (userId == null) return this.BadRequest("User is not logged in.");

            if (!this.ModelState.IsValid) return this.BadRequest(this.ModelState);

            if (!this.Data.AdTypes.Any(t => t.Id == model.TypeId)) return this.BadRequest("Invalid TypeId");

            var categories = this.Data.Categories.Where(c => model.Categories.Contains(c.Id)).ToList();

            if (categories.Count < 1 || categories.Count > 3) return this.BadRequest("Categories allowed range 1 - 3");

            if (categories.Count != model.Categories.Count()) return this.BadRequest("Invalid category id provided");

            var adCreator = this.Data.Users.Find(userId);
            var adType = this.Data.AdTypes.Find(model.TypeId);

            var ad = new Ad()
            {
                Name = model.Name,
                Description = model.Description,
                Price = model.Price,
                TypeId = model.TypeId,
                Type = adType,
                Categories = categories,
                OwnerId = userId,
                Owner = adCreator,
                PostedOn = DateTime.Now,
                Status = 0
            };

            this.Data.Ads.Add(ad);
            this.Data.SaveChanges();

            var result = this.Data.Ads.Where(a => a.Id == ad.Id).Select(AdViewModel.Create).FirstOrDefault();

            return this.Ok(result);
        }
Beispiel #15
0
        public IHttpActionResult CreateAd(CreateAdBindingModel model)
        {
            var userId = this.User.Identity.GetUserId();

            if (model == null)
            {
                return(this.BadRequest("Model cannot be null (no data in request)"));
            }

            if (!this.ModelState.IsValid)
            {
                return(this.BadRequest(this.ModelState));
            }

            var adType = this.Data.AdTypes
                         .FirstOrDefault(at => at.Name == model.Type);

            if (adType == null)
            {
                return(this.BadRequest("Type is invalid"));
            }

            var ad = new Ad()
            {
                Name        = model.Name,
                Description = model.Description,
                Price       = model.Price,
                Type        = adType,
                PostedOn    = DateTime.Now,
                Status      = AdStatus.Open,
                OwnerId     = this.User.Identity.GetUserId()
            };

            this.Data.Ads.Add(ad);
            this.Data.SaveChanges();

            var data = this.Data.Ads
                       .Where(a => a.Id == ad.Id)
                       .Select(AdViewModel.Create)
                       .FirstOrDefault();

            return(this.Ok(data));
        }
        public async Task CreateAd(CreateAdBindingModel model, ICollection <string> picturesPaths)
        {
            var pictures = CreatePictures(picturesPaths);
            var ad       = new Ad()
            {
                CategoryId    = model.CategoryId,
                Title         = model.Title,
                Price         = model.Price,
                City          = model.City,
                Email         = model.Email,
                ConditionId   = model.ConditionId,
                ContactNumber = model.ContactNumber,
                CreatorId     = model.CreatorId,
                Description   = model.Description,
                PostalCode    = model.PostalCode,
                Region        = model.Region,
                CreateDate    = DateTime.Now,
                Pictures      = pictures
            };

            DbContext.Ads.Add(ad);
            await DbContext.SaveChangesAsync();
        }
Beispiel #17
0
        public IHttpActionResult CreateAd([FromBody]CreateAdBindingModel model)
        {
            //check if the user is logged-in
            var loggedUser = this.User.Identity.GetUserId();
            var user = this.Context.Users.FirstOrDefault(u => u.Id == loggedUser);
            
            //check if the model is not null

            if (model==null)
            {
                return this.BadRequest("No vlues added!");
            }
            //check if the state of the model is valid
            if (!this.ModelState.IsValid)
            {
                return BadRequest(this.ModelState);
            }

            //validate that thee is at least one Category and mnot more than 3
            if (!model.Categories.Any() || model.Categories.Count() > 3)
            {
                return this.BadRequest("Categories count cannot be " + model.Categories.Count());
            }

            //check if the type ID is real
            var typeId = this.Context.AdTypes
                .FirstOrDefault(c => c.Id == model.TypeId);
            if (typeId == null)
            {
                return this.BadRequest("No type with id " + model.TypeId + " found!");
            }

            //check if the category ID is real

            var categories = new List<Category>();
            foreach (var categoryId in model.Categories)
            {
                var dbCategory = this.Context.Categories.FirstOrDefault(c => c.Id == categoryId);
                if (dbCategory == null)
                {
                    return this.BadRequest("No category with id " + model.TypeId + " found!");
                }

                categories.Add(dbCategory);
            }

            var ad = new Ad()
            {
                Categories = categories,
                Name = model.Name,
                Description = model.Description,
                Type = typeId,
                Price = model.Price,
                Owner = user
           };
            
            this.Context.Ads.Add(ad);
            this.Context.SaveChanges();

            var result = Context.Ads
                .Where(a => a.Id == ad.Id)
                .Select(AdViewModel.Create)
                .FirstOrDefault();

            return this.Ok(result);
        }
Beispiel #18
0
        public void CreateAd_Should_Successfully_Add_To_Repository()
        {
            var ads = new List <Ad>();

            var fakeUser = _mocks.ApplicationUserRepoMock.Object.All()
                           .FirstOrDefault();

            if (fakeUser == null)
            {
                Assert.Fail("No users to perform the test with.");
            }

            _mocks.AdRepoMock
            .Setup(r => r.Add(It.IsAny <Ad>()))
            .Callback((Ad ad) =>
            {
                ad.Owner = fakeUser;
                ads.Add(ad);
            });

            var mockContext = new Mock <IOnlineShopData>();

            mockContext.Setup(c => c.Ads)
            .Returns(this._mocks.AdRepoMock.Object);
            mockContext.Setup(c => c.AdTypes)
            .Returns(this._mocks.AdTypeRepoMock.Object);
            mockContext.Setup(c => c.Categories)
            .Returns(this._mocks.CategoryRepoMock.Object);
            mockContext.Setup(c => c.Users)
            .Returns(this._mocks.ApplicationUserRepoMock.Object);

            var mockIdProvider = new Mock <IUserIdProvider>();

            mockIdProvider.Setup(ip => ip.GetUserId())
            .Returns(fakeUser.Id);

            var adsController = new AdsController(mockContext.Object, mockIdProvider.Object);

            this.SetupController(adsController);

            var randomName = Guid.NewGuid().ToString();

            var newAdd = new CreateAdBindingModel
            {
                Name        = randomName,
                Price       = 555,
                TypeId      = 1,
                Description = "Sample text",
                Categories  = new[] { 1, 2, 3 }
            };

            var response = adsController.CreateAd(newAdd)
                           .ExecuteAsync(CancellationToken.None)
                           .Result;

            Assert.AreEqual(response.StatusCode, HttpStatusCode.OK);

            mockContext.Verify(c => c.SaveChanges(), Times.Once);

            Assert.AreEqual(ads.Count, 1);

            Assert.AreEqual(ads[0].Name, randomName);
        }
Beispiel #19
0
        public IHttpActionResult CreateAd(CreateAdBindingModel model)
        {
            string loggedUserId = this.User.Identity.GetUserId();

            if (loggedUserId == null)
            {
                return(this.Unauthorized());
            }

            if (!this.ModelState.IsValid)
            {
                return(this.BadRequest());
            }

            if (!model.Categories.Any() && model.Categories.Count() > 3)
            {
                return(this.BadRequest("Categories count must be in range [1...3]"));
            }


            var ad = new Ad()
            {
                Name        = model.Name,
                Description = model.Description,
                TypeId      = model.TypeId,
                Price       = model.Price,
                Categories  = new HashSet <Category>(),
                PostedOn    = DateTime.Now,
                OwnerId     = loggedUserId
            };

            foreach (var categoryId in model.Categories)
            {
                var isFind = this.Data.Categories.Find(categoryId);
                if (isFind == null)
                {
                    return(this.BadRequest());
                }
                ad.Categories.Add(isFind);
            }

            this.Data.Ads.Add(ad);
            this.Data.SaveChanges();

            var result = this.Data.Ads
                         .Where(a => a.Id == ad.Id)
                         .Select(a => new
            {
                a.Id,
                a.Name,
                a.Description,
                a.Price,
                Owner = new
                {
                    a.OwnerId,
                    a.Owner.UserName
                },
                TypeName = a.Type.Name,
                a.PostedOn,
                Categories = a.Categories
                             .Select(c => c.Name)
            })
                         .FirstOrDefault();

            return(this.Ok(result));
        }
        public void CreateAd_ShouldSuccessfullyAddToRepository()
        {
            var ads = new List<Ad>();
            var fakeUser = this.mocks.ApplicationUserRepositoryMock.Object.All()
                .FirstOrDefault();

            if (fakeUser == null)
            {
                Assert.Fail("Cannot perform test - no users available.");
            }

            this.mocks.AdRepositoryMock
                .Setup(r => r.Add(It.IsAny<Ad>()))
                .Callback((Ad ad) =>
                {
                    ad.Owner = fakeUser;
                    ads.Add(ad);
                });

            var mockContext = new Mock<IOnlineShopData>();

            mockContext
                .Setup(c => c.Ads)
                .Returns(this.mocks.AdRepositoryMock.Object);
            mockContext
                .Setup(c => c.AdTypes)
                .Returns(this.mocks.AdTypeRepositoryMock.Object);
            mockContext
                .Setup(c => c.ApplicationUsers)
                .Returns(this.mocks.ApplicationUserRepositoryMock.Object);
            mockContext
                .Setup(c => c.Categories)
                .Returns(this.mocks.CategoryRepositoryMock.Object);

            var mockIdProvider = new Mock<IUserIdProvider>();

            mockIdProvider
                .Setup(ip => ip.GetUserId())
                .Returns(fakeUser.Id);

            var adsController = new AdsController(mockContext.Object, mockIdProvider.Object);

            this.SetupController(adsController);

            var randomName = Guid.NewGuid().ToString();
            var newAd = new CreateAdBindingModel()
            {
                Name = randomName,
                Price = 555,
                TypeId = 1,
                Description = "Nothing much to say",
                Categories = new[] { 1, 2, 3 }
            };

            var response = adsController.Post(newAd)
                .ExecuteAsync(CancellationToken.None).Result;

            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);

            mockContext.Verify(c => c.SaveChanges(), Times.Once);

            Assert.AreEqual(1, ads.Count);
            Assert.AreEqual(newAd.Name, ads[0].Name);
        }
Beispiel #21
0
        public IHttpActionResult Post(CreateAdBindingModel model)
        {
            if (!this.ModelState.IsValid)
            {
                return this.BadRequest(this.ModelState);
            }

            if (model == null)
            {
                return this.BadRequest("No data sent.");
            }

            if (model.Categories.Count() < 1 || 3 < model.Categories.Count())
            {
                return this.BadRequest("The number of categories should be in the range [1...3]");
            }

            if (model.TypeId < 1 || 3 < model.TypeId)
            {
                return this.BadRequest("The type id should be in the range [1...3]");
            }

            foreach (var categoryId in model.Categories)
            {
                if (categoryId < 1 || 6 < categoryId)
                {
                    return this.BadRequest("All category ids should be in the range [1...6]");
                }
            }

            var categories = new HashSet<Category>();
            foreach (var categoryId in model.Categories)
            {
                var category = ConvertToCategory(categoryId);

                categories.Add(category);
            }


            var loggedUserId = this.UserIdProvider.GetUserId();
            var ad = new Ad()
            {
                Name = model.Name,
                Description = model.Description,
                TypeId = model.TypeId,
                Price = model.Price,
                PostedOn = DateTime.Now,
                OwnerId = loggedUserId,
                Categories = categories,
                Status = AdStatus.Open
            };

            this.Data.Ads.Add(ad);
            this.Data.SaveChanges();

            var result = this.Data.Ads.All()
                .Where(a => a.Id == ad.Id)
                .Select(AdViewModel.Create)
                .FirstOrDefault();

            return this.Ok(result);
        }