public void Devo_Validar_Uma_Nova_Forma_Pagamento()
        {
            var mockFormaPagamentoNova = new Mock<FormaPagamento>();

            mockFormaPagamentoNova.Setup(f => f.Id).Returns(0);
            mockFormaPagamentoNova.Setup(f => f.Descricao).Returns("À vista");

            ValidadorFormaPagamento validador = new ValidadorFormaPagamento(null);
            validador.ValidarNovaFormaPagamento(mockFormaPagamentoNova.Object);
        }
        public void Devo_Validar_Uma_Forma_Pagamento_Em_Alteracao_Se_Nao_Houver_Nenhuma_Outra_Forma_Pagamento_Cadastrada_Com_Essa_Descricao()
        {
            var mockFormaPagamentoEmAlteracao = new Mock<FormaPagamento>();

            mockFormaPagamentoEmAlteracao.Setup(f => f.Id).Returns(1);
            mockFormaPagamentoEmAlteracao.Setup(f => f.Descricao).Returns("À vista");

            ValidadorFormaPagamento validador = new ValidadorFormaPagamento(null);
            validador.ValidarFormaPagamentoEmAlteracao(mockFormaPagamentoEmAlteracao.Object);
        }
        public void Nao_Devo_Validar_Uma_Nova_Forma_Pagamento_Com_Descricao_De_Outra_Forma_Pagamento_Cadastrada()
        {
            var mockFormaPagamentoNova = new Mock<FormaPagamento>();

            mockFormaPagamentoNova.Setup(f => f.Id).Returns(0);
            mockFormaPagamentoNova.Setup(f => f.Descricao).Returns("À vista");

            var mockFormaPagamentoEncontradaNoBD = new Mock<FormaPagamento>();

            mockFormaPagamentoEncontradaNoBD.Setup(f => f.Id).Returns(1);
            mockFormaPagamentoEncontradaNoBD.Setup(f => f.Descricao).Returns("À vista");

            ValidadorFormaPagamento validador = new ValidadorFormaPagamento(mockFormaPagamentoEncontradaNoBD.Object);
            validador.ValidarNovaFormaPagamento(mockFormaPagamentoNova.Object);
        }
        public void Nao_Devo_Validar_Uma_Forma_Pagamento_Em_Alteracao_Com_Descricao_Igual_De_Outra_Forma_Pagamento_Cadastrada()
        {
            var mockFormaPagamentoEmAlteracao = new Mock<FormaPagamento>();

            mockFormaPagamentoEmAlteracao.Setup(f => f.Id).Returns(1);
            mockFormaPagamentoEmAlteracao.Setup(f => f.Descricao).Returns("À vista");

            var mockFormaPagamentoEncontradaNoBD = new Mock<FormaPagamento>();

            mockFormaPagamentoEncontradaNoBD.Setup(f => f.Id).Returns(2);
            mockFormaPagamentoEncontradaNoBD.Setup(f => f.Descricao).Returns("À vista");

            ValidadorFormaPagamento validador = new ValidadorFormaPagamento(mockFormaPagamentoEncontradaNoBD.Object);
            validador.ValidarFormaPagamentoEmAlteracao(mockFormaPagamentoEmAlteracao.Object);
        }
        public Boolean Gravar(DTOFormaPagamento dtoFormaPagamento)
        {
            if (dtoFormaPagamento == null)
                return false;

            FormaPagamento fpagto = this._repositorio.Obter(dtoFormaPagamento.ID);

            if (fpagto == null)
            {
                if (dtoFormaPagamento.Parcelamento == null)
                    fpagto = new FormaPagamento(dtoFormaPagamento.Descricao, dtoFormaPagamento.Tipo, dtoFormaPagamento.PercentualAcrescimo, dtoFormaPagamento.PercentualDesconto);
                else
                    fpagto = new FormaPagamento(dtoFormaPagamento.Descricao, dtoFormaPagamento.Tipo, dtoFormaPagamento.PercentualAcrescimo, dtoFormaPagamento.PercentualDesconto, dtoFormaPagamento.Parcelamento);
            }

            else
            {
                fpagto.Descricao = dtoFormaPagamento.Descricao;
                fpagto.PercentualAcrescimo = dtoFormaPagamento.PercentualAcrescimo;
                fpagto.PercentualDesconto = dtoFormaPagamento.PercentualDesconto;
                fpagto.Tipo = dtoFormaPagamento.Tipo;

                if (dtoFormaPagamento.Parcelamento != null)
                    fpagto.Parcelamento = dtoFormaPagamento.Parcelamento;
            }

            FormaPagamento fpagtoEncontradaNoBD = this._repositorio.ObterFormaPagamentoPorDescricao(dtoFormaPagamento.Descricao);
            ValidadorFormaPagamento validador   = new ValidadorFormaPagamento(fpagtoEncontradaNoBD);

            if (dtoFormaPagamento.IsNovo())
                validador.ValidarNovaFormaPagamento(fpagto);
            else
                validador.ValidarFormaPagamentoEmAlteracao (fpagto);

            this._repositorio.Salvar(fpagto);
            dtoFormaPagamento.ID = fpagto.Id;

            return true;
        }