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 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); }
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 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); }