Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 20 additions & 11 deletions src/main/java/com/exemplo/ordem_servico/model/OrdemServico.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
package com.exemplo.ordem_servico.model;

import java.math.BigDecimal;
import java.math.RoundingMode;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Positive;
import jakarta.validation.constraints.PositiveOrZero;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
Expand All @@ -13,7 +17,8 @@
@Table(name = "ordens_servico")
public class OrdemServico {

private static final double VALOR_HORA = 80.00;
private static final BigDecimal VALOR_HORA = new BigDecimal("80.00");
private static final int ESCALA_MONETARIA = 2;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand All @@ -27,10 +32,12 @@ public class OrdemServico {


@Positive(message = "A quantidade de horas deve ser maior que zero")
private double horasServico;
@Column(precision = 8, scale = 2)
private BigDecimal horasServico;

@PositiveOrZero(message = "O custo dos materiais não pode ser negativo")
private double custoMateriais;
@Column(precision = 12, scale = 2)
private BigDecimal custoMateriais;


public Long getId() {
Expand Down Expand Up @@ -60,27 +67,29 @@ public void setDescricaoServico(String descricaoServico) {
this.descricaoServico = descricaoServico;
}

public double getHorasServico() {
public BigDecimal getHorasServico() {
return horasServico;
}

public void setHorasServico(double horasServico) {
public void setHorasServico(BigDecimal horasServico) {
this.horasServico = horasServico;
}

public double getCustoMateriais() {
public BigDecimal getCustoMateriais() {
return custoMateriais;
}

public void setCustoMateriais(double custoMateriais) {
public void setCustoMateriais(BigDecimal custoMateriais) {
this.custoMateriais = custoMateriais;
}

public double getValorMaoDeObra() {
return horasServico * VALOR_HORA;
public BigDecimal getValorMaoDeObra() {
return horasServico.multiply(VALOR_HORA)
.setScale(ESCALA_MONETARIA, RoundingMode.HALF_UP);
}

public double getCustoTotal() {
return getValorMaoDeObra() + custoMateriais;
public BigDecimal getCustoTotal() {
return getValorMaoDeObra().add(custoMateriais)
.setScale(ESCALA_MONETARIA, RoundingMode.HALF_UP);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.exemplo.ordem_servico.model;

import static org.junit.jupiter.api.Assertions.assertEquals;

import java.math.BigDecimal;

import org.junit.jupiter.api.Test;

class OrdemServicoTests {

@Test
void deveCalcularValoresMonetariosComPrecisaoDecimal() {
OrdemServico ordem = new OrdemServico();
ordem.setHorasServico(new BigDecimal("1.15"));
ordem.setCustoMateriais(new BigDecimal("0.10"));

assertEquals(new BigDecimal("92.00"), ordem.getValorMaoDeObra());
assertEquals(new BigDecimal("92.10"), ordem.getCustoTotal());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import java.math.BigDecimal;
import java.util.Optional;

import org.junit.jupiter.api.Test;
Expand Down Expand Up @@ -48,9 +49,9 @@ void deveRetornarNaoEncontradoAoExcluirOrdemInexistente() {

@Test
void deveAtualizarOrdemExistente() {
OrdemServico ordem = novaOrdem("Cliente antigo", "Servico antigo", 1, 10);
OrdemServico ordem = novaOrdem("Cliente antigo", "Servico antigo", "1", "10");
ordem.setId(1L);
OrdemServico novosDados = novaOrdem("Cliente novo", "Servico novo", 2, 25);
OrdemServico novosDados = novaOrdem("Cliente novo", "Servico novo", "2", "25");
when(repository.findById(1L)).thenReturn(Optional.of(ordem));
when(repository.save(ordem)).thenReturn(ordem);

Expand All @@ -59,14 +60,14 @@ void deveAtualizarOrdemExistente() {
assertEquals(1L, atualizada.getId());
assertEquals("Cliente novo", atualizada.getCliente());
assertEquals("Servico novo", atualizada.getDescricaoServico());
assertEquals(2, atualizada.getHorasServico());
assertEquals(25, atualizada.getCustoMateriais());
assertEquals(new BigDecimal("2"), atualizada.getHorasServico());
assertEquals(new BigDecimal("25"), atualizada.getCustoMateriais());
verify(repository).save(ordem);
}

@Test
void deveRetornarNaoEncontradoAoAtualizarOrdemInexistente() {
OrdemServico novosDados = novaOrdem("Cliente", "Servico", 1, 0);
OrdemServico novosDados = novaOrdem("Cliente", "Servico", "1", "0");
when(repository.findById(99L)).thenReturn(Optional.empty());

assertThrows(
Expand All @@ -77,13 +78,13 @@ void deveRetornarNaoEncontradoAoAtualizarOrdemInexistente() {
private OrdemServico novaOrdem(
String cliente,
String descricao,
double horas,
double materiais) {
String horas,
String materiais) {
OrdemServico ordem = new OrdemServico();
ordem.setCliente(cliente);
ordem.setDescricaoServico(descricao);
ordem.setHorasServico(horas);
ordem.setCustoMateriais(materiais);
ordem.setHorasServico(new BigDecimal(horas));
ordem.setCustoMateriais(new BigDecimal(materiais));
return ordem;
}
}
Loading