public void Commit_ThrowsInvalidOperationException_WhenNoTransactionIsOpened()
        {
            //Arrange
            var configuration = fixture.Create <PostgresConfiguration>();
            var unitOfWork    = new PostgresReadModelUnitOfWork(configuration, connectionFactory);

            //Act
            Action action = (() => unitOfWork.Commit());

            //Assert
            Assert.Throws <InvalidOperationException>(action);
        }
        public void BeginTransaction_CreatesATransaction()
        {
            //Arrange
            var configuration = fixture.Create <PostgresConfiguration>();
            var unitOfWork    = new PostgresReadModelUnitOfWork(configuration, connectionFactory);

            //Act
            unitOfWork.BeginTransaction();

            //Assert
            connection.Received(1).BeginTransaction();
        }
        public void Constructor_OpensConnection_And_SetsUpRepository()
        {
            //Arrange
            var configuration = fixture.Create <PostgresConfiguration>();

            //Act
            var unitOfWork = new PostgresReadModelUnitOfWork(configuration, connectionFactory);

            //Assert
            unitOfWork.UserRepository.Should().NotBeNull();
            connection.Received(1).Open();
        }
        public void Commit_CommitsAndDisposes_Transaction()
        {
            //Arrange
            var configuration = fixture.Create <PostgresConfiguration>();
            var unitOfWork    = new PostgresReadModelUnitOfWork(configuration, connectionFactory);

            //Act
            unitOfWork.BeginTransaction();
            unitOfWork.Commit();

            //Assert
            transaction.Received(1).Commit();
            transaction.Received(1).Dispose();
        }