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);
        }
Exemple #2
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 #3
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);
        }
Exemple #4
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);
        }
        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);
        }