public async Task Then_An_Event_Is_Fired(
            DeleteReservationCommand command,
            [ReservationWithCourse] Reservation reservationToDelete,
            [Frozen] ValidationResult validationResult,
            [Frozen] Mock <IAccountReservationService> mockService,
            [Frozen] Mock <IUnitOfWorkContext> mockContext,
            DeleteReservationCommandHandler handler)
        {
            validationResult.ValidationDictionary.Clear();
            mockService
            .Setup(service => service.GetReservation(command.ReservationId))
            .ReturnsAsync(reservationToDelete);

            await handler.Handle(command, CancellationToken.None);

            mockContext.Verify(x => x.AddEvent(It.Is <ReservationDeletedEvent>(e =>
                                                                               e.Id.Equals(command.ReservationId) &&
                                                                               e.AccountId.Equals(reservationToDelete.AccountId) &&
                                                                               e.AccountLegalEntityId.Equals(reservationToDelete.AccountLegalEntityId) &&
                                                                               e.AccountLegalEntityName.Equals(reservationToDelete.AccountLegalEntityName) &&
                                                                               e.ProviderId.Equals(reservationToDelete.ProviderId) &&
                                                                               e.CourseId.Equals(reservationToDelete.Course.CourseId) &&
                                                                               e.CourseName.Equals(reservationToDelete.Course.Title) &&
                                                                               e.CourseLevel.Equals(reservationToDelete.Course.Level) &&
                                                                               e.StartDate.Equals(reservationToDelete.StartDate) &&
                                                                               e.EndDate.Equals(reservationToDelete.ExpiryDate) &&
                                                                               e.CreatedDate.Equals(reservationToDelete.CreatedDate) &&
                                                                               e.EmployerDeleted.Equals(command.EmployerDeleted)
                                                                               )), Times.Once);
        }
        public void And_Command_Fails_Validation_Then_Throws_ValidationException(
            DeleteReservationCommand command,
            string propertyName,
            [Frozen] ValidationResult validationResult,
            DeleteReservationCommandHandler handler)
        {
            validationResult.AddError(propertyName);

            var act = new Func <Task>(async() => await handler.Handle(command, CancellationToken.None));

            act.Should().Throw <ArgumentException>()
            .WithMessage($"The following parameters have failed validation*{propertyName}*");
        }
        public async Task Then_Calls_Service_To_Delete_Reservation(
            DeleteReservationCommand command,
            [Frozen] ValidationResult validationResult,
            [Frozen] Mock <IAccountReservationService> mockService,
            DeleteReservationCommandHandler handler)
        {
            validationResult.ValidationDictionary.Clear();

            await handler.Handle(command, CancellationToken.None);

            mockService
            .Verify(service => service.DeleteReservation(command.ReservationId),
                    Times.Once);
        }