public async Task Then_Sends_Message_With_Correct_Values(
            ReservationDeletedEvent deletedEvent,
            Dictionary <string, string> tokens,
            [ArrangeUsers] List <UserDetails> users,
            [Frozen] Mock <INotificationTokenBuilder> mockTokenBuilder,
            [Frozen] Mock <IAccountsService> mockAccountsService,
            [Frozen] Mock <INotificationsService> mockNotificationsService,
            NotifyEmployerOfReservationEventAction action)
        {
            mockAccountsService
            .Setup(service => service.GetAccountUsers(deletedEvent.AccountId))
            .ReturnsAsync(users);
            mockTokenBuilder
            .Setup(builder => builder.BuildTokens(It.IsAny <INotificationEvent>()))
            .ReturnsAsync(tokens);

            await action.Execute <ReservationDeletedNotificationEvent>(deletedEvent);

            mockNotificationsService.Verify(service =>
                                            service.SendNewReservationMessage(It.Is <NotificationMessage>(message =>
                                                                                                          message.RecipientsAddress == users[0].Email &&
                                                                                                          message.TemplateId == TemplateIds.ReservationDeleted &&
                                                                                                          message.Tokens == tokens))
                                            , Times.Once);
        }
Exemple #2
0
        public void Then_Maps_Matching_Fields(ReservationDeletedEvent source)
        {
            ReservationDeletedNotificationEvent result = source;

            result.Should().BeEquivalentTo(source, options =>
                                           options.ExcludingMissingMembers());
        }
        public async Task <Unit> Handle(DeleteReservationCommand command, CancellationToken cancellationToken)
        {
            var validationResult = await _validator.ValidateAsync(command);

            if (!validationResult.IsValid())
            {
                throw new ArgumentException(
                          "The following parameters have failed validation",
                          validationResult.ValidationDictionary.Select(c => c.Key).Aggregate((item1, item2) => item1 + ", " + item2));
            }

            var reservationToDelete = await _reservationService.GetReservation(command.ReservationId);

            var deletedEvent = new ReservationDeletedEvent(
                command.ReservationId,
                reservationToDelete.AccountId,
                reservationToDelete.AccountLegalEntityId,
                reservationToDelete.AccountLegalEntityName,
                reservationToDelete.StartDate.GetValueOrDefault(),
                reservationToDelete.ExpiryDate.GetValueOrDefault(),
                reservationToDelete.CreatedDate,
                reservationToDelete.Course?.CourseId,
                reservationToDelete.Course?.Title,
                reservationToDelete.Course?.Level,
                reservationToDelete.ProviderId,
                command.EmployerDeleted);

            await _reservationService.DeleteReservation(command.ReservationId);

            _context.AddEvent(deletedEvent);

            return(Unit.Value);
        }
        public async Task Then_Gets_All_Users_For_Account(
            ReservationDeletedEvent deletedEvent,
            [Frozen] Mock <IAccountsService> mockAccountsService,
            NotifyEmployerOfReservationEventAction action)
        {
            await action.Execute <ReservationDeletedNotificationEvent>(deletedEvent);

            mockAccountsService.Verify(service => service.GetAccountUsers(deletedEvent.AccountId),
                                       Times.Once);
        }
        public async Task And_Has_ProviderId_But_Deleted_By_Employer_Then_No_Further_Processing(
            ReservationDeletedEvent deletedEvent,
            [Frozen] Mock <IAccountsService> mockAccountsService,
            NotifyEmployerOfReservationEventAction action)
        {
            deletedEvent.EmployerDeleted = true;

            await action.Execute <ReservationDeletedNotificationEvent>(deletedEvent);

            mockAccountsService.Verify(service => service.GetAccountUsers(It.IsAny <long>()),
                                       Times.Never);
        }
        public async Task And_Not_Levy_Then_No_Further_Processing(
            ReservationDeletedEvent deletedEvent,
            [Frozen] Mock <IAccountsService> mockAccountsService,
            NotifyEmployerOfReservationEventAction action)
        {
            deletedEvent.CourseId  = null;
            deletedEvent.StartDate = DateTime.MinValue;

            await action.Execute <ReservationDeletedNotificationEvent>(deletedEvent);

            mockAccountsService.Verify(service => service.GetAccountUsers(It.IsAny <long>()),
                                       Times.Never);
        }
        public async Task Then_Sends_Message_For_Each_User(
            ReservationDeletedEvent deletedEvent,
            [ArrangeUsers] List <UserDetails> users,
            [Frozen] Mock <IAccountsService> mockAccountsService,
            [Frozen] Mock <INotificationsService> mockNotificationsService,
            NotifyEmployerOfReservationEventAction action)
        {
            mockAccountsService
            .Setup(service => service.GetAccountUsers(deletedEvent.AccountId))
            .ReturnsAsync(users);

            await action.Execute <ReservationDeletedNotificationEvent>(deletedEvent);

            users.ForEach(user =>
                          mockNotificationsService.Verify(service =>
                                                          service.SendNewReservationMessage(It.Is <NotificationMessage>(message =>
                                                                                                                        message.RecipientsAddress == user.Email)), Times.Once));
        }
Exemple #8
0
        public static async Task Run(
            [NServiceBusTrigger(EndPoint = QueueNames.ReservationDeleted)] ReservationDeletedEvent message,
            [Inject] ILogger <ReservationDeletedEvent> log,
            [Inject] IReservationDeletedHandler handler)
        {
            log.LogInformation($"Reservation Deleted function executing at: [{DateTime.UtcNow}] UTC, event with ID: [{message.Id}].");

            if (message.Id != null && message.Id != Guid.Empty)
            {
                await handler.Handle(message);

                log.LogInformation($"Reservation Deleted function finished at: [{DateTime.UtcNow}] UTC, event with ID: [{message.Id}] has been handled.");
            }
            else
            {
                log.LogInformation($"No reservation deleted, no reservation ReservationId provided");
            }
        }
        public async Task And_User_Not_Subscribed_Then_Skips(
            ReservationDeletedEvent deletedEvent,
            [ArrangeUsers] List <UserDetails> users,
            [Frozen] Mock <IAccountsService> mockAccountsService,
            [Frozen] Mock <INotificationsService> mockNotificationsService,
            NotifyEmployerOfReservationEventAction action)
        {
            users[0].CanReceiveNotifications = false;
            mockAccountsService
            .Setup(service => service.GetAccountUsers(deletedEvent.AccountId))
            .ReturnsAsync(users);

            await action.Execute <ReservationDeletedNotificationEvent>(deletedEvent);

            mockNotificationsService.Verify(service =>
                                            service.SendNewReservationMessage(It.Is <NotificationMessage>(message =>
                                                                                                          message.RecipientsAddress == users[0].Email)), Times.Never);
            users.Where(user => user.CanReceiveNotifications).ToList().ForEach(user =>
                                                                               mockNotificationsService.Verify(service =>
                                                                                                               service.SendNewReservationMessage(It.Is <NotificationMessage>(message =>
                                                                                                                                                                             message.RecipientsAddress == user.Email)), Times.Once));
        }
        public async Task Then_Notification_Action_Executed_And_Index_Updated(ReservationDeletedEvent deletedEvent)
        {
            //Arrange
            var reservationService = new Mock <IReservationService>();
            var notifyAction       = new Mock <INotifyEmployerOfReservationEventAction>();

            var handler = new ReservationDeletedHandler(reservationService.Object, notifyAction.Object);

            //Act
            await HandleReservationDeletedEvent.Run(
                deletedEvent,
                Mock.Of <ILogger <ReservationDeletedEvent> >(),
                handler);

            //Assert
            notifyAction.Verify(s => s.Execute(It.Is <ReservationDeletedNotificationEvent>(ev =>
                                                                                           ev.Id == deletedEvent.Id)), Times.Once);
            reservationService.Verify(x => x.UpdateReservationStatus(
                                          deletedEvent.Id,
                                          ReservationStatus.Deleted,
                                          null,
                                          null,
                                          null));
        }
Exemple #11
0
        public async Task Handle(ReservationDeletedEvent deletedEvent)
        {
            await _action.Execute <ReservationDeletedNotificationEvent>(deletedEvent);

            await _reservationService.UpdateReservationStatus(deletedEvent.Id, ReservationStatus.Deleted);
        }