Exemple #1
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 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));
        }
Exemple #3
0
 public PasswordChanger(IPasswordPolicy policy,
                        IPasswordAuthenticationService authService,
                        ICurrentUserReader userReader,
                        IUserPasswordUpdater updater,
                        IGetsTransaction transactionCreator)
 {
     if (transactionCreator == null)
     {
         throw new ArgumentNullException(nameof(transactionCreator));
     }
     if (updater == null)
     {
         throw new ArgumentNullException(nameof(updater));
     }
     if (userReader == null)
     {
         throw new ArgumentNullException(nameof(userReader));
     }
     if (authService == null)
     {
         throw new ArgumentNullException(nameof(authService));
     }
     if (policy == null)
     {
         throw new ArgumentNullException(nameof(policy));
     }
     this.policy             = policy;
     this.authService        = authService;
     this.userReader         = userReader;
     this.updater            = updater;
     this.transactionCreator = transactionCreator;
 }
Exemple #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;
        }
Exemple #5
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;
        }
Exemple #6
0
        public void GetTestResult_records_error_if_retrieval_raises_an_exception([Frozen] IDataConnection session,
                                                                                 IGetsTransaction tranFactory,
                                                                                 [Frozen] ITransaction tran,
                                                                                 [Frozen, NoRecursion] SampleEntity entity,
                                                                                 IPersister persister,
                                                                                 IQuery query,
                                                                                 [NoAutoProperties] PersistenceTestSpec <SampleEntity> spec,
                                                                                 object id)
        {
            var sut = new PersistenceTester <SampleEntity>(spec);

            Mock.Get(spec.SessionProvider).Setup(x => x.GetConnection()).Returns(session);
            Mock.Get(session)
            .Setup(x => x.GetTransactionFactory())
            .Returns(tranFactory);
            Mock.Get(tranFactory)
            .Setup(x => x.GetTransaction())
            .Returns(tran);
            Mock.Get(session).Setup(x => x.GetPersister()).Returns(persister);
            Mock.Get(session).Setup(x => x.GetQuery()).Returns(query);
            Mock.Get(persister)
            .Setup(x => x.Add(entity, null))
            .Returns(id);

            Mock.Get(query)
            .Setup(x => x.Get <SampleEntity>(id))
            .Throws <ApplicationException>();

            var result = sut.GetTestResult();

            Assert.That(result?.ComparisonException, Is.InstanceOf <ApplicationException>());
        }
Exemple #7
0
        public void GetTestResult_saves_the_entity_within_a_transaction([Frozen] IDataConnection session,
                                                                        IGetsTransaction tranFactory,
                                                                        IPersister persister,
                                                                        [Frozen] ITransaction tran,
                                                                        [Frozen, NoRecursion] SampleEntity entity,
                                                                        [NoAutoProperties] PersistenceTestSpec <SampleEntity> spec,
                                                                        object id)
        {
            bool transactionOpen = false;

            var sut = new PersistenceTester <SampleEntity>(spec);

            Mock.Get(spec.SessionProvider).Setup(x => x.GetConnection()).Returns(session);
            Mock.Get(session)
            .Setup(x => x.GetTransactionFactory())
            .Returns(tranFactory);
            Mock.Get(tranFactory)
            .Setup(x => x.GetTransaction())
            .Callback(() => transactionOpen = true)
            .Returns(tran);
            Mock.Get(session).Setup(x => x.GetPersister()).Returns(persister);
            Mock.Get(persister)
            .Setup(x => x.Add(entity, null))
            .Callback(() => Assert.That(transactionOpen, Is.True, "The save operation must occur whilst the transaction is open"))
            .Returns(id);
            Mock.Get(tran)
            .Setup(x => x.Dispose())
            .Callback(() => transactionOpen = false);

            sut.GetTestResult();

            Mock.Get(persister).Verify(x => x.Add(entity, null), Times.Once);
        }
        public PersistingTicketFactoryDecorator(ICreatesTicket wrappedInstance,
                                                IGetsTransaction transactionFactory,
                                                IEntityData data,
                                                ILog logger)
        {
            if (logger == null)
            {
                throw new ArgumentNullException(nameof(logger));
            }
            if (transactionFactory == null)
            {
                throw new ArgumentNullException(nameof(transactionFactory));
            }
            if (wrappedInstance == null)
            {
                throw new ArgumentNullException(nameof(wrappedInstance));
            }
            if (data == null)
            {
                throw new ArgumentNullException(nameof(data));
            }

            this.wrappedInstance    = wrappedInstance;
            this.transactionFactory = transactionFactory;
            this.data   = data;
            this.logger = logger;
        }
Exemple #9
0
        public AddUserController(IUserCreator userCreator,
                                 IGetsUserByUsername userQuery,
                                 IUserPasswordUpdater passwordChanger,
                                 IGetsTransaction transactionCreator)
        {
            if (transactionCreator == null)
            {
                throw new ArgumentNullException(nameof(transactionCreator));
            }
            if (passwordChanger == null)
            {
                throw new ArgumentNullException(nameof(passwordChanger));
            }
            if (userQuery == null)
            {
                throw new ArgumentNullException(nameof(userQuery));
            }
            if (userCreator == null)
            {
                throw new ArgumentNullException(nameof(userCreator));
            }

            this.userCreator        = userCreator;
            this.passwordChanger    = passwordChanger;
            this.userQuery          = userQuery;
            this.transactionCreator = transactionCreator;
        }
Exemple #10
0
        public SimpleSampleProject(IEntityData repo,
                                   IGetsTransaction transactionCreator,
                                   IGetsUserByUsername userQuery,
                                   IUserCreator userCreator)
        {
            if (userCreator == null)
            {
                throw new ArgumentNullException(nameof(userCreator));
            }
            if (transactionCreator == null)
            {
                throw new ArgumentNullException(nameof(transactionCreator));
            }
            if (repo == null)
            {
                throw new ArgumentNullException(nameof(repo));
            }
            if (userQuery == null)
            {
                throw new ArgumentNullException(nameof(userQuery));
            }

            this.transactionCreator = transactionCreator;
            this.repo        = repo;
            this.userQuery   = userQuery;
            this.userCreator = userCreator;
        }
Exemple #11
0
        public void GetTestResult_records_error_if_save_returns_null([Frozen] IDataConnection session,
                                                                     IGetsTransaction tranFactory,
                                                                     IPersister persister,
                                                                     [Frozen] ITransaction tran,
                                                                     [Frozen, NoRecursion] SampleEntity entity,
                                                                     [NoAutoProperties] PersistenceTestSpec <SampleEntity> spec)
        {
            var sut = new PersistenceTester <SampleEntity>(spec);

            Mock.Get(spec.SessionProvider).Setup(x => x.GetConnection()).Returns(session);
            Mock.Get(session)
            .Setup(x => x.GetTransactionFactory())
            .Returns(tranFactory);
            Mock.Get(tranFactory)
            .Setup(x => x.GetTransaction())
            .Returns(tran);
            Mock.Get(session).Setup(x => x.GetPersister()).Returns(persister);
            Mock.Get(persister)
            .Setup(x => x.Add(entity, null))
            .Returns(() => null);

            var result = sut.GetTestResult();

            Assert.That(result?.SaveException, Is.InstanceOf <InvalidOperationException>());
        }
Exemple #12
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);
        }
Exemple #13
0
        public TicketWorkLogger(IGetsTicketWorkLog workLogProvider, IGetsTransaction transactionFactory)
        {
            if (transactionFactory == null)
            {
                throw new ArgumentNullException(nameof(transactionFactory));
            }
            if (workLogProvider == null)
            {
                throw new ArgumentNullException(nameof(workLogProvider));
            }

            this.workLogProvider    = workLogProvider;
            this.transactionFactory = transactionFactory;
        }
Exemple #14
0
 public TicketOpenerCloser(IEntityData repo,
                           IGetsTransaction transactionFactory)
 {
     if (transactionFactory == null)
     {
         throw new ArgumentNullException(nameof(transactionFactory));
     }
     if (repo == null)
     {
         throw new ArgumentNullException(nameof(repo));
     }
     this.transactionFactory = transactionFactory;
     this.repo = repo;
 }
    public DevelopmentInitialDataCreator(IUserCreator userCreator,
                                         IGetsTransaction transactionCreator,
                                         IEntityData projectRepo)
    {
      if(projectRepo == null)
        throw new ArgumentNullException(nameof(projectRepo));
      if(transactionCreator == null)
        throw new ArgumentNullException(nameof(transactionCreator));
      if(userCreator == null)
        throw new ArgumentNullException(nameof(userCreator));

      this.userCreator = userCreator;
      this.data = projectRepo;
      this.transactionCreator = transactionCreator;
    }
Exemple #16
0
        public void CreateTicket_uses_transaction(CreateTicketRequest request,
                                                  [Frozen] ICreatesTicket ticketFactory,
                                                  Ticket ticket,
                                                  [Frozen] ITransaction trans,
                                                  [Frozen, CreatesTransaction] IGetsTransaction transFactory,
                                                  PersistingTicketFactoryDecorator sut)
        {
            // Arrange
            Mock.Get(ticketFactory)
            .Setup(x => x.CreateTicket(It.IsAny <CreateTicketRequest>()))
            .Returns(ticket);

            // Act
            sut.CreateTicket(request);

            // Assert
            Mock.Get(trans).Verify(x => x.Commit(), Times.Once());
        }
Exemple #17
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);
        }
Exemple #18
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);
        }
Exemple #19
0
        public void WithSetup_does_not_use_transaction_when_specified_not_to([Frozen] IGetsDataConnection sessionProvider,
                                                                             PersistenceTestBuilder sut,
                                                                             [NoRecursion] SampleEntity entity,
                                                                             IDataConnection session,
                                                                             IGetsTransaction tranFactory,
                                                                             ITransaction tran)
        {
            Mock.Get(sessionProvider).Setup(x => x.GetConnection()).Returns(session);
            Mock.Get(session).Setup(x => x.GetTransactionFactory()).Returns(tranFactory);
            Mock.Get(tranFactory).Setup(x => x.GetTransaction()).Returns(tran);
            var action = GetSetup(getter => { /* Noop */ });

            var result = (PersistenceTestBuilder <SampleEntity>)AsSetupChooser(sut)
                         .WithSetup(action, false)
                         .WithEntity(entity);

            result.Setup(session);

            Mock.Get(tranFactory).Verify(x => x.GetTransaction(), Times.Never);
        }
Exemple #20
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);
        }
Exemple #21
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;
        }
Exemple #22
0
        public void GetTestResult_evicts_the_entity_retrieves_it_and_compares_it([Frozen] IDataConnection session,
                                                                                 IGetsTransaction tranFactory,
                                                                                 [Frozen] ITransaction tran,
                                                                                 IPersister persister,
                                                                                 IQuery query,
                                                                                 [Frozen, NoRecursion] SampleEntity entity,
                                                                                 [NoAutoProperties] PersistenceTestSpec <SampleEntity> spec,
                                                                                 object id)
        {
            var evicted = false;

            var sut = new PersistenceTester <SampleEntity>(spec);

            Mock.Get(spec.SessionProvider).Setup(x => x.GetConnection()).Returns(session);
            Mock.Get(session)
            .Setup(x => x.GetTransactionFactory())
            .Returns(tranFactory);
            Mock.Get(tranFactory)
            .Setup(x => x.GetTransaction())
            .Returns(tran);
            Mock.Get(session).Setup(x => x.GetPersister()).Returns(persister);
            Mock.Get(session).Setup(x => x.GetQuery()).Returns(query);
            Mock.Get(persister)
            .Setup(x => x.Add(entity, null))
            .Returns(id);
            Mock.Get(session)
            .Setup(x => x.EvictFromCache(entity))
            .Callback(() => evicted = true);

            var retrievedEntity = new SampleEntity();

            Mock.Get(query)
            .Setup(x => x.Get <SampleEntity>(id))
            .Returns(() => evicted? retrievedEntity : entity);

            sut.GetTestResult();

            Mock.Get(spec.EqualityRule).Verify(x => x.GetEqualityResult(entity, retrievedEntity), Times.Once);
        }
Exemple #23
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 TransactionProjectCreatorDecorator(IGetsTransaction transactionCreator,
                                           ICreatesProject wrapped)
 {
     this.transactionCreator = transactionCreator ?? throw new ArgumentNullException(nameof(transactionCreator));
     this.wrapped            = wrapped ?? throw new ArgumentNullException(nameof(wrapped));
 }