public EditTicketRequestHandler(IEntityData ticketRepo,
                                        IGetsTransaction transactionFactory,
                                        ICreatesValidators <EditTicketRequest> validatorFactory,
                                        ICreatesEditTicketResponse responseCreator,
                                        IEditsTicket editor,
                                        ILog logger)
        {
            if (editor == null)
            {
                throw new ArgumentNullException(nameof(editor));
            }
            if (responseCreator == null)
            {
                throw new ArgumentNullException(nameof(responseCreator));
            }
            if (validatorFactory == null)
            {
                throw new ArgumentNullException(nameof(validatorFactory));
            }
            if (transactionFactory == null)
            {
                throw new ArgumentNullException(nameof(transactionFactory));
            }
            if (ticketRepo == null)
            {
                throw new ArgumentNullException(nameof(ticketRepo));
            }

            this.ticketRepo         = ticketRepo;
            this.transactionFactory = transactionFactory;
            this.validatorFactory   = validatorFactory;
            this.responseCreator    = responseCreator;
            this.editor             = editor;
            this.logger             = logger ?? throw new ArgumentNullException(nameof(logger));
        }
Beispiel #2
0
        public CommentDeleter(ICreatesValidators <DeleteCommentRequest> validatorFactory,
                              IGetsTransaction transactionCreator,
                              IEntityData data,
                              Func <IValidationResult, DeleteCommentResponse> responseCreator)
        {
            if (responseCreator == null)
            {
                throw new ArgumentNullException(nameof(responseCreator));
            }
            if (data == null)
            {
                throw new ArgumentNullException(nameof(data));
            }
            if (transactionCreator == null)
            {
                throw new ArgumentNullException(nameof(transactionCreator));
            }
            if (validatorFactory == null)
            {
                throw new ArgumentNullException(nameof(validatorFactory));
            }

            this.validatorFactory   = validatorFactory;
            this.transactionCreator = transactionCreator;
            this.data            = data;
            this.responseCreator = responseCreator;
        }
        public void Create_returns_null_ticket_instance_if_validation_fails(CreateTicketRequest request,
                                                                            [Frozen] ICreatesValidators <CreateTicketRequest> validatorFactory,
                                                                            IValidator validator,
                                                                            [Frozen] ICreatesTicket ticketFactory,
                                                                            [Frozen] ICreatesCreateTicketResponse responseFactory,
                                                                            Ticket ticket,
                                                                            CreateTicketRequestHandler sut)
        {
            // Arrange
            Mock.Get(ticketFactory)
            .Setup(x => x.CreateTicket(It.IsAny <CreateTicketRequest>()))
            .Returns(ticket);
            Mock.Get(validatorFactory)
            .Setup(x => x.GetValidator())
            .Returns(validator);
            Mock.Get(validator)
            .Setup(x => x.Validate(request))
            .Returns(Mock.Of <IValidationResult>(x => x.IsSuccess == false));
            Mock.Get(responseFactory)
            .Setup(x => x.GetResponse(It.IsAny <IValidationResult>()))
            .Returns((IValidationResult r) => new CreateTicketResponse(r, Mock.Of <IValidationResultInterpreter>()));
            Mock.Get(responseFactory)
            .Setup(x => x.GetResponse(It.IsAny <IValidationResult>(), It.IsAny <Ticket>()))
            .Returns((IValidationResult r, Ticket t) => new CreateTicketResponse(r, Mock.Of <IValidationResultInterpreter>(), t));

            // Act
            var result = sut.Create(request);

            // Assert
            Assert.IsNull(result.Ticket);
        }
Beispiel #4
0
        public SprintEditor(IEntityData sprintRepo,
                            IGetsTransaction transactionFactory,
                            ICreatesValidators <EditSprintRequest> validatorFactory,
                            Func <IValidationResult, Sprint, EditSprintResponse> responseCreator,
                            IMapper mapper)
        {
            if (mapper == null)
            {
                throw new ArgumentNullException(nameof(mapper));
            }
            if (responseCreator == null)
            {
                throw new ArgumentNullException(nameof(responseCreator));
            }
            if (validatorFactory == null)
            {
                throw new ArgumentNullException(nameof(validatorFactory));
            }
            if (transactionFactory == null)
            {
                throw new ArgumentNullException(nameof(transactionFactory));
            }
            if (sprintRepo == null)
            {
                throw new ArgumentNullException(nameof(sprintRepo));
            }

            this.mapper             = mapper;
            this.responseCreator    = responseCreator;
            this.validatorFactory   = validatorFactory;
            this.transactionFactory = transactionFactory;
            this.sprintRepo         = sprintRepo;
        }
Beispiel #5
0
 public CommentEditor(ICreatesValidators <EditCommentRequest> validatorFactory,
                      Func <IValidationResult, EditCommentResponse> responseCreator,
                      IGetsTransaction transactionCreator,
                      IEntityData commentRepo,
                      IEnvironment environment)
 {
     if (environment == null)
     {
         throw new ArgumentNullException(nameof(environment));
     }
     if (commentRepo == null)
     {
         throw new ArgumentNullException(nameof(commentRepo));
     }
     if (transactionCreator == null)
     {
         throw new ArgumentNullException(nameof(transactionCreator));
     }
     if (responseCreator == null)
     {
         throw new ArgumentNullException(nameof(responseCreator));
     }
     if (validatorFactory == null)
     {
         throw new ArgumentNullException(nameof(validatorFactory));
     }
     this.validatorFactory   = validatorFactory;
     this.responseCreator    = responseCreator;
     this.transactionCreator = transactionCreator;
     this.commentRepo        = commentRepo;
     this.environment        = environment;
 }
        public void Create_does_not_use_factory_when_validation_fails(CreateTicketRequest request,
                                                                      [Frozen] ICreatesTicket ticketFactory,
                                                                      [Frozen] ICreatesValidators <CreateTicketRequest> validatorFactory,
                                                                      IValidator validator,
                                                                      Ticket ticket,
                                                                      CreateTicketRequestHandler sut)
        {
            // Arrange
            Mock.Get(ticketFactory)
            .Setup(x => x.CreateTicket(It.IsAny <CreateTicketRequest>()))
            .Returns(ticket);
            Mock.Get(validatorFactory)
            .Setup(x => x.GetValidator())
            .Returns(validator);
            Mock.Get(validator)
            .Setup(x => x.Validate(request))
            .Returns(Mock.Of <IValidationResult>(x => x.IsSuccess == false));

            // Act
            sut.Create(request);

            // Assert
            Mock.Get(ticketFactory)
            .Verify(x => x.CreateTicket(request), Times.Never());
        }
Beispiel #7
0
 public ValidatingProjectCreatorDecorator(ICreatesProject wrapped,
                                          ICreatesValidators <CreateProjectRequest> validatorFactory,
                                          Func <CreateProjectResponse> responseFactory)
 {
     this.wrapped          = wrapped ?? throw new ArgumentNullException(nameof(wrapped));
     this.validatorFactory = validatorFactory ?? throw new ArgumentNullException(nameof(validatorFactory));
     this.responseFactory  = responseFactory ?? throw new ArgumentNullException(nameof(responseFactory));
 }
Beispiel #8
0
        ICreatesValidators <T> GetValidatorFactory <T>() where T : class
        {
            ICreatesValidators <T> validatorFactory = null;

            if (scope.TryResolve(out validatorFactory))
            {
                return(validatorFactory);
            }

            throw new MissingValidatorFactoryException($"There must be a generic implementation of {nameof(ICreatesValidators)} registered for type {typeof(T).FullName}.");
        }
Beispiel #9
0
        public void Edit_uses_transaction_when_validation_passes(EditTicketRequest request,
                                                                 [Frozen, AlwaysPasses] ICreatesValidators <EditTicketRequest> validatorFactory,
                                                                 [Frozen] ITransaction tran,
                                                                 [Frozen, CreatesTransaction] IGetsTransaction transactionCreator,
                                                                 EditTicketRequestHandler sut)
        {
            // Act
            sut.Edit(request);

            // Assert
            Mock.Get(transactionCreator).Verify(x => x.GetTransaction(), Times.Once);
            Mock.Get(tran).Verify(x => x.Commit(), Times.Once);
        }
        public void Create_returns_a_response(CreateTicketRequest request,
                                              [Frozen, AlwaysPasses] ICreatesValidators <CreateTicketRequest> validatorFactory,
                                              [Frozen] ICreatesTicket ticketFactory,
                                              Ticket ticket,
                                              CreateTicketRequestHandler sut)
        {
            // Arrange
            Mock.Get(ticketFactory)
            .Setup(x => x.CreateTicket(It.IsAny <CreateTicketRequest>()))
            .Returns(ticket);

            // Act
            var result = sut.Create(request);

            // Assert
            Assert.NotNull(result);
        }
        public void Create_creates_ticket_from_factory_when_validation_passes(CreateTicketRequest request,
                                                                              [Frozen] ICreatesTicket ticketFactory,
                                                                              [Frozen, AlwaysPasses] ICreatesValidators <CreateTicketRequest> validatorFactory,
                                                                              Ticket ticket,
                                                                              CreateTicketRequestHandler sut)
        {
            // Arrange
            Mock.Get(ticketFactory)
            .Setup(x => x.CreateTicket(It.IsAny <CreateTicketRequest>()))
            .Returns(ticket);

            // Act
            sut.Create(request);

            // Assert
            Mock.Get(ticketFactory)
            .Verify(x => x.CreateTicket(request), Times.Once());
        }
Beispiel #12
0
        public void Edit_passes_correct_ticket_to_editing_service(EditTicketRequest request,
                                                                  [Frozen, AlwaysPasses] ICreatesValidators <EditTicketRequest> validatorFactory,
                                                                  [Frozen, CreatesTransaction] IGetsTransaction transactionCreator,
                                                                  [InMemory, Frozen] IEntityData data,
                                                                  Ticket ticket,
                                                                  [Frozen] IEditsTicket editor,
                                                                  EditTicketRequestHandler sut)
        {
            // Arrange
            data.Add(ticket);
            request.Identity = ticket.GetIdentity();

            // Act
            sut.Edit(request);

            // Assert
            Mock.Get(editor).Verify(x => x.Edit(ticket, request), Times.Once);
        }
Beispiel #13
0
        public void Edit_returns_a_result_when_validation_fails(EditTicketRequest request,
                                                                [Frozen] ICreatesValidators <EditTicketRequest> validatorFactory,
                                                                IValidator validator,
                                                                EditTicketRequestHandler sut)
        {
            // Arrange
            Mock.Get(validatorFactory)
            .Setup(x => x.GetValidator())
            .Returns(validator);
            Mock.Get(validator)
            .Setup(x => x.Validate(request))
            .Returns(Mock.Of <IValidationResult>(x => x.IsSuccess == false));

            // Act
            var result = sut.Edit(request);

            // Assert
            Assert.That(result, Is.Not.Null);
        }
Beispiel #14
0
        public void Edit_returns_edited_ticket_in_response(EditTicketRequest request,
                                                           [Frozen, AlwaysPasses] ICreatesValidators <EditTicketRequest> validatorFactory,
                                                           [Frozen, CreatesTransaction] IGetsTransaction transactionCreator,
                                                           [InMemory, Frozen] IEntityData data,
                                                           [HasIdentity] Ticket ticket,
                                                           [Frozen] ICreatesEditTicketResponse editResponseCreator,
                                                           EditTicketRequestHandler sut)
        {
            // Arrange
            data.Add(ticket);
            request.Identity = ticket.GetIdentity();

            // Act
            sut.Edit(request);

            // Assert
            Mock.Get(editResponseCreator)
            .Verify(x => x.GetResponse(It.IsAny <IValidationResult>(), ticket), Times.Once);
        }
Beispiel #15
0
        public void Edit_does_not_begin_transaction_when_validation_fails(EditTicketRequest request,
                                                                          [Frozen] ICreatesValidators <EditTicketRequest> validatorFactory,
                                                                          IValidator validator,
                                                                          [Frozen] IGetsTransaction transactionCreator,
                                                                          EditTicketRequestHandler sut)
        {
            // Arrange
            Mock.Get(validatorFactory)
            .Setup(x => x.GetValidator())
            .Returns(validator);
            Mock.Get(validator)
            .Setup(x => x.Validate(request))
            .Returns(Mock.Of <IValidationResult>(x => x.IsSuccess == false));

            // Act
            sut.Edit(request);

            // Assert
            Mock.Get(transactionCreator).Verify(x => x.GetTransaction(), Times.Never);
        }
Beispiel #16
0
        public CreateTicketRequestHandler(ICreatesTicket ticketFactory,
                                          ICreatesValidators <CreateTicketRequest> validatorFactory,
                                          ICreatesCreateTicketResponse responseCreator)
        {
            if (responseCreator == null)
            {
                throw new ArgumentNullException(nameof(responseCreator));
            }
            if (validatorFactory == null)
            {
                throw new ArgumentNullException(nameof(validatorFactory));
            }
            if (ticketFactory == null)
            {
                throw new ArgumentNullException(nameof(ticketFactory));
            }

            this.ticketFactory    = ticketFactory;
            this.validatorFactory = validatorFactory;
            this.responseCreator  = responseCreator;
        }
Beispiel #17
0
        public void Edit_returns_response_with_null_ticket_when_validation_fails(EditTicketRequest request,
                                                                                 [Frozen] ICreatesValidators <EditTicketRequest> validatorFactory,
                                                                                 IValidator validator,
                                                                                 [Frozen] ICreatesEditTicketResponse editResponseCreator,
                                                                                 EditTicketRequestHandler sut)
        {
            // Arrange
            Mock.Get(validatorFactory)
            .Setup(x => x.GetValidator())
            .Returns(validator);
            Mock.Get(validator)
            .Setup(x => x.Validate(request))
            .Returns(Mock.Of <IValidationResult>(x => x.IsSuccess == false));

            // Act
            sut.Edit(request);

            // Assert
            Mock.Get(editResponseCreator)
            .Verify(x => x.GetResponse(It.IsAny <IValidationResult>(), null), Times.Once);
        }
        public void Create_uses_a_validator(CreateTicketRequest request,
                                            [Frozen] ICreatesValidators <CreateTicketRequest> validatorFactory,
                                            IValidator validator,
                                            [Frozen] ICreatesTicket ticketFactory,
                                            Ticket ticket,
                                            CreateTicketRequestHandler sut)
        {
            // Arrange
            Mock.Get(ticketFactory)
            .Setup(x => x.CreateTicket(It.IsAny <CreateTicketRequest>()))
            .Returns(ticket);
            Mock.Get(validatorFactory)
            .Setup(x => x.GetValidator())
            .Returns(validator);

            // Act
            sut.Create(request);

            // Assert
            Mock.Get(validator)
            .Verify(x => x.Validate(request), Times.Once());
        }
Beispiel #19
0
        public CommentCreator(IEntityData ticketRepo,
                              ICommentFactory commentFactory,
                              IGetsTransaction transactionCreator,
                              IEntityData commentRepo,
                              ICreatesValidators <CreateCommentRequest> validatorFactory,
                              Func <IValidationResult, Comment, CreateCommentResponse> responseCreator)
        {
            if (responseCreator == null)
            {
                throw new ArgumentNullException(nameof(responseCreator));
            }
            if (validatorFactory == null)
            {
                throw new ArgumentNullException(nameof(validatorFactory));
            }
            if (commentRepo == null)
            {
                throw new ArgumentNullException(nameof(commentRepo));
            }
            if (transactionCreator == null)
            {
                throw new ArgumentNullException(nameof(transactionCreator));
            }
            if (commentFactory == null)
            {
                throw new ArgumentNullException(nameof(commentFactory));
            }
            if (ticketRepo == null)
            {
                throw new ArgumentNullException(nameof(ticketRepo));
            }

            this.validatorFactory   = validatorFactory;
            this.commentFactory     = commentFactory;
            this.ticketRepo         = ticketRepo;
            this.transactionCreator = transactionCreator;
            this.commentRepo        = commentRepo;
            this.responseCreator    = responseCreator;
        }
Beispiel #20
0
 public SprintCreator(ICreatesValidators <CreateSprintRequest> validatorFactory,
                      IGetsCurrentProject projectGetter,
                      IEntityData sprintRepo,
                      IGetsTransaction transactionFactory,
                      IResponseFactory <CreateSprintResponse> responseFactory,
                      ISprintFactory sprintFactory)
 {
     if (sprintFactory == null)
     {
         throw new ArgumentNullException(nameof(sprintFactory));
     }
     if (responseFactory == null)
     {
         throw new ArgumentNullException(nameof(responseFactory));
     }
     if (transactionFactory == null)
     {
         throw new ArgumentNullException(nameof(transactionFactory));
     }
     if (sprintRepo == null)
     {
         throw new ArgumentNullException(nameof(sprintRepo));
     }
     if (projectGetter == null)
     {
         throw new ArgumentNullException(nameof(projectGetter));
     }
     if (validatorFactory == null)
     {
         throw new ArgumentNullException(nameof(validatorFactory));
     }
     this.sprintFactory      = sprintFactory;
     this.responseFactory    = responseFactory;
     this.transactionFactory = transactionFactory;
     this.sprintRepo         = sprintRepo;
     this.projectGetter      = projectGetter;
     this.validatorFactory   = validatorFactory;
 }
        public void Create_returns_created_ticket_in_response(CreateTicketRequest request,
                                                              [Frozen, AlwaysPasses] ICreatesValidators <CreateTicketRequest> validatorFactory,
                                                              [Frozen] ICreatesTicket ticketFactory,
                                                              [Frozen] ICreatesCreateTicketResponse responseFactory,
                                                              Ticket ticket,
                                                              CreateTicketRequestHandler sut)
        {
            // Arrange
            Mock.Get(ticketFactory)
            .Setup(x => x.CreateTicket(It.IsAny <CreateTicketRequest>()))
            .Returns(ticket);
            Mock.Get(responseFactory)
            .Setup(x => x.GetResponse(It.IsAny <IValidationResult>()))
            .Returns((IValidationResult r) => new CreateTicketResponse(r, Mock.Of <IValidationResultInterpreter>()));
            Mock.Get(responseFactory)
            .Setup(x => x.GetResponse(It.IsAny <IValidationResult>(), It.IsAny <Ticket>()))
            .Returns((IValidationResult r, Ticket t) => new CreateTicketResponse(r, Mock.Of <IValidationResultInterpreter>(), t));

            // Act
            var result = sut.Create(request);

            // Assert
            Assert.AreSame(ticket, result.Ticket);
        }