Skip to content

Commit

Permalink
Fixing bug in reports and improving test cases.
Browse files Browse the repository at this point in the history
  • Loading branch information
oluizeduardo committed Oct 19, 2021
1 parent cc54179 commit fe13109
Show file tree
Hide file tree
Showing 6 changed files with 76 additions and 60 deletions.
19 changes: 16 additions & 3 deletions src/main/java/br/com/carteira/dto/ItemCarteiraDTO.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,26 @@
package br.com.carteira.dto;

import lombok.AllArgsConstructor;
import java.math.BigDecimal;
import java.math.RoundingMode;

import lombok.Getter;

@Getter
@AllArgsConstructor
public class ItemCarteiraDTO {

private String ticker;
private Long quantidade;
private Double percentual;
private BigDecimal percentual;


public ItemCarteiraDTO(String ticker, Long quantidade, Long quantidadeTotal) {
this.ticker = ticker;
this.quantidade = quantidade;
this.percentual = new BigDecimal(quantidade)
.divide(new BigDecimal(quantidadeTotal), 4, RoundingMode.HALF_UP)
.multiply(new BigDecimal("100"))
.setScale(2);
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,13 @@
public interface TransacaoRepository extends JpaRepository<Transacao, Integer> {

@Query("SELECT new br.com.carteira.dto.ItemCarteiraDTO("
// ticker
+ "t.ticker, "
+ "sum(t.quantidade), "
+ "sum(t.quantidade) * 1.0 / (SELECT sum(t2.quantidade) FROM Transacao t2) *1.0) "
+ "from Transacao t "
// quantidade de cada item comprado.
+ "SUM(CASE WHEN(t.tipo = 'COMPRA') THEN t.quantidade ELSE (t.quantidade * -1) END), "
// quantidade total
+ "(SELECT SUM(CASE WHEN(t2.tipo = 'COMPRA') THEN t2.quantidade ELSE (t2.quantidade * -1) END) FROM Transacao t2)) "
+ "FROM Transacao t "
+ "GROUP BY t.ticker")
List<ItemCarteiraDTO> relatorioCarteiraDeInvestimentos();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public TransacaoDTO cadastrar(TransacaoFormDTO dto)
transacao.setId(null);
transacao.setUsuario(usuario);

//transacaoRepository.save(transacao);
transacaoRepository.save(transacao);

return modelMapper.map(transacao, TransacaoDTO.class);
} catch (EntityNotFoundException ex) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,8 @@ void deveriaRetornarRelatorioCarteiraDeInvestimentos() {
ItemCarteiraDTO::getQuantidade,
ItemCarteiraDTO::getPercentual)
.containsExactlyInAnyOrder(
Assertions.tuple("XPTO1", 20l, 0.666667),
Assertions.tuple("XPTO5", 10l, 0.333333)
Assertions.tuple("XPTO1", 0l, new BigDecimal("0.00")),
Assertions.tuple("XPTO5", 10l, new BigDecimal("100.00"))
);

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import java.math.BigDecimal;
import java.time.LocalDate;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import br.com.carteira.model.TipoTransacao;
Expand All @@ -13,61 +14,59 @@

class CalculadoraDeImpostoServicesTest {

@Test
void transacaoDoTipoCompraNaoDeveriaTerImposto() {

Transacao transacao = new Transacao(

private CalculadoraDeImpostoServices calculadora;


private Transacao criaTransacao(BigDecimal preco, Integer quantidade, TipoTransacao tipo) {
return new Transacao(
120,
"BBSE3",
new BigDecimal("30.00"),
10,
preco,
quantidade,
LocalDate.now(),
TipoTransacao.COMPRA,
tipo,
new Usuario(1, "Juliana", "juliana@gmail.com", "123789"));
}



@BeforeEach
public void inicializarCalculadoraDeImpostoServices()
{
calculadora = new CalculadoraDeImpostoServices();
}



@Test
void transacaoDoTipoCompraNaoDeveriaTerImposto()
{

CalculadoraDeImpostoServices calculadora = new CalculadoraDeImpostoServices();
Transacao transacao = criaTransacao(new BigDecimal("30.00"), 10, TipoTransacao.COMPRA);
BigDecimal imposto = calculadora.calcular(transacao);

assertEquals(BigDecimal.ZERO, imposto);

}


@Test
void transacaoDoTipoVendaComValorMenorQueVinteMilNaoDeveriaTerImposto() {

Transacao transacao = new Transacao(
120,
"BBSE3",
new BigDecimal("30.00"),
10,
LocalDate.now(),
TipoTransacao.VENDA,
new Usuario(1, "Juliana", "juliana@gmail.com", "123789"));

CalculadoraDeImpostoServices calculadora = new CalculadoraDeImpostoServices();
BigDecimal imposto = calculadora.calcular(transacao);
void transacaoDoTipoVendaComValorMenorQueVinteMilNaoDeveriaTerImposto()
{

Transacao transacao = criaTransacao(new BigDecimal("30.00"), 10, TipoTransacao.VENDA);
BigDecimal imposto = calculadora.calcular(transacao);
assertEquals(BigDecimal.ZERO, imposto);

}


@Test
void deveriaCalcularImpostoDeTransacaoDoTipoVendaComValorMaiorQueVinteMil() {
void deveriaCalcularImpostoDeTransacaoDoTipoVendaComValorMaiorQueVinteMil()
{

Transacao transacao = new Transacao(
120,
"BBSE3",
new BigDecimal("1000.00"),
30,
LocalDate.now(),
TipoTransacao.VENDA,
new Usuario(1, "Juliana", "juliana@gmail.com", "123789"));

CalculadoraDeImpostoServices calculadora = new CalculadoraDeImpostoServices();
Transacao transacao = criaTransacao(new BigDecimal("1000.00"), 30, TipoTransacao.VENDA);
BigDecimal imposto = calculadora.calcular(transacao);

assertEquals(new BigDecimal("4500.00"), imposto);

}
Expand Down
33 changes: 17 additions & 16 deletions src/test/java/br/com/carteira/service/TransacaoServiceTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import br.com.carteira.repository.TransacaoRepository;
import br.com.carteira.repository.UsuarioRepository;

//Carrega as funções do mockito antes de inicializar o JUnit.
@ExtendWith(MockitoExtension.class)
class TransacaoServiceTest {

Expand All @@ -34,40 +35,40 @@ class TransacaoServiceTest {
private TransacaoService service;


@Test
void deveriaCadastrarUmaTransacao() {

TransacaoFormDTO formDTO = new TransacaoFormDTO(
private TransacaoFormDTO criaTransacaoFormDTO()
{
return new TransacaoFormDTO(
"ITSA4",
new BigDecimal("10.45"),
10,
TipoTransacao.COMPRA,
LocalDate.now(),
1);
}


@Test
void deveriaCadastrarUmaTransacao()
{


TransacaoFormDTO formDTO = criaTransacaoFormDTO();
TransacaoDTO dto = service.cadastrar(formDTO);

// Mockito.verify(transacaoRepository.save(Mockito.any()));
// Checa se o método 'save' foi chamado.
Mockito.verify(transacaoRepository).save(Mockito.any());

assertEquals(formDTO.getTicker(), dto.getTicker());
assertEquals(formDTO.getPreco(), dto.getPreco());
assertEquals(formDTO.getQuantidade(), dto.getQuantidade());
assertEquals(formDTO.getTipo(), dto.getTipo());
}


@Test
void naoDeveriaCadastrarUmaTransacaoComUsuarioInexistente() {

TransacaoFormDTO formDTO = new TransacaoFormDTO(
"ITSA4",
new BigDecimal("10.45"),
10,
TipoTransacao.COMPRA,
LocalDate.now(),
1);
void naoDeveriaCadastrarUmaTransacaoComUsuarioInexistente()
{

TransacaoFormDTO formDTO = criaTransacaoFormDTO();

Mockito.when(usuarioRepository
.getById(formDTO.getUsuarioId()))
Expand Down

0 comments on commit fe13109

Please sign in to comment.