public void GetOffer_WithValidId_ShouldReturn200OKAndDataCorectly() { //Arrange TestingEngine.CleanDatabase(); var userSession = TestingEngine.RegisterUser("peter", "pAssW@rd#123456"); var offerModel = new OfferModel() { Title = "Title", Description = "Description", InitialPrice = 200, ExpirationDateTime = DateTime.Now.AddDays(5) }; var httpResultOffer = TestingEngine.CreateOfferHttpPost(userSession.Access_Token, offerModel.Title, offerModel.Description, offerModel.InitialPrice, offerModel.ExpirationDateTime); // Act var db = new BidSystemDbContext(); var offerFromDb = db.Offers.FirstOrDefault(); var bids = new BidModel[] { new BidModel() { BidPrice = 250, Comment = "Invalid: less than the initioal price" }, }; var httpResultBid0 = TestingEngine.CreateBidHttpPost(userSession.Access_Token, offerFromDb.Id, bids[0].BidPrice, bids[0].Comment); db.SaveChanges(); var offerDetailsResponse = TestingEngine.HttpClient.GetAsync("/api/offers/details/" + offerFromDb.Id).Result; var offerResponseContent = httpResultOffer.Content.ReadAsAsync<OfferDetailsViewModel>().Result; // Assert Assert.AreEqual(HttpStatusCode.OK, offerDetailsResponse.StatusCode); }
public static void CleanDatabase() { using (var dbContext = new BidSystemDbContext()) { dbContext.Bids.Delete(); dbContext.Offers.Delete(); dbContext.Users.Delete(); dbContext.SaveChanges(); } }
public IHttpActionResult CreateNewOffer(OfferBindingModel offerModel) { if (offerModel == null) { return(this.BadRequest("Invalid offer data.")); } if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var currentUserId = User.Identity.GetUserId(); var currentUser = db.Users.FirstOrDefault(u => u.Id == currentUserId); if (currentUser == null) { return(this.Unauthorized()); } Offer offer = new Offer() { Title = offerModel.Title, Description = offerModel.Description, InitialPrice = offerModel.InitialPrice, ExpirationDateTime = DateTime.Parse(offerModel.ExpirationDateTime), SellerId = currentUserId, DatePublished = DateTime.Now }; db.Offers.Add(offer); db.SaveChanges(); return(CreatedAtRoute( "DefaultApi", new { id = offer.Id }, new { id = offer.Id, Seller = currentUser.UserName, Message = "Offer created." })); }
public IHttpActionResult CreateBidToExistingOffer(int offerId, BidBindingModel bidModel) { if (bidModel == null) { return(this.BadRequest("Invalid bid price.")); } if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var currentUserId = User.Identity.GetUserId(); if (currentUserId == null) { return(this.Unauthorized()); } var offer = db.Offers.FirstOrDefault(o => o.Id == offerId); if (offer == null) { return(this.NotFound()); } if (offer.ExpirationDateTime < DateTime.Now) { return(this.BadRequest("Offer has expired.")); } if (offer.Bids.Count > 0) { var maxBidForOffer = offer.Bids.Max(b => b.OfferedPrice); if (bidModel.BidPrice <= maxBidForOffer) { return(this.BadRequest("Your bid should be > " + maxBidForOffer)); } } else { if (bidModel.BidPrice <= offer.InitialPrice) { return(this.BadRequest("Your bid should be > " + offer.InitialPrice)); } } var bid = new Bid() { BidderId = currentUserId, DateCreated = DateTime.Now, OfferId = offer.Id, OfferedPrice = bidModel.BidPrice, Comment = bidModel.Comment != null ? bidModel.Comment : null }; offer.Bids.Add(bid); db.SaveChanges(); return(this.Ok(new { Id = bid.Id, Bidder = User.Identity.GetUserName(), Message = "Bid created." })); }