public void CommitTransactionWithoutBeginTransactionThrowsTransactionNotInstantiatedException()
        {
            var provider = new IProvider();
            var transaction = new Mock<ITransaction>();
            provider.CommandExecutor.Setup(c => c.InitiateTransaction()).Returns(transaction.Object);

            var target = new DataSession(provider.Object);
            try
            {
                target.CommitTransaction();
            }
            catch (Exception ex)
            {
                Assert.IsTrue(ex is TransactionNotInstantiatedException);
            }
        }
        public void CountAllWithTransactionInitiated()
        {
            var provider = new IProvider();
            var command = new ICommand();
            var schema = new TypeTable(typeof(Customer));

            var transaction = new Mock<ITransaction>();

            provider.Setup(p => p.GetSchema(typeof(Customer))).Returns(schema);
            provider.CommandBuilder.Setup(c => c.CreateCountCommand<Customer>()).Returns(command.Object);
            provider.CommandExecutor.Setup(c => c.InitiateTransaction()).Returns(transaction.Object);
            provider.CommandExecutor.Setup(c => c.ExecuteCount(command.Object, transaction.Object)).Returns(10);

            var target = new DataSession(provider.Object);
            target.BeginTransaction();
            var result = target.Count<Customer>();
            target.CommitTransaction();
            Assert.IsTrue(result == 10);
        }
        public void CommitTransactionCallsExecutorCommitTransaction()
        {
            var provider = new IProvider();
            var transaction = new Mock<ITransaction>();
            provider.CommandExecutor.Setup(c => c.InitiateTransaction()).Returns(transaction.Object);

            var target = new DataSession(provider.Object);
            target.BeginTransaction();
            target.CommitTransaction();
            provider.CommandExecutor.Verify(c => c.InitiateTransaction());
            provider.CommandExecutor.Verify(c => c.CommitTransaction(transaction.Object));
        }