public void Nao_Devo_Conseguir_Obtem_Um_Extrato_Sem_Nenhum_Caixa_Aberto()
        {
            var repositorioCaixa = new Mock<ICaixaRepositorio>();
            repositorioCaixa.Setup(r => r.ObterUltimoCaixaAberto())
                            .Returns<Caixa>(null);

            IFachadaCaixa fachada = new FachadaCaixa(repositorioCaixa.Object);

            fachada.ObterExtrato();
        }
        public void Devo_Conseguir_Obter_Um_Extrato_Do_Caixa()
        {
            IList<LancamentoCaixa> lancamentos = new List<LancamentoCaixa>();
            lancamentos.Add(new LancamentoCaixa("SALDO DE ABERTURA", TipoMovimentacaoLancamentoCaixa.Entrada, TipoPagamentoLancamentoCaixa.Dinheiro, 130));
            lancamentos.Add(new LancamentoCaixa("SANGRIA",           TipoMovimentacaoLancamentoCaixa.Saida,   TipoPagamentoLancamentoCaixa.Dinheiro, 30));
            lancamentos.Add(new LancamentoCaixa("REFORÇO",           TipoMovimentacaoLancamentoCaixa.Entrada, TipoPagamentoLancamentoCaixa.Dinheiro, 150));
            lancamentos.Add(new LancamentoCaixa("REFORÇO",           TipoMovimentacaoLancamentoCaixa.Entrada, TipoPagamentoLancamentoCaixa.Dinheiro, 200));

            var caixa = new Mock<Caixa>();
            caixa.Setup(c => c.EstaAberto).Returns(true);
            caixa.SetupGet(c => c.Lancamentos).Returns(lancamentos);

            var repositorioCaixa = new Mock<ICaixaRepositorio>();
            repositorioCaixa.Setup(r => r.ObterUltimoCaixaAberto())
                            .Returns(caixa.Object);

            IFachadaCaixa fachada = new FachadaCaixa(repositorioCaixa.Object);

            IEnumerable<DTOLancamentoCaixa> extrato = fachada.ObterExtrato();

            int contador = 0;

            foreach(DTOLancamentoCaixa dto in extrato)
            {
                switch(contador)
                {
                    case 0: Assert.AreEqual("SALDO DE ABERTURA",                   dto.Descricao);
                            Assert.AreEqual(TipoPagamentoLancamentoCaixa.Dinheiro, dto.TipoPagamento);
                            Assert.AreEqual(130m,                                  dto.Valor);
                        break;
                    case 1: Assert.AreEqual("SANGRIA",                             dto.Descricao);
                            Assert.AreEqual(TipoPagamentoLancamentoCaixa.Dinheiro, dto.TipoPagamento);
                            Assert.AreEqual(-30m,                                  dto.Valor);
                        break;
                    case 2: Assert.AreEqual("REFORÇO",                             dto.Descricao);
                            Assert.AreEqual(TipoPagamentoLancamentoCaixa.Dinheiro, dto.TipoPagamento);
                            Assert.AreEqual(150m,                                  dto.Valor);
                        break;
                    case 3: Assert.AreEqual("REFORÇO",                            dto.Descricao);
                            Assert.AreEqual(TipoPagamentoLancamentoCaixa.Dinheiro, dto.TipoPagamento);
                            Assert.AreEqual(200m,                                  dto.Valor);
                        break;
                }

                contador++;
            }
        }