Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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"));
        }
Beispiel #5
0
        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));
        }