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); }
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)); }
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)); }
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); }
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)); }
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); }
// 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()); }
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)); }
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); }
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(); }
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); }
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); }
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); }
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); }