Exemple #1
0
        public async Task Put_Returns204_IfDeliveryIdExists()
        {
            // Arrange
            var deliveryRepository = new Mock <IDeliveryRepository>();

            deliveryRepository.Setup(r => r.CreateAsync(It.IsAny <InternalDelivery>())).Throws(new DuplicateResourceException("dupe", null));
            deliveryRepository.Setup(r => r.UpdateAsync(It.IsAny <string>(), It.IsAny <InternalDelivery>())).Returns(Task.CompletedTask);

            var loggerFactory = new Mock <ILoggerFactory>();

            loggerFactory.Setup(f => f.CreateLogger(It.IsAny <string>()))
            .Returns(new Mock <ILogger <DeliveriesController> >().Object);

            var target = new DeliveriesController(deliveryRepository.Object,
                                                  new Mock <INotifyMeRequestRepository>().Object,
                                                  new Mock <INotificationService>().Object,
                                                  new Mock <IDeliveryTrackingEventRepository>().Object,
                                                  loggerFactory.Object);

            // Act
            var result = await target.Put(new Delivery("existingdeliveryid", new UserAccount("user", "account"), new Location(0, 0, 0), new Location(2, 2, 2), "deadline", true, ConfirmationType.FingerPrint, "drone"), "existingdeliveryid");

            var statusCodeResult = (StatusCodeResult)result;

            // Assert
            Assert.IsNotNull(statusCodeResult);
            Assert.AreEqual(204, statusCodeResult.StatusCode);
        }
Exemple #2
0
        public async Task Put_AddscreatedDeliveryEvent()
        {
            // Arrange
            DeliveryTrackingEvent createdDelivery = null;
            var deliveryStatusEventRepository     = new Mock <IDeliveryTrackingEventRepository>();

            deliveryStatusEventRepository.Setup(r => r.AddAsync(It.IsAny <DeliveryTrackingEvent>()))
            .Returns(Task.CompletedTask)
            .Callback <DeliveryTrackingEvent>(e => createdDelivery = e);

            var loggerFactory = new Mock <ILoggerFactory>();

            loggerFactory.Setup(f => f.CreateLogger(It.IsAny <string>())).Returns(new Mock <ILogger>().Object);

            var target = new DeliveriesController(new Mock <IDeliveryRepository>().Object,
                                                  new Mock <INotifyMeRequestRepository>().Object,
                                                  new Mock <INotificationService>().Object,
                                                  deliveryStatusEventRepository.Object,
                                                  loggerFactory.Object);
            // Act
            var result = await target.Put(new Delivery("deliveryid", new UserAccount("user", "account"), new Location(0, 0, 0), new Location(2, 2, 2), "deadline", true, ConfirmationType.FingerPrint, "drone"), "deliveryid");

            var createdAtRouteResult = (CreatedAtRouteResult)result;

            // Assert
            Assert.AreEqual(201, createdAtRouteResult.StatusCode);
            Assert.IsNotNull(createdAtRouteResult.Value);
            Assert.IsNotNull(createdDelivery);
            Assert.AreEqual(DeliveryStage.Created, createdDelivery.Stage);
            deliveryStatusEventRepository.VerifyAll();
        }
Exemple #3
0
        public async Task GetOwner_ReturnsOwner()
        {
            // Arrange
            var deliveryRepository = new Mock <IDeliveryRepository>();

            deliveryRepository.Setup(r => r.GetAsync(It.IsAny <string>()))
            .ReturnsAsync(delivery);

            var loggerFactory = new Mock <ILoggerFactory>();

            loggerFactory.Setup(f => f.CreateLogger(It.IsAny <string>())).Returns(new Mock <ILogger>().Object);

            var target = new DeliveriesController(deliveryRepository.Object,
                                                  new Mock <INotifyMeRequestRepository>().Object,
                                                  new Mock <INotificationService>().Object,
                                                  new Mock <IDeliveryTrackingEventRepository>().Object,
                                                  loggerFactory.Object);

            // Act
            var result = await target.GetOwner("deliveryid") as OkObjectResult;

            // Assert
            Assert.IsNotNull(result);
            Assert.AreEqual(userAccount, result.Value);
        }
        public async Task Cannot_add_Delivery_when_it_already_exists()
        {
            const string DELIVERY_ID     = "DL001";
            const string SITE_CODE       = "SITE001";
            const int    ORDER_REFERENCE = 1;
            const string STATUS          = "ON PROCESS";

            using (var context = new ProcurementDbContext(ContextOptions))
            {
                DeliveriesController deliveriesController = new DeliveriesController(context);

                DeliveryDTO deliveryDto = new DeliveryDTO {
                    DeliveryId = DELIVERY_ID, SiteCode = SITE_CODE, PurchaseOrder = ORDER_REFERENCE, DeliveryStatus = STATUS
                };

                try
                {
                    await deliveriesController.PostDelivery(deliveryDto);
                }
                catch (Exception exception)
                {
                    Assert.NotNull(exception);
                    return;
                }

                Assert.True(false);
            }
        }
Exemple #5
0
        public async Task GetSummry_ReturnsSummary()
        {
            const int TestDeliveryCount = 5000;

            // Arrange
            var deliveryRepository = new Mock <IDeliveryRepository>();

            deliveryRepository.Setup(r => r.GetDeliveryCountAsync("owner", 2019, 01))
            .ReturnsAsync(TestDeliveryCount)
            .Verifiable();

            var loggerFactory = new Mock <ILoggerFactory>();

            loggerFactory.Setup(f => f.CreateLogger(It.IsAny <string>())).Returns(new Mock <ILogger>().Object);

            var target = new DeliveriesController(deliveryRepository.Object,
                                                  new Mock <INotifyMeRequestRepository>().Object,
                                                  new Mock <INotificationService>().Object,
                                                  new Mock <IDeliveryTrackingEventRepository>().Object,
                                                  loggerFactory.Object);

            // Act
            var result = await target.GetSummary("owner", 2019, 01) as OkObjectResult;

            // Assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result.Value, typeof(DeliveriesSummary));
            Assert.AreEqual(TestDeliveryCount, ((DeliveriesSummary)result.Value).Count);
            deliveryRepository.VerifyAll();
        }
Exemple #6
0
        public DeliveriesControllerTests()
        {
            _mockDeliveryService  = new Mock <IDeliveryService>();
            _mockExecutionContext = new Mock <IExecutionContext>();
            var mockLogger = new Mock <ILogger <DeliveriesController> >();

            _deliveriesController = new DeliveriesController(_mockDeliveryService.Object, _mockExecutionContext.Object,
                                                             mockLogger.Object);
        }
        public async Task Delete_SendsMessageWithCancelledEvent()
        {
            // Arrange
            InternalDelivery    cancelledDelivery = null;
            DeliveryStatusEvent cancelEvent       = null;

            DeliveryStatusEvent[] allEvents = null;

            var deliveryRepository = new Mock <IDeliveryRepository>();

            deliveryRepository.Setup(r => r.GetAsync("deliveryid")).ReturnsAsync(delivery);

            var deliveryHistoryService = new Mock <IDeliveryHistoryService>();

            deliveryHistoryService.Setup(r => r.CancelAsync(It.IsAny <InternalDelivery>(), It.IsAny <DeliveryStatusEvent[]>()))
            .Returns(Task.CompletedTask)
            .Callback <InternalDelivery, DeliveryStatusEvent[]>((d, es) =>
            {
                cancelledDelivery = d;
                allEvents         = es;
            });

            var deliveryStatusEventRepository = new Mock <IDeliveryStatusEventRepository>();

            deliveryStatusEventRepository.Setup(r => r.AddAsync(It.IsAny <DeliveryStatusEvent>()))
            .Returns(Task.CompletedTask)
            .Callback <DeliveryStatusEvent>(e => cancelEvent = e);

            deliveryStatusEventRepository.Setup(r => r.GetByDeliveryIdAsync("deliveryid"))
            .ReturnsAsync(new ReadOnlyCollection <DeliveryStatusEvent>(new List <DeliveryStatusEvent>()
            {
                cancelEvent
            }));

            var loggerFactory = new Mock <ILoggerFactory>();

            loggerFactory.Setup(f => f.CreateLogger(It.IsAny <string>())).Returns(new Mock <ILogger>().Object);

            var target = new DeliveriesController(deliveryRepository.Object,
                                                  new Mock <INotifyMeRequestRepository>().Object,
                                                  new Mock <INotificationService>().Object,
                                                  deliveryHistoryService.Object,
                                                  deliveryStatusEventRepository.Object,
                                                  loggerFactory.Object);
            // Act
            await target.Delete("deliveryid");

            // Assert
            Assert.IsNotNull(cancelEvent);
            Assert.AreEqual("deliveryid", cancelEvent.DeliveryId);
            Assert.AreEqual(DeliveryEventType.Cancelled, cancelEvent.Stage);
            deliveryRepository.VerifyAll();
            deliveryHistoryService.Verify(s => s.CancelAsync(delivery, allEvents), Times.Once);
        }
        public async Task Can_get_all_Delivery_details_in_database()
        {
            using (var context = new ProcurementDbContext(ContextOptions))
            {
                DeliveriesController deliveriesController = new DeliveriesController(context);

                var result = await deliveriesController.GetDeliveries();

                var viewResult = Assert.IsType <ActionResult <IEnumerable <Delivery> > >(result);
                var delivery   = Assert.IsType <List <Delivery> >(viewResult.Value);

                Assert.Single(delivery);
            }
        }
        public async Task Confirm_DeletesDeliveryLogically()
        {
            // Arrange
            InternalDelivery    confirmedDelivery = null;
            DeliveryStatusEvent completeEvent     = null;

            var deliveryRepository = new Mock <IDeliveryRepository>();

            deliveryRepository.Setup(r => r.GetAsync("deliveryid")).ReturnsAsync(delivery);
            deliveryRepository.Setup(r => r.DeleteAsync("deliveryid", It.IsAny <InternalDelivery>()))
            .Returns(Task.CompletedTask)
            .Callback <string, InternalDelivery>((i, d) => confirmedDelivery = d);

            var deliveryStatusEventRepository = new Mock <IDeliveryStatusEventRepository>();

            deliveryStatusEventRepository.Setup(r => r.AddAsync(It.IsAny <DeliveryStatusEvent>()))
            .Returns(Task.CompletedTask)
            .Callback <DeliveryStatusEvent>(e => completeEvent = e);

            deliveryStatusEventRepository.Setup(r => r.GetByDeliveryIdAsync("deliveryid"))
            .ReturnsAsync(new ReadOnlyCollection <DeliveryStatusEvent>(new List <DeliveryStatusEvent>()
            {
                completeEvent
            }));

            var loggerFactory = new Mock <ILoggerFactory>();

            loggerFactory.Setup(f => f.CreateLogger(It.IsAny <string>())).Returns(new Mock <ILogger>().Object);

            var target = new DeliveriesController(deliveryRepository.Object,
                                                  new Mock <INotifyMeRequestRepository>().Object,
                                                  new Mock <INotificationService>().Object,
                                                  new Mock <IDeliveryHistoryService>().Object,
                                                  deliveryStatusEventRepository.Object,
                                                  loggerFactory.Object);
            var location     = new Location(1, 2, 3);
            var confirmation = new Confirmation(new DateTimeStamp("datetimevalue"),
                                                location,
                                                ConfirmationType.Picture,
                                                "confirmationblob");

            // Act
            var result = await target.Confirm("deliveryid", confirmation) as OkResult;

            // Assert
            Assert.IsNotNull(result);
            deliveryRepository.Verify(r => r.DeleteAsync("deliveryid", confirmedDelivery));
            Assert.AreEqual(location, confirmedDelivery.Dropoff);
        }
        public async Task GetStatus_Returns404_IfDeliveryIdNotValid()
        {
            // Arrange
            var logger = new Mock <ILogger <DeliveriesController> >();

            var target = new DeliveriesController(new Mock <IDeliveryRepository>().Object,
                                                  logger.Object);

            // Act
            var result = await target.GetStatus("invaliddeliveryid") as NotFoundResult;

            // Assert
            Assert.NotNull(result);
            Assert.Equal(404, result.StatusCode);
        }
        public async Task Should_not_return_Delivery_when_unavailable()
        {
            const string DELIVERY_ID = "DL0001";

            using (var context = new ProcurementDbContext(ContextOptions))
            {
                DeliveriesController deliveriesController = new DeliveriesController(context);

                var result = await deliveriesController.GetDelivery(DELIVERY_ID);

                var viewResult = Assert.IsType <ActionResult <Delivery> >(result);
                Assert.IsNotType <Delivery>(viewResult.Value);
                var response = Assert.IsType <NotFoundResult>(viewResult.Result);
                Assert.Equal(404, response.StatusCode);
            }
        }
        public async Task Can_get_Delivery_By_Id()
        {
            const string DELIVERY_ID = "DL001";

            using (var context = new ProcurementDbContext(ContextOptions))
            {
                DeliveriesController deliveriesController = new DeliveriesController(context);

                var result = await deliveriesController.GetDelivery(DELIVERY_ID);

                var viewResult = Assert.IsType <ActionResult <Delivery> >(result);
                var delivery   = Assert.IsType <Delivery>(viewResult.Value);

                Assert.Equal(DELIVERY_ID, delivery.DeliveryId);
            }
        }
Exemple #13
0
        public async Task Confirm_AddsDeliveryCompletedEvent()
        {
            // Arrange
            DeliveryTrackingEvent completedDelivery = null;

            var deliveryRepository = new Mock <IDeliveryRepository>();

            deliveryRepository.Setup(r => r.GetAsync("deliveryid")).ReturnsAsync(delivery);

            var deliveryStatusEventRepository = new Mock <IDeliveryTrackingEventRepository>();

            deliveryStatusEventRepository.Setup(r => r.AddAsync(It.IsAny <DeliveryTrackingEvent>()))
            .Returns(Task.CompletedTask)
            .Callback <DeliveryTrackingEvent>(e => completedDelivery = e);

            deliveryStatusEventRepository.Setup(r => r.GetByDeliveryIdAsync("deliveryid"))
            .ReturnsAsync(new ReadOnlyCollection <DeliveryTrackingEvent>(new List <DeliveryTrackingEvent>()
            {
                completedDelivery
            }));

            var loggerFactory = new Mock <ILoggerFactory>();

            loggerFactory.Setup(f => f.CreateLogger(It.IsAny <string>())).Returns(new Mock <ILogger>().Object);

            var target = new DeliveriesController(deliveryRepository.Object,
                                                  new Mock <INotifyMeRequestRepository>().Object,
                                                  new Mock <INotificationService>().Object,
                                                  deliveryStatusEventRepository.Object,
                                                  loggerFactory.Object);

            var confirmation = new Confirmation(new DateTimeStamp("datetimevalue"),
                                                new Location(1, 2, 3),
                                                ConfirmationType.Picture,
                                                "confirmationblob");

            // Act
            var result = await target.Confirm("deliveryid", confirmation) as OkResult;

            // Assert
            Assert.IsNotNull(result);
            Assert.IsNotNull(completedDelivery);
            Assert.AreEqual(DeliveryStage.Completed, completedDelivery.Stage);
        }
Exemple #14
0
        public async Task Confirm_Returns404_IfDeliveryIdNotValid()
        {
            // Arrange
            var loggerFactory = new Mock <ILoggerFactory>();

            loggerFactory.Setup(f => f.CreateLogger(It.IsAny <string>())).Returns(new Mock <ILogger>().Object);

            var target = new DeliveriesController(new Mock <IDeliveryRepository>().Object,
                                                  new Mock <INotifyMeRequestRepository>().Object,
                                                  new Mock <INotificationService>().Object,
                                                  new Mock <IDeliveryTrackingEventRepository>().Object,
                                                  loggerFactory.Object);
            // Act
            var result = await target.Confirm("invaliddeliveryid", null) as NotFoundResult;

            // Assert
            Assert.IsNotNull(result);
            Assert.AreEqual(404, result.StatusCode);
        }
        public async Task Patch_UpdatesCache()
        {
            // Arrange
            InternalDelivery updatedDelivery = null;
            var rescheduledDelivery          = new RescheduledDelivery(new Location(2, 2, 2),
                                                                       new Location(3, 3, 3),
                                                                       "newdeadline");

            var deliveryRepository = new Mock <IDeliveryRepository>();

            deliveryRepository.Setup(r => r.GetAsync("deliveryid")).ReturnsAsync(delivery);
            deliveryRepository.Setup(r => r.UpdateAsync("deliveryid", It.IsAny <InternalDelivery>()))
            .Returns(Task.CompletedTask)
            .Callback((string i, InternalDelivery d) => updatedDelivery = d);

            var loggerFactory = new Mock <ILoggerFactory>();

            loggerFactory.Setup(f => f.CreateLogger(It.IsAny <string>())).Returns(new Mock <ILogger>().Object);

            var target = new DeliveriesController(deliveryRepository.Object,
                                                  new Mock <INotifyMeRequestRepository>().Object,
                                                  new Mock <INotificationService>().Object,
                                                  new Mock <IDeliveryHistoryService>().Object,
                                                  new Mock <IDeliveryStatusEventRepository>().Object,
                                                  loggerFactory.Object);

            // Act
            await target.Patch("deliveryid", rescheduledDelivery);

            // Assert
            //unchanged values
            Assert.AreEqual("deliveryid", updatedDelivery.Id);
            Assert.AreEqual("userid", updatedDelivery.Owner.UserId);

            //updated values
            Assert.AreEqual(2, updatedDelivery.Pickup.Altitude);
            Assert.AreEqual(3, updatedDelivery.Dropoff.Altitude);
            Assert.AreEqual("newdeadline", updatedDelivery.Deadline);

            deliveryRepository.VerifyAll();
        }
        public async Task Put_AddsToRepository()
        {
            // Arrange
            var deliveryRepository = new Mock <IDeliveryRepository>();

            deliveryRepository.Setup(r => r.CreateAsync(It.IsAny <Delivery>())).ReturnsAsync(true);

            var logger = new Mock <ILogger <DeliveriesController> >();

            var target = new DeliveriesController(deliveryRepository.Object,
                                                  logger.Object);
            // Act
            var result = await target.Put(new Delivery("deliveryid", new UserAccount("user", "account"), new Location(0, 0, 0), new Location(2, 2, 2), "deadline", true, ConfirmationType.FingerPrint, "drone"), "deliveryid");

            var createdAtRouteResult = (CreatedAtRouteResult)result;

            // Assert
            Assert.Equal(201, createdAtRouteResult.StatusCode);
            Assert.NotNull(createdAtRouteResult.Value);
            deliveryRepository.VerifyAll();
        }
        public async Task Patch_AddsRescheduledDeliveryEvent()
        {
            // Arrange
            DeliveryStatusEvent rescheduledEvent = null;

            var rescheduledDelivery = new RescheduledDelivery(new Location(2, 2, 2),
                                                              new Location(3, 3, 3),
                                                              "newdeadline");

            var deliveryRepository = new Mock <IDeliveryRepository>();

            deliveryRepository.Setup(r => r.GetAsync("deliveryid")).ReturnsAsync(delivery);

            var deliveryStatusEventRepository = new Mock <IDeliveryStatusEventRepository>();

            deliveryStatusEventRepository.Setup(r => r.AddAsync(It.IsAny <DeliveryStatusEvent>()))
            .Returns(Task.CompletedTask)
            .Callback <DeliveryStatusEvent>(e => rescheduledEvent = e);

            var loggerFactory = new Mock <ILoggerFactory>();

            loggerFactory.Setup(f => f.CreateLogger(It.IsAny <string>())).Returns(new Mock <ILogger>().Object);

            var target = new DeliveriesController(deliveryRepository.Object,
                                                  new Mock <INotifyMeRequestRepository>().Object,
                                                  new Mock <INotificationService>().Object,
                                                  new Mock <IDeliveryHistoryService>().Object,
                                                  deliveryStatusEventRepository.Object,
                                                  loggerFactory.Object);

            // Act
            var result = await target.Patch("deliveryid", rescheduledDelivery) as OkResult;

            // Assert
            Assert.IsNotNull(result);
            Assert.IsNotNull(rescheduledEvent);
            Assert.AreEqual(DeliveryEventType.Rescheduled, rescheduledEvent.Stage);
            deliveryStatusEventRepository.VerifyAll();
        }
        public async Task Put_Returns204_IfDeliveryIdExists()
        {
            // Arrange
            var deliveryRepository = new Mock <IDeliveryRepository>();

            deliveryRepository.Setup(r => r.CreateAsync(It.IsAny <Delivery>())).ReturnsAsync(false);
            deliveryRepository.Setup(r => r.UpdateAsync(It.IsAny <string>(), It.IsAny <Delivery>())).Returns(Task.CompletedTask);

            var logger = new Mock <ILogger <DeliveriesController> >();

            var target = new DeliveriesController(deliveryRepository.Object,
                                                  logger.Object);

            // Act
            var result = await target.Put(new Delivery("existingdeliveryid", new UserAccount("user", "account"), new Location(0, 0, 0), new Location(2, 2, 2), "deadline", true, ConfirmationType.FingerPrint, "drone"), "existingdeliveryid");

            var statusCodeResult = (StatusCodeResult)result;

            // Assert
            Assert.NotNull(statusCodeResult);
            Assert.Equal(204, statusCodeResult.StatusCode);
        }
Exemple #19
0
        public async Task Delete_SendsMessageWithCancelledTrackingEvent()
        {
            // Arrange
            DeliveryTrackingEvent cancelledDelivery = null;

            var deliveryRepository = new Mock <IDeliveryRepository>();

            deliveryRepository.Setup(r => r.GetAsync("deliveryid")).ReturnsAsync(delivery);

            var deliveryStatusEventRepository = new Mock <IDeliveryTrackingEventRepository>();

            deliveryStatusEventRepository.Setup(r => r.AddAsync(It.IsAny <DeliveryTrackingEvent>()))
            .Returns(Task.CompletedTask)
            .Callback <DeliveryTrackingEvent>(e => cancelledDelivery = e);

            deliveryStatusEventRepository.Setup(r => r.GetByDeliveryIdAsync("deliveryid"))
            .ReturnsAsync(new ReadOnlyCollection <DeliveryTrackingEvent>(new List <DeliveryTrackingEvent>()
            {
                cancelledDelivery
            }));

            var loggerFactory = new Mock <ILoggerFactory>();

            loggerFactory.Setup(f => f.CreateLogger(It.IsAny <string>())).Returns(new Mock <ILogger>().Object);

            var target = new DeliveriesController(deliveryRepository.Object,
                                                  new Mock <INotifyMeRequestRepository>().Object,
                                                  new Mock <INotificationService>().Object,
                                                  deliveryStatusEventRepository.Object,
                                                  loggerFactory.Object);
            // Act
            await target.Delete("deliveryid");

            // Assert
            Assert.IsNotNull(cancelledDelivery);
            Assert.AreEqual("deliveryid", cancelledDelivery.DeliveryId);
            Assert.AreEqual(DeliveryStage.Cancelled, cancelledDelivery.Stage);
            deliveryRepository.VerifyAll();
        }
        public async Task Can_add_new_Delivery_when_it_not_existing()
        {
            const string DELIVERY_ID     = "DL002";
            const string SITE_CODE       = "SITE001";
            const int    ORDER_REFERENCE = 1;
            const string STATUS          = "ON PROCESS";

            using (var context = new ProcurementDbContext(ContextOptions))
            {
                DeliveriesController deliveriesController = new DeliveriesController(context);

                DeliveryDTO deliveryDto = new DeliveryDTO {
                    DeliveryId = DELIVERY_ID, SiteCode = SITE_CODE, PurchaseOrder = ORDER_REFERENCE, DeliveryStatus = STATUS
                };

                var result = await deliveriesController.PostDelivery(deliveryDto);

                var viewResult   = Assert.IsType <ActionResult <Delivery> >(result);
                var actionResult = Assert.IsType <CreatedAtActionResult>(viewResult.Result);
                var delivery     = Assert.IsType <Delivery>(actionResult.Value);
                Assert.Equal(DELIVERY_ID, delivery.DeliveryId);
            }
        }
        public async Task NotifyMe_AddsNotifyMeRequest()
        {
            // Arrange
            InternalNotifyMeRequest savedNotifyMeRequest = null;

            var deliveryRepository = new Mock <IDeliveryRepository>();

            deliveryRepository.Setup(r => r.GetAsync("deliveryid")).ReturnsAsync(delivery);

            var notifyMeRequestRepository = new Mock <INotifyMeRequestRepository>();

            notifyMeRequestRepository.Setup(r => r.AddAsync(It.IsAny <InternalNotifyMeRequest>()))
            .Returns(Task.CompletedTask)
            .Callback <InternalNotifyMeRequest>(r => savedNotifyMeRequest = r);

            var loggerFactory = new Mock <ILoggerFactory>();

            loggerFactory.Setup(f => f.CreateLogger(It.IsAny <string>())).Returns(new Mock <ILogger>().Object);

            var target = new DeliveriesController(deliveryRepository.Object,
                                                  notifyMeRequestRepository.Object,
                                                  new Mock <INotificationService>().Object,
                                                  new Mock <IDeliveryHistoryService>().Object,
                                                  new Mock <IDeliveryStatusEventRepository>().Object,
                                                  loggerFactory.Object);

            var notifyMeRequest = new NotifyMeRequest("*****@*****.**", "1234567");

            // Act
            var result = await target.NotifyMe("deliveryid", notifyMeRequest) as NoContentResult;

            // Assert
            Assert.IsNotNull(result);
            Assert.AreEqual("deliveryid", savedNotifyMeRequest.DeliveryId);
            Assert.AreEqual("*****@*****.**", savedNotifyMeRequest.EmailAddress);
            Assert.AreEqual("1234567", savedNotifyMeRequest.SMS);
        }
        public async Task Confirm_SendsMessageCompleteToDeliveryHistory()
        {
            // Arrange
            InternalDelivery     confirmedDelivery = null;
            InternalConfirmation sentConfirmation  = null;
            DeliveryStatusEvent  completeEvent     = null;

            DeliveryStatusEvent[] allEvents = null;

            var deliveryRepository = new Mock <IDeliveryRepository>();

            deliveryRepository.Setup(r => r.GetAsync("deliveryid")).ReturnsAsync(delivery);

            var notifyMeRequestRepository = new Mock <INotifyMeRequestRepository>();

            notifyMeRequestRepository.Setup(r => r.GetAllByDeliveryIdAsync("deliveryid"))
            .ReturnsAsync(new List <InternalNotifyMeRequest>());

            var deliveryStatusEventRepository = new Mock <IDeliveryStatusEventRepository>();

            deliveryStatusEventRepository.Setup(r => r.AddAsync(It.IsAny <DeliveryStatusEvent>()))
            .Returns(Task.CompletedTask)
            .Callback <DeliveryStatusEvent>(e => completeEvent = e);

            deliveryStatusEventRepository.Setup(r => r.GetByDeliveryIdAsync("deliveryid"))
            .ReturnsAsync(new ReadOnlyCollection <DeliveryStatusEvent>(new List <DeliveryStatusEvent>()
            {
                completeEvent
            }));

            var deliveryHistoryService = new Mock <IDeliveryHistoryService>();

            deliveryHistoryService.Setup(r => r.CompleteAsync(It.IsAny <InternalDelivery>(), It.IsAny <InternalConfirmation>(), It.IsAny <DeliveryStatusEvent[]>()))
            .Returns(Task.CompletedTask)
            .Callback <InternalDelivery, InternalConfirmation, DeliveryStatusEvent[]>((d, c, es) =>
            {
                confirmedDelivery = d;
                sentConfirmation  = c;
                allEvents         = es;
            });

            var loggerFactory = new Mock <ILoggerFactory>();

            loggerFactory.Setup(f => f.CreateLogger(It.IsAny <string>())).Returns(new Mock <ILogger>().Object);

            var target = new DeliveriesController(deliveryRepository.Object,
                                                  notifyMeRequestRepository.Object,
                                                  new Mock <INotificationService>().Object,
                                                  deliveryHistoryService.Object,
                                                  deliveryStatusEventRepository.Object,
                                                  loggerFactory.Object);

            var confirmation = new Confirmation(new DateTimeStamp("datetimevalue"),
                                                new Location(1, 2, 3),
                                                ConfirmationType.Picture,
                                                "confirmationblob");

            // Act
            var result = await target.Confirm("deliveryid", confirmation) as OkResult;

            // Assert
            Assert.IsNotNull(result);
            Assert.AreEqual("datetimevalue", sentConfirmation.DateTime.DateTimeValue);
            Assert.AreEqual(1, sentConfirmation.GeoCoordinates.Altitude);
            Assert.AreEqual(2, sentConfirmation.GeoCoordinates.Latitude);
            Assert.AreEqual(3, sentConfirmation.GeoCoordinates.Longitude);
            Assert.AreEqual(ConfirmationType.Picture, sentConfirmation.ConfirmationType);
            Assert.AreEqual("confirmationblob", sentConfirmation.ConfirmationBlob);
            deliveryHistoryService.Verify(s => s.CompleteAsync(confirmedDelivery, It.IsAny <InternalConfirmation>(), allEvents), Times.Once);
        }
 public DeliveriesControllerTests()
 {
     _service    = new Mock <IDeliveryService>();
     _controller = new DeliveriesController(_service.Object);
 }
Exemple #24
0
        public async Task Confirm_SendsNotifications()
        {
            // Arrange
            DeliveryTrackingEvent completedDelivery = null;

            var deliveryRepository = new Mock <IDeliveryRepository>();

            deliveryRepository.Setup(r => r.GetAsync("deliveryid")).ReturnsAsync(delivery);

            var notifyMeRequests = new List <InternalNotifyMeRequest>();

            notifyMeRequests.Add(new InternalNotifyMeRequest
            {
                DeliveryId = "deliveryid", EmailAddress = "*****@*****.**", SMS = "1111111"
            });
            notifyMeRequests.Add(new InternalNotifyMeRequest
            {
                DeliveryId = "deliveryid", EmailAddress = "*****@*****.**", SMS = "2222222"
            });
            var notifyMeRequestRepository = new Mock <INotifyMeRequestRepository>();

            notifyMeRequestRepository.Setup(r => r.GetAllByDeliveryIdAsync("deliveryid"))
            .ReturnsAsync(notifyMeRequests);

            int notificationServiceCalled = 0;
            var notificationService       = new Mock <INotificationService>();

            notificationService.Setup(s => s.SendNotificationsAsync(It.IsAny <InternalNotifyMeRequest>()))
            .Returns(Task.CompletedTask)
            .Callback(() => notificationServiceCalled++);


            var deliveryStatusEventRepository = new Mock <IDeliveryTrackingEventRepository>();

            deliveryStatusEventRepository.Setup(r => r.GetByDeliveryIdAsync("deliveryid"))
            .ReturnsAsync(new ReadOnlyCollection <DeliveryTrackingEvent>(new List <DeliveryTrackingEvent>()
            {
                completedDelivery
            }));

            var loggerFactory = new Mock <ILoggerFactory>();

            loggerFactory.Setup(f => f.CreateLogger(It.IsAny <string>())).Returns(new Mock <ILogger>().Object);

            var target = new DeliveriesController(deliveryRepository.Object,
                                                  notifyMeRequestRepository.Object,
                                                  notificationService.Object,
                                                  deliveryStatusEventRepository.Object,
                                                  loggerFactory.Object);

            var confirmation = new Confirmation(new DateTimeStamp("datetimevalue"),
                                                new Location(1, 2, 3),
                                                ConfirmationType.Picture,
                                                "confirmationblob");
            // Acts
            var result = await target.Confirm("deliveryid", confirmation) as OkResult;

            // Assert
            Assert.IsNotNull(result);
            Assert.AreEqual(2, notificationServiceCalled);
        }