package br.com.caelum.stella.gateway.integration;
import java.math.BigDecimal;
import java.util.Calendar;
import javax.servlet.http.HttpServletRequest;
import junit.framework.Assert;
import org.jmock.Expectations;
import org.jmock.Mockery;
import org.junit.Before;
import org.junit.Test;
import br.com.caelum.stella.gateway.CalendarCompareHelper;
import br.com.caelum.stella.gateway.core.BigDecimalFormatter;
import br.com.caelum.stella.gateway.pagseguro.NaoEhRoboPagSeguroException;
import br.com.caelum.stella.gateway.pagseguro.PagSeguroRequisicaoInvalidaException;
import br.com.caelum.stella.gateway.pagseguro.PagSeguroAutorizacaoReturn;
import br.com.caelum.stella.gateway.pagseguro.PagSeguroDadosConfiguracao;
import br.com.caelum.stella.gateway.pagseguro.PagSeguroStatusTransacao;
import br.com.caelum.stella.gateway.pagseguro.PagSeguroTipoFrete;
import br.com.caelum.stella.gateway.pagseguro.PagSeguroTipoPagamento;
import br.com.caelum.stella.gateway.pagseguro.PagSeguroVerificaRetornoAutorizacao;
import br.com.caelum.stella.gateway.pagseguro.PagSeguroVerificadorRetorno;
public class PagSeguroTestRetornoIntegracao {
private Mockery mockery;
private PagSeguroVerificadorRetorno verificadorRetorno;
private HttpServletRequest request;
private static final PagSeguroDadosConfiguracao configuracao = new PagSeguroDadosConfiguracao();
@Before
public void prepareMocks() {
mockery = new Mockery();
request = mockery.mock(HttpServletRequest.class);
verificadorRetorno = mockery.mock(PagSeguroVerificadorRetorno.class);
}
@Test(expected = PagSeguroRequisicaoInvalidaException.class)
public void testSimulacaoDeAprovacaoIndevidaDeCompra() {
mockery.checking(new Expectations() {
{
one(request).getParameter("TransacaoID");
will(returnValue("123456"));
one(verificadorRetorno)
.verificaSeRetornoFoiEnviadoPelaPagSeguro(configuracao);
will(returnValue(false));
}
});
new PagSeguroVerificaRetornoAutorizacao(request, verificadorRetorno,
configuracao).handle();
mockery.assertIsSatisfied();
}
@Test(expected = NaoEhRoboPagSeguroException.class)
public void testRetornoFeitoPeloBrowser() {
mockery.checking(new Expectations() {
{
one(request).getParameter("TransacaoID");
will(returnValue(""));
}
});
new PagSeguroVerificaRetornoAutorizacao(request, verificadorRetorno,
configuracao).handle();
}
@Test
public void testRetornoValido() {
mockery.checking(new Expectations() {
{
one(verificadorRetorno)
.verificaSeRetornoFoiEnviadoPelaPagSeguro(configuracao);
will(returnValue(true));
one(request).getParameter("VendedorEmail");
will(returnValue("vendedor@email.com.br"));
one(request).getParameter("TransacaoID");
will(returnValue("123456"));
one(request).getParameter("Referencia");
will(returnValue("7654763"));
one(request).getParameter("TipoFrete");
will(returnValue("SD"));
one(request).getParameter("ValorFrete");
will(returnValue("101,50"));
one(request).getParameter("Anotacao");
will(returnValue("qualquer coisa"));
one(request).getParameter("DataTransacao");
will(returnValue("25/04/2009 09:14:30"));
one(request).getParameter("TipoPagamento");
will(returnValue("CARTAO DE CREDITO"));
one(request).getParameter("StatusTransacao");
will(returnValue("EM ANALISE"));
one(request).getParameter("CliTelefone");
will(returnValue("71 33468900"));
one(request).getParameter("CliCEP");
will(returnValue("41900050"));
one(request).getParameter("CliCidade");
will(returnValue("Salvador"));
one(request).getParameter("CliEndereco");
will(returnValue("Endereco do cidadao"));
one(request).getParameter("CliNome");
will(returnValue("Alberto"));
one(request).getParameter("CliEstado");
will(returnValue("BA"));
one(request).getParameter("CliNumero");
will(returnValue("2626"));
one(request).getParameter("CliComplemento");
will(returnValue("Complementando meus dados"));
one(request).getParameter("CliBairro");
will(returnValue("Rio Vermelho"));
one(request).getParameter("CliEmail");
will(returnValue("comprador@email.com.br"));
one(request).getParameter("NumItens");
will(returnValue("2"));
for (int i = 1; i <= 2; i++) {
one(request).getParameter("ProdID_" + i);
will(returnValue("12345" + i));
one(request).getParameter("ProdDescricao_" + i);
will(returnValue("descricao do item " + i));
one(request).getParameter("ProdQuantidade_" + i);
will(returnValue(i + ""));
one(request).getParameter("ProdValor_" + i);
will(returnValue("1000"));
one(request).getParameter("ProdFrete_" + i);
will(returnValue(49 + i + ",25"));
one(request).getParameter("ProdExtras_" + i);
will(returnValue("0,00"));
}
}
});
PagSeguroAutorizacaoReturn autorizacaoReturn = new PagSeguroVerificaRetornoAutorizacao(
request, verificadorRetorno, configuracao).handle();
Calendar dataTransacao = Calendar.getInstance();
dataTransacao.set(Calendar.DAY_OF_MONTH, 25);
dataTransacao.set(Calendar.MONTH, Calendar.APRIL);
dataTransacao.set(Calendar.YEAR, 2009);
dataTransacao.set(Calendar.HOUR_OF_DAY, 9);
dataTransacao.set(Calendar.MINUTE, 14);
dataTransacao.set(Calendar.SECOND, 30);
Assert.assertTrue(new CalendarCompareHelper().compareCalendars(
dataTransacao, autorizacaoReturn.getDataTransacao()));
Assert.assertEquals(autorizacaoReturn.getStatusTransacao(),
PagSeguroStatusTransacao.EM_ANALISE);
Assert.assertEquals(autorizacaoReturn.getTipoPagamento(),
PagSeguroTipoPagamento.CARTAO_CREDITO);
Assert.assertEquals(autorizacaoReturn.getTipoFrete(),
PagSeguroTipoFrete.SEDEX);
Assert.assertEquals(new BigDecimal(101.50).setScale(
BigDecimalFormatter.SCALE, BigDecimalFormatter.ROUNDING_MODE),
autorizacaoReturn.getValorTotalFrete());
Assert.assertEquals(new BigDecimal(101.50).setScale(
BigDecimalFormatter.SCALE, BigDecimalFormatter.ROUNDING_MODE),
autorizacaoReturn.getValorTotalFreteCheckout());
Assert.assertEquals(new BigDecimal(20).setScale(
BigDecimalFormatter.SCALE, BigDecimalFormatter.ROUNDING_MODE),
autorizacaoReturn.getValorTotalItens());
mockery.assertIsSatisfied();
}
}