package br.com.caelum.leilao.teste;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.hasItems;
import static org.junit.Assert.assertEquals;
import static org.hamcrest.CoreMatchers.*;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import br.com.caelum.leilao.builder.CriadorDeLeilao;
import br.com.caelum.leilao.dominio.Leilao;
import br.com.caelum.leilao.dominio.Usuario;
import br.com.caelum.leilao.dominio.Lance;
import br.com.caelum.leilao.servicos.Avaliador;
public class TesteDoAvaliador {
private Avaliador leiloeiro;
private Usuario maria;
private Usuario jose;
private Usuario joao;
@Before
public void criaAvaliador() {
this.leiloeiro = new Avaliador();
this.joao = new Usuario("João");
this.jose = new Usuario("José");
this.maria = new Usuario("Maria");
}
@Test(expected = RuntimeException.class)
public void naoDeveAvaliarNenhumLeilaoSemLance() {
Leilao leilao = new CriadorDeLeilao().para("PS4 novo").constroi();
leiloeiro.avalia(leilao);
}
@Test
public void deveEntenderLaancesEmOrdemCrescente() {
Leilao leilao = new CriadorDeLeilao().para("PS4 Novo").lance(joao, 300).lance(jose, 400).lance(maria, 500)
.constroi();
double maiorEsperado = 500;
double menorEsperado = 300;
leiloeiro.avalia(leilao);
assertEquals(maiorEsperado, leiloeiro.getMaiorLance(), 0.00001);
// assertEquals(menorEsperado, leiloeiro.getMenorLance(),0.00001);
assertEquals(400, leiloeiro.getMedia(), 0.00001);
assertThat(leiloeiro.getMenorLance(), equalTo(300));
}
@Test
public void deveEntenderLeilaoComApenasUmLance() {
Leilao leilao = new CriadorDeLeilao().para("PS4 Novo").lance(joao, 300).constroi();
leiloeiro.avalia(leilao);
assertEquals(300.00, leiloeiro.getMaiorLance(), 0.00001);
assertEquals(300.00, leiloeiro.getMenorLance(), 0.00001);
}
@Test
public void deveEncontrarOsTresMaioresLances() {
Leilao leilao = new CriadorDeLeilao().para("PS3 Novo").lance(joao, 300).lance(jose, 400).lance(maria, 500)
.lance(joao, 600).lance(jose, 700).constroi();
leiloeiro.avalia(leilao);
List<Lance> tresMaiores = leiloeiro.getTresMaiores();
assertEquals(3, tresMaiores.size());
assertEquals(700, tresMaiores.get(0).getValor(), 0.00001);
assertEquals(600, tresMaiores.get(1).getValor(), 0.00001);
assertEquals(500, tresMaiores.get(2).getValor(), 0.00001);
assertThat(tresMaiores, hasItems(
new Lance(jose,700),
new Lance(joao, 600),
new Lance(maria, 500)
));
}
@Test
public void TesteOrdemRandomica() {
Leilao leilao = new CriadorDeLeilao().para("PS3 Novo").lance(joao, 700).lance(jose, 300).lance(maria, 200)
.lance(joao, 800).lance(jose, 100).constroi();
leiloeiro.avalia(leilao);
assertEquals(800, leiloeiro.getMaiorLance(), 0.0001);
assertEquals(100, leiloeiro.getMenorLance(), 0.0001);
}
@Test
public void TesteOrdemDecrescente() {
Leilao leilao = new CriadorDeLeilao().para("PS3 Novo").lance(joao, 700).lance(jose, 600).lance(maria, 500)
.lance(joao, 400).lance(jose, 300).constroi();
leiloeiro.avalia(leilao);
assertEquals(700, leiloeiro.getMaiorLance(), 0.0001);
assertEquals(300, leiloeiro.getMenorLance(), 0.0001);
}
}
o assertThat não esta funcionado mesmo depois dos imports