public async void PostCannotAddDeliveryForSameOrderTest() { var controller = new DeliveryController(deliveryService, mapper);; var model = new CreateDeliveryViewModel() { OrderId = 1, }; var response = await controller.Post(model); var okResult = response as BadRequestObjectResult; Assert.NotNull(okResult); Assert.Equal(400, okResult.StatusCode); Assert.NotNull(okResult.Value); }
public async void PostCannotAddDeliveryForForExpiredEndTimeTest() { var controller = new DeliveryController(deliveryService, mapper);; var model = new CreateDeliveryViewModel() { OrderId = 5, StartTime = DateTime.Now, EndTime = DateTime.Now.AddHours(-5) }; var response = await controller.Post(model); var okResult = response as BadRequestObjectResult; Assert.NotNull(okResult); Assert.Equal(400, okResult.StatusCode); Assert.NotNull(okResult.Value); }
public async void PostWithRelatedDataTest() { var relatedDeliveryService = new DeliveryService(dbSqlite); dbSqlite.Partners.Add(new Partner() { Name = "Ikea", Password = "******" }); dbSqlite.Users.Add(new User { FirstName = "John", LastName = "Doe", Email = "*****@*****.**", Address = "Test Street, London", Phone = "0845345", Password = "******" }); dbSqlite.SaveChanges(); var controller = new DeliveryController(relatedDeliveryService, mapper); var model = new CreateDeliveryViewModel() { OrderId = 30, RecipientId = 1, PartnerId = 1, StartTime = DateTime.Now.AddDays(2).AddHours(7), EndTime = DateTime.Now.AddDays(2).AddHours(10), }; var response = await controller.Post(model); var okResult = response as OkObjectResult; Assert.NotNull(okResult); Assert.Equal(200, okResult.StatusCode); Assert.NotNull(okResult.Value); var delivery = okResult.Value as DeliveryViewModel; Assert.NotEqual(0, delivery.Id); Assert.NotNull(delivery.AccessWindow); Assert.NotNull(delivery.Recipient); Assert.NotNull(delivery.Order); }
public IActionResult Create(CreateDeliveryViewModel input) { if (!ModelState.IsValid) { var model = new Delivery { DeliveryDate = DateTime.UtcNow }; ViewBag.Suppliers = SetSuppliersToSelectListItems(); ViewBag.Lots = SetLotsToSelectListItems(); return(this.View(model)); } var dlivery = _deliveriesService.Create(input.DeliveryDate.ToString("dd/MM/yyyy"), input.SupplierName, input.LotSerialNumber); return(this.Redirect($"/Deliveries/All")); }
public async Task <IActionResult> Post([FromBody] CreateDeliveryViewModel model) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (await deliveryService.DeliveryExists(model.OrderId)) { return(BadRequest("Delivery for this order already exists")); } if (DateTime.Now > model.EndTime) { return(BadRequest($"{nameof(model.EndTime)} is already expired")); } if (model.StartTime > model.EndTime) { return(BadRequest($"{nameof(model.StartTime)} cannot be greater than {nameof(model.EndTime)}")); } var newDelivery = mapper.Map <Delivery>(model); var delivery = await deliveryService.CreateDelivery(newDelivery); // TODO: inject using constructor integration require restructuring of the application // TODO: messages should be sent to specific user channels // TODO: also on each update of delivery a message should be published to relevent partner or user var ably = new AblyRealtime("E9RI8g.3I-QYw:F0Q-ZJK5Xwm2bGvf"); var channel = ably.Channels.Get("Users"); // Publish a message to the test channel channel.Publish("Delivery Add", $"A new delivery is added"); // TODO: needs a better strategy to return the complete delivery view model var deliveryModel = mapper.Map <DeliveryViewModel>(await deliveryService.GetDeliveryById(delivery.Id)); return(Ok(deliveryModel)); }