public void AoCancelarUmaTransacaoAConexaoDeveEstarFechada()
        {
            var mockConexao = CriarMockDaConexao();
            var transacao   = new Transacao(mockConexao.Object);

            transacao.IniciarTransacao();
            transacao.CancelarTransacao();

            mockConexao.Verify(c => c.Close());
        }
        public void AoCancelarUmaTransacaoAConexaoDeveSerFechada()
        {
            var mockConexao = CriarMockDaConexao();

            using (var transacao = new Transacao(mockConexao.Object))
            {
                transacao.CancelarTransacao();
                mockConexao.Verify(c => c.Close());
            }
        }
        public void AoCancelarUmaTransacaoATransacaoDeveSerLimpa()
        {
            var mockTransacao = CriarMockDaTransacao();
            var mockConexao   = CriarMockDaConexao(mockTransacao);

            using (var transacao = new Transacao(mockConexao.Object))
            {
                transacao.CancelarTransacao();
                transacao.TransacaoAtual
                .Should().BeNull();
                mockTransacao.Verify(t => t.Dispose());
            }
        }
        public void SeCriarUmaTransacaoUtilizandoUmaTransacaoExistenteNaoPodeCancelarTransacao()
        {
            using (var conexao = new SqlConnection(ConnectionStringHelper.Consultar()))
            {
                conexao.Open();

                var transacaoBanco = conexao.BeginTransaction();

                using (var transacao = new Transacao(transacaoBanco))
                {
                    Action acao = () => transacao.CancelarTransacao();
                    acao
                    .ShouldThrow <NaoEhPossivelConfirmarOuCancelarTransacaoExternaException>();
                }

                transacaoBanco.Rollback();
            }
        }