public void AddNewCampaign_NOT_ON_SAME_STREET_BAD_REQUEST() { //Arrange var request = new NewCampaignRequest { StartDate = "2020-07-01", EndDate = "2020-08-01", IdClient = 3, FromIdBuilding = 1, ToIdBuilding = 2 }; var targetErrorMessage = "Buildings MUST be located on the same street"; _clientsMockDbService.Setup(service => service.ClientExists(request.IdClient)) .Returns(true); _campaignsMockDbService.Setup(service => service.BuildingsOnSameStreet(request.FromIdBuilding, request.ToIdBuilding)) .Returns(false); //Act var actionResult = _campaignsController.AddNewCampaign(request); //Assrt var badRequestObjectResult = actionResult as BadRequestObjectResult; Assert.NotNull(badRequestObjectResult); var errorMessage = badRequestObjectResult.Value as string; Assert.Equal(targetErrorMessage, errorMessage); }
public void AddNewCampaign_CLIENT_DOESNT_EXIST_BAD_REQUEST() { //Arrange var request = new NewCampaignRequest { StartDate = "2020-07-01", EndDate = "2020-08-01", IdClient = 3, FromIdBuilding = 1, ToIdBuilding = 2 }; var targetErrorMessage = "Client with id " + request.IdClient + " DOESNT EXIST"; _clientsMockDbService.Setup(service => service.ClientExists(request.IdClient)) .Returns(false); //Act var actionResult = _campaignsController.AddNewCampaign(request); //Assrt var badRequestObjectResult = actionResult as BadRequestObjectResult; Assert.NotNull(badRequestObjectResult); var errorMessage = badRequestObjectResult.Value as string; Assert.Equal(targetErrorMessage, errorMessage); }
public IActionResult AddNewCampaign(NewCampaignRequest campaignRequest) { var errorList = ValidationHelper.ValidateNewCampaignRequest(campaignRequest); if (errorList.Count > 0) { return(BadRequest(errorList)); } try { var clientExists = _clientDbService.ClientExists(campaignRequest.IdClient); if (!clientExists) { throw new Exception("Client with id " + campaignRequest.IdClient + " DOESNT EXIST"); } var onSameStreet = _campaignsDbService.BuildingsOnSameStreet(campaignRequest.FromIdBuilding, campaignRequest.ToIdBuilding); if (!onSameStreet) { throw new Exception("Buildings MUST be located on the same street"); } BestPriceWrapper priceWrapper = _campaignsDbService.GetBestPrice(campaignRequest); var response = _campaignsDbService.AddNewCampaign(campaignRequest, priceWrapper); return(StatusCode(201, response)); } catch (Exception e) { return(BadRequest(e.Message)); } }
public Campaign CreateNewCampaign(NewCampaignRequest request) { var Id = DbContext.Campaign.Max(c => c.IdCampaign) + 1; var campaign = new Campaign { IdCampaign = Id, IdClient = request.IdClient, StartDate = request.StartDate, EndDate = request.EndDate, PricePerSquareMeter = request.PricePerSquareMeter, FromIdBuilding = request.FromIdBuilding, ToldBuilding = request.ToIdBuilding }; DbContext.Campaign.Add(campaign); DbContext.SaveChanges(); return(campaign); }
public void AddNewCampaign_SUCCESS() { //Arrange var request = new NewCampaignRequest { StartDate = "2020-07-01", EndDate = "2020-08-01", IdClient = 3, FromIdBuilding = 1, ToIdBuilding = 2 }; var priceWrapper = new BestPriceWrapper { FirstBanner = new BannerWrapper { BannerName = "abc" }, SecondBanner = new BannerWrapper { BannerName = "cba" }, TotalPrice = new decimal(1000) }; var targetResponse = new NewCampaignResponse { CampaignId = 100 }; _clientsMockDbService.Setup(service => service.ClientExists(request.IdClient)) .Returns(true); _campaignsMockDbService.Setup(service => service.BuildingsOnSameStreet(request.FromIdBuilding, request.ToIdBuilding)) .Returns(true); _campaignsMockDbService.Setup(service => service.GetBestPrice(request)) .Returns(priceWrapper); _campaignsMockDbService.Setup(service => service.AddNewCampaign(request, priceWrapper)) .Returns(targetResponse); //Act var actionResult = _campaignsController.AddNewCampaign(request); //Assrt var createdObjectResult = actionResult as ObjectResult; Assert.NotNull(createdObjectResult); Assert.Equal(201, createdObjectResult.StatusCode); var resultResponse = createdObjectResult.Value as NewCampaignResponse; Assert.Equal(targetResponse, resultResponse); }
public IActionResult AddNewCampaign([FromServices] IClientDal _dbService, NewCampaignRequest request) { var result = _dbService.AddCampaign(request); if (result == -1) { return(StatusCode(404, "Wrong buildings")); } else { return(Ok(result)); } }
public IActionResult NewCampaign(NewCampaignRequest request) { try { return(Created("", dbService.NewCampaign(request))); } catch (BuildingsNotExistException exc) { return(NotFound(exc)); } catch (BuildingsNotNearException exc) { return(BadRequest(exc)); } }
public NewCampaignResponse AddNewCampaign(NewCampaignRequest request, BestPriceWrapper wrapper) { int campaignId = CreateCampaign(request); CreateBanner(wrapper.FirstBanner, campaignId); CreateBanner(wrapper.SecondBanner, campaignId); return(new NewCampaignResponse { CampaignId = campaignId, FirstBanner = wrapper.FirstBanner, SecondBanner = wrapper.SecondBanner, TotalPrice = wrapper.TotalPrice }); }
public IActionResult NewCampaign(NewCampaignRequest req) { try { return(Created("", _dbService.NewCampaign(req))); } catch (BuildingsException exc) { return(NotFound(exc)); } catch (LocationException e) { return(BadRequest(e)); } }
public IActionResult CreateNewCampaign(NewCampaignRequest request) { List <Building> ListBuilings = DbService.CheckBuildings(request); if (ListBuilings != null) { ListBuilings = DbService.GetBuildings(ListBuilings); NewCampaignResponse campaignResponse = CalculateService.GeCampaignSetup(ListBuilings, request.PricePerSquareMeter); var campaign = DbService.CreateNewCampaign(request); DbService.CreateNewBanners(campaign.IdCampaign, campaignResponse); campaignResponse.Campaign = campaign; return(CreatedAtAction("CreateNewCampaign", campaignResponse)); } return(BadRequest("Nie poprawne dane budynków")); }
public void AddCampaign_CompleteRequest_Correct() { NewCampaignRequest request = new NewCampaignRequest { IdClient = 5, StartDate = DateTime.Today, EndDate = DateTime.Today.AddDays(15), PricePerSquareMeter = 45, FromIdBuilding = 2, ToIdBuilding = 5 }; var controller = new AdvertController(new SqlServerDbService(new s19205Context(), new ConfigurationBuilder().Build())); var result = controller.NewCampaign(request); Assert.IsNotNull(result); Assert.IsTrue(result is CreatedResult); }
public NewCampaignResponse NewCampaign(NewCampaignRequest request) { if (dbContext.Building.Count() < 2) { throw new BuildingsNotExistException("No buildings in the database!"); } var building1 = dbContext.Building.Where(b => b.IdBuilding.Equals(request.FromIdBuilding)).FirstOrDefault(); var building2 = dbContext.Building.Where(b => b.IdBuilding.Equals(request.ToIdBuilding)).FirstOrDefault(); if (!building1.Street.Equals(building2.Street)) { throw new BuildingsNotNearException("Buildings are not near with each other"); } Campaign camp = new Campaign { IdClient = request.IdClient, StartDate = request.StartDate, EndDate = request.EndDate, PricePerSquareMeter = request.PricePerSquareMeter, FromIdBuilding = request.FromIdBuilding, ToIdBuilding = request.ToIdBuilding }; dbContext.Campaign.Add(camp); dbContext.SaveChanges(); var buildings = dbContext.Building .Where(b => b.StreetNumber >= building1.StreetNumber && b.StreetNumber <= building2.StreetNumber) .OrderBy(a => a.StreetNumber) .ToList(); List <Banner> banners = calculateSize(buildings, camp, request.PricePerSquareMeter); dbContext.Banner.AddRange(banners.First(), banners.Last()); dbContext.SaveChanges(); return(new NewCampaignResponse { Campaign = camp, Banner1 = banners.First(), Banner2 = banners.Last() }); }
public void AddCampaign_CompleteRequest_Correct() { NewCampaignRequest request = new NewCampaignRequest { IdClient = 5, StartDate = DateTime.Today, EndDate = DateTime.Today.AddDays(15), PricePerSquareMeter = 45, FromIdBuilding = 2, ToIdBuilding = 5 }; var context = new ValidationContext(request, null, null); var results = new List <ValidationResult>(); var isModelValid = Validator.TryValidateObject(request, context, results, true); Assert.IsTrue(isModelValid); Assert.IsTrue(results.Count == 0); }
private int CreateCampaign(NewCampaignRequest request) { int campaignId = GetNewCampaignId(); _context.Campaign.Add(new Campaign { IdCampaign = campaignId, StartDate = Convert.ToDateTime(request.StartDate), EndDate = Convert.ToDateTime(request.EndDate), PricePerSquareMeter = request.PricePerSquareMeter, FromIdBuilding = request.FromIdBuilding, ToIdBuilding = request.ToIdBuilding, IdClient = request.IdClient }); _context.SaveChanges(); return(campaignId); }
public void AddNewCampaign_VALIDATION_ERROR_BAD_REQUEST() { //Arrange var request = new NewCampaignRequest { StartDate = "bad date", PricePerSquareMeter = 123, EndDate = "bad date" }; var targetErrorList = new List <Error>(); targetErrorList.Add( new Error { Field = "StartDate", InvalidValue = request.StartDate, Message = "Date doesnt match regex ^([12]\\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$)" } ); targetErrorList.Add( new Error { Field = "EndDate", InvalidValue = request.EndDate, Message = "Date doesnt match regex ^([12]\\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$)" } ); //Act var actionResult = _campaignsController.AddNewCampaign(request); //Assert var badRequestObjectResult = actionResult as BadRequestObjectResult; Assert.NotNull(badRequestObjectResult); var resultErrorList = badRequestObjectResult.Value as List <Error>; targetErrorList.Should().BeEquivalentTo(resultErrorList); _clientsMockDbService.Verify(service => service.ClientExists(It.IsAny <int>()), Times.Never); }
public List <Building> CheckBuildings(NewCampaignRequest CampaignRequest) { var list = new List <Building>(); if (DbContext.Building.Where(b => b.IdBuilding == CampaignRequest.FromIdBuilding).Any() && DbContext.Building.Where(b => b.IdBuilding == CampaignRequest.ToIdBuilding).Any()) { var b1 = GetBuilding(CampaignRequest.FromIdBuilding); var b2 = GetBuilding(CampaignRequest.ToIdBuilding); if (b1.City == b2.City && b1.Street == b2.Street) { list.Add(b1); list.Add(b2); return(list); } list = null; return(list); } list = null; return(list); }
public void AddNewCampaign_VALIDATION_ERROR_IS_START_BEFORE_END_BAD_REQUEST() { //Arrange var request = new NewCampaignRequest { StartDate = "2020-07-01", EndDate = "2020-01-01" }; var targetErrorList = new List <Error>(); targetErrorList.Add( new Error { Field = "StartDate", InvalidValue = request.StartDate, Message = "StartDate should be BEFORE EndDate" } ); //Act var actionResult = _campaignsController.AddNewCampaign(request); //Assert var badRequestObjectResult = actionResult as BadRequestObjectResult; Assert.NotNull(badRequestObjectResult); var resultErrorList = badRequestObjectResult.Value as List <Error>; targetErrorList.Should().BeEquivalentTo(resultErrorList); _clientsMockDbService.Verify(service => service.ClientExists(It.IsAny <int>()), Times.Never); _campaignsMockDbService.Verify(service => service.BuildingsOnSameStreet(It.IsAny <int>(), It.IsAny <int>()), Times.Never); _campaignsMockDbService.Verify(service => service.GetBestPrice(It.IsAny <NewCampaignRequest>()), Times.Never); _campaignsMockDbService.Verify( service => service.AddNewCampaign(It.IsAny <NewCampaignRequest>(), It.IsAny <BestPriceWrapper>()), Times.Never); }
public static List <Error> ValidateNewCampaignRequest(NewCampaignRequest request) { List <Error> errors = new List <Error>(); if (!IsDateValid(request.StartDate)) { errors.Add(new Error { Field = "StartDate", InvalidValue = request.StartDate, Message = "Date doesnt match regex ^([12]\\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$)" }); } if (!IsDateValid(request.EndDate)) { errors.Add(new Error { Field = "EndDate", InvalidValue = request.EndDate, Message = "Date doesnt match regex ^([12]\\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$)" }); } if (IsDateValid(request.StartDate) && IsDateValid(request.EndDate)) { if (!IsBefore(request.StartDate, request.EndDate)) { errors.Add(new Error { Field = "StartDate", InvalidValue = request.StartDate, Message = "StartDate should be BEFORE EndDate" }); } } return(errors); }
public double AddCampaign(NewCampaignRequest campaign) { CalculationService calculation = new CalculationService(); var B1 = db.Building.Where(b => b.IdBuilding == campaign.FromIdBuilding) .SingleOrDefault(); var B2 = db.Building.Where(b => b.IdBuilding == campaign.ToIdBuilding) .SingleOrDefault(); if (B1 == null || B2 == null || B2.Street != B1.Street) { return(-1); } var cmp = new Campaign { IdCampaign = db.Campaign.Max(e => e.IdCampaign) + 1, IdClient = campaign.IdClient, StartDate = campaign.StartDate, EndDate = campaign.EndDate, PricePerSquareMeter = campaign.PricePerSquareMeter, FromIdBuilding = campaign.FromIdBuilding, ToIdBuilding = campaign.ToIdBuilding }; db.Attach(cmp); db.Campaign.Add(cmp); db.SaveChanges(); var list = db.Building.Where(e => e.Street == B1.Street && ( (e.StreetNumber > B1.StreetNumber && e.StreetNumber < B2.StreetNumber) || (e.StreetNumber <B1.StreetNumber && e.StreetNumber> B2.StreetNumber) ) ).OrderBy(e => e.StreetNumber).ToList(); return(calculation.getPrice(list, campaign.PricePerSquareMeter)); }
public NewCampaignResponse NewCampaign(NewCampaignRequest req) { if (_context.Buildings.Count() < 2) { throw new BuildingsException("Count of buildings less than 2 or no buildings in the database"); } var buildingFirst = _context.Buildings.Where(p => p.IdBuilding.Equals(req.FromIdBuilding)).FirstOrDefault(); var buildingSecond = _context.Buildings.Where(p => p.IdBuilding.Equals(req.ToIdBuilding)).FirstOrDefault(); if (!buildingFirst.Street.Equals(buildingSecond.Street)) { throw new LocationException("Buildings are not on the same street"); } Campaign campaign = new Campaign { IdClient = req.IdCampaign, StartDate = req.StartDate, EndDate = req.EndDate, PricePerSquareMeter = req.PricePerSquareMeter, FromIdBuilding = req.FromIdBuilding, ToIdBuilding = req.ToIdBuilding }; _context.Campaigns.Add(campaign); _context.SaveChanges(); var buildings = _context.Buildings .Where(p => p.StreetNumber >= buildingFirst.StreetNumber && p.StreetNumber <= buildingSecond.StreetNumber) .OrderBy(p => p.StreetNumber) .ToList(); List <Banner> banners = new List <Banner> { new Banner { Name = 123, Price = ((buildingFirst.Height * Math.Abs(buildingFirst.StreetNumber - buildingSecond.StreetNumber) * req.PricePerSquareMeter)), IdCampaign = campaign.IdCampaign, Area = (buildingFirst.Height * Math.Abs(buildingFirst.StreetNumber - buildingSecond.StreetNumber)) }, new Banner { Name = 456, Price = ((buildingSecond.Height * Math.Abs(buildingSecond.StreetNumber - buildingFirst.StreetNumber) * req.PricePerSquareMeter)), IdCampaign = campaign.IdCampaign, Area = (buildingSecond.Height * Math.Abs(buildingSecond.StreetNumber - buildingFirst.StreetNumber)) } }; _context.Banners.AddRange(banners.First(), banners.Last()); _context.SaveChanges(); return(new NewCampaignResponse { Campaign = campaign, BannerFirst = banners.First(), BannerSecond = banners.Last() }); }
public BestPriceWrapper GetBestPrice(NewCampaignRequest request) { var buildings = GetAllBuildingsInBetween(request.FromIdBuilding, request.ToIdBuilding); return(CalculateTotalPrice(buildings, request.PricePerSquareMeter)); }