def test_processar_dados_de_pagamento_define_dados_pagamento( self, cria_pedido_mock): entregador = servicos.EntregaPagamento(1234, dados={'passo': 'pre'}) entregador.servico = mock.MagicMock() entregador.configuracao = mock.MagicMock(loja_id=8) entregador.pedido = mock.MagicMock( numero=123, valor_total=15.70, conteudo_json={'mptransparente': { 'valor_parcela': 15.7 }}) entregador.malote = mock.MagicMock(transaction_amount=15.70, payment_method_id='visa') entregador.resposta = mock.MagicMock(sucesso=True, requisicao_invalida=False, conteudo={ 'status': 'approved', 'status_detail': 'accredited', 'id': 'transacao-id', 'transaction_amount': 123.45, 'payment_method_id': 'visa' }) cria_pedido_mock.return_value = mock.MagicMock(situacao_id=9) entregador.processa_dados_pagamento() cria_pedido_mock.assert_called_with('Pedido', numero=123, loja_id=8) entregador.dados_pagamento.should.be.equal({ 'conteudo_json': { 'bandeira': 'visa', 'mensagem_retorno': u'Seu pagamento foi aprovado com sucesso.', 'numero_parcelas': 1, 'valor_parcela': 15.7 }, 'transacao_id': 'transacao-id', 'valor_pago': 15.7 })
def test_deve_definir_credenciais(self, credenciador_mock): entregador = servicos.EntregaPagamento(1234, dados={'passo': 'pre'}) credenciador_mock.return_value = 'credenciador' entregador.configuracao = 'configuracao' entregador.define_credenciais() entregador.conexao.credenciador.should.be.equal('credenciador') credenciador_mock.assert_called_with(configuracao='configuracao')
def test_deve_reenviar_pagamento_se_tentativa_eh_um(self): entregador = servicos.EntregaPagamento(1234) entregador.malote = mock.MagicMock() entregador.malote.to_dict.return_value = { 'zas': 'malote-como-dicionario' } entregador.conexao = mock.MagicMock() entregador.pedido = mock.MagicMock(situacao_id=None) entregador.dados = {'next_url': 'zas'} resposta_not_autorized = mock.MagicMock( nao_autorizado=True, nao_autenticado=False, conteudo={'message': 'invalid_token'}) resposta_ok = mock.MagicMock(sucesso=True, nao_autorizado=False, nao_autenticado=False, conteudo={}) entregador.conexao.post.side_effect = [ resposta_not_autorized, resposta_ok ] entregador.envia_pagamento() entregador.dados_enviados.should.be.equal({ 'tentativa': 2, 'zas': 'malote-como-dicionario' })
def test_enviar_pagamento_dispara_erro_pedido_ja_realizado_e_pago(self): entregador = servicos.EntregaPagamento(8, dados={}) entregador.pedido = mock.MagicMock(numero=1234, situacao_id=4) entregador.envia_pagamento.when.called_with().should.throw( entregador.PedidoJaRealizado, u'Já foi realizado um pedido com o número 1234 e ele está como Pedido Pago.\nSeu pagamento já está pago e estamos processando o envio' )
def test_processar_dados_de_pagamento_dispara_erro_sem_ser_parameter(self): entregador = servicos.EntregaPagamento(8, dados={'passo': 'pre'}) entregador.malote = mock.MagicMock() entregador.malote.to_dict.return_value = { 'card_hash': None, 'capture': 'false', 'transaction_amount': 2900, 'installments': 1, 'payment_method': 'credit_card' } entregador.pedido = mock.MagicMock(numero=1234) entregador.resposta = mock.MagicMock( sucesso=False, requisicao_invalida=True, conteudo={ u'url': u'/transactions', u'errors': [{ u'message': u'Nome do portador do cartão está faltando', u'type': u'whatever' }, { u'message': u'Data de expiração do cartão está faltando', u'type': u'whatever' }], u'method': u'post' }) entregador.processa_dados_pagamento.when.called_with().should.throw( entregador.EnvioNaoRealizado, u'Dados inválidos enviados ao MercadoPago')
def test_enviar_pagamento_dispara_erro_pedido_ja_realizado_e_cancelado( self): entregador = servicos.EntregaPagamento(8, dados={}) entregador.pedido = mock.MagicMock(numero=1234, situacao_id=8) entregador.envia_pagamento.when.called_with().should.throw( entregador.PedidoJaRealizado, u'Já foi realizado um pedido com o número 1234 e ele está como Pedido Cancelado.\nSeu pedido foi cancelado e não pode ser mais usado. Você precisa fazer um novo pedido na loja.' )
def test_deve_definir_configuracao_e_pedido_de_servico(self, define_mock): entregador = servicos.EntregaPagamento(1234, dados={'passo': 'pre'}) entregador.configuracao = 'configuracao' entregador.pedido = 'pedido' entregador.define_pedido_e_configuracao(1234) define_mock.assert_called_with(1234) entregador.configuracao.should.be.equal('configuracao') entregador.pedido.should.be.equal('pedido')
def test_deve_usar_post_ao_enviar_pagamento(self): entregador = servicos.EntregaPagamento(1234, dados={'passo': 'pre'}) entregador.malote = mock.MagicMock() entregador.malote.to_dict.return_value = { 'zas': 'malote-como-dicionario' } entregador.conexao = mock.MagicMock() entregador.pedido = mock.MagicMock(situacao_id=None) entregador.envia_pagamento() entregador.conexao.post.assert_called_with( entregador.url, {'zas': 'malote-como-dicionario'})
def test_deve_nao_reenviar_pagamento_se_tentativa_eh_dois(self): entregador = servicos.EntregaPagamento(1234) entregador.malote = mock.MagicMock() entregador.malote.to_dict.return_value = { 'zas': 'malote-como-dicionario' } entregador.conexao = mock.MagicMock() entregador.pedido = mock.MagicMock(situacao_id=None) entregador.dados = {'next_url': 'zas'} resposta_mock = mock.MagicMock(nao_autorizado=True, nao_autenticado=False, conteudo={'message': 'invalid_token'}) entregador.conexao.post.return_value = resposta_mock entregador.envia_pagamento.when.called_with( tentativa=2).should_not.throw(entregador.EnvioNaoRealizado)
def test_processar_dados_de_pagamento_retorna_se_notificacao_jah_atualizou( self, cria_pedido_mock): entregador = servicos.EntregaPagamento(1234, dados={'passo': 'pre'}) entregador.servico = mock.MagicMock() entregador.configuracao = mock.MagicMock(loja_id=8) entregador.pedido = mock.MagicMock(numero=123) cria_pedido_mock.return_value = mock.MagicMock(situacao_id=4) entregador.processa_dados_pagamento() cria_pedido_mock.assert_called_with('Pedido', numero=123, loja_id=8) entregador.dados_pagamento.should.be.none entregador.resultado.should.be.equal({ 'fatal': False, 'mensagem': '', 'resultado': 'alterado_por_notificacao' })
def test_deve_enviar_pagamento_se_der_erro_de_token(self): entregador = servicos.EntregaPagamento(1234) entregador.malote = mock.MagicMock() entregador.malote.to_dict.return_value = { 'zas': 'malote-como-dicionario' } entregador.conexao = mock.MagicMock() entregador.pedido = mock.MagicMock(situacao_id=None) entregador.dados = {'next_url': 'zas'} resposta_bad = mock.MagicMock(nao_autorizado=False, nao_autenticado=False, sucesso=False, requisicao_invalida=True, conteudo={ "status": 400, "message": "Invalid card token", "cause": [{ "code": 2062, "data": None, "description": "Invalid card token" }], "error": "bad_request" }) resposta_ok = mock.MagicMock(sucesso=True, requisicao_invalida=False, nao_autorizado=False, nao_autenticado=False, conteudo={"status": 200}) entregador.conexao.post.side_effect = [resposta_bad, resposta_ok] entregador.envia_pagamento() entregador.dados_enviados.should.be.equal({ 'tentativa': 2, 'zas': 'malote-como-dicionario' })
def test_deve_enviar_pagamento_se_pedido_esta_efetuado(self): entregador = servicos.EntregaPagamento(1234) entregador.malote = mock.MagicMock() entregador.malote.to_dict.return_value = { 'zas': 'malote-como-dicionario' } entregador.conexao = mock.MagicMock() entregador.pedido = mock.MagicMock(numero=1234, situacao_id=9) entregador.dados = {'next_url': 'zas'} resposta_mock = mock.MagicMock(nao_autorizado=False, nao_autenticado=False) entregador.conexao.post.return_value = resposta_mock entregador.envia_pagamento() entregador.dados_enviados.should.be.equal({ 'tentativa': 1, 'zas': 'malote-como-dicionario' }) entregador.resposta.should.be.equal(resposta_mock)
def test_processar_dados_de_pagamento_define_identificador_id(self): entregador = servicos.EntregaPagamento(1234, dados={'passo': 'pre'}) entregador.configuracao = mock.MagicMock(aplicacao='test') entregador.pedido = mock.MagicMock( numero=123, valor_total=15.70, conteudo_json={'mptransparente': { 'valor_parcela': 15.7 }}) entregador.malote = mock.MagicMock(transaction_amount=15.70, payment_method_id='visa') entregador.servico = mock.MagicMock() entregador.resposta = mock.MagicMock(sucesso=True, requisicao_invalida=False, conteudo={ 'status': 'approved', 'status_detail': 'accredited', 'id': 'transacao-id', 'transaction_amount': 123.45, 'payment_method_id': 'visa' }) entregador.processa_dados_pagamento() entregador.identificacao_pagamento.should.be.equal('transacao-id')
def test_deve_dizer_que_tem_malote(self): entregador = servicos.EntregaPagamento(1234, dados={'passo': 'pre'}) entregador.tem_malote.should.be.truthy
def test_deve_montar_conexao(self, obter_mock): conexao = mock.MagicMock() obter_mock.return_value = conexao entregador = servicos.EntregaPagamento(1234, dados={'passo': 'pre'}) entregador.conexao.should.be.equal(conexao) obter_mock.assert_called_with()
def test_deve_definir_url(self): entregador = servicos.EntregaPagamento(1234, dados={'passo': 'pre'}) entregador.url.should.be.equal( 'https://api.mercadopago.com/v1/payments')
def test_deve_definir_resposta(self): entregador = servicos.EntregaPagamento(1234, dados={'passo': 'pre'}) entregador.resposta.should.be.none
def test_deve_dizer_que_faz_http(self): entregador = servicos.EntregaPagamento(1234, dados={'passo': 'pre'}) entregador.faz_http.should.be.truthy