Estava fazendo o exercício que pedia que usasse o método disputadosEntre(Calendar inicio, Calendar fim) e, além de ter uma discrepância com o método disponibilizado no projeto do curso (onde os parâmetros do método disputadosEntre está como double inicio e double fim), ao consultar a resposta do exercício e aplicar no meu projeto, o teste não passa, dizendo que o esperado era de 1 mas o resultado foi de 0.
Como não consegui achar o erro que cometi, decidi fazer a pergunta. Agradeço desde já.
O método disputadosEntre é dessa classe:
public class LeilaoDao {
private final Session session;
public LeilaoDao(Session session) {
this.session = session;
}
public void salvar(Leilao leilao) {
session.save(leilao);
for(Lance lance : leilao.getLances()) {
session.save(lance);
}
}
public Leilao porId(int id) {
return (Leilao) session.get(Leilao.class, id);
}
@SuppressWarnings("unchecked")
public List<Leilao> novos() {
return session.createQuery("from Leilao l where usado = false")
.list();
}
@SuppressWarnings("unchecked")
public List<Leilao> antigos() {
Calendar seteDiasAtras = Calendar.getInstance();
seteDiasAtras.add(Calendar.DAY_OF_MONTH, -7);
return session.createQuery("from Leilao l where dataAbertura < :data")
.setParameter("data", seteDiasAtras)
.list();
}
@SuppressWarnings("unchecked")
public List<Leilao> porPeriodo(Calendar inicio, Calendar fim) {
return session.createQuery("from Leilao l where l.dataAbertura " +
"between :inicio and :fim and l.encerrado = false")
.setParameter("inicio", inicio)
.setParameter("fim", fim)
.list();
}
@SuppressWarnings("unchecked")
public List<Leilao> disputadosEntre(double inicio, double fim) {
return session.createQuery("from Leilao l where l.valorInicial " +
"between :inicio and :fim and l.encerrado = false " +
"and size(l.lances) > 3")
.setParameter("inicio", inicio)
.setParameter("fim", fim)
.list();
}
public Long total() {
return (Long) session.createQuery("select count(l) from Leilao l where l.encerrado = false")
.uniqueResult();
}
public void atualiza(Leilao leilao) {
session.merge(leilao);
}
public void deleta(Leilao leilao) {
session.delete(leilao);
}
public void deletaEncerrados() {
session
.createQuery("delete from Leilao l where l.encerrado = true")
.executeUpdate();
}
@SuppressWarnings("unchecked")
public List<Leilao> listaLeiloesDoUsuario(Usuario usuario) {
return session.createQuery("select lance.leilao " +
"from Lance lance " +
"where lance.usuario = :usuario")
.setParameter("usuario", usuario).list();
}
public double getValorInicialMedioDoUsuario(Usuario usuario) {
return (Double) session.createQuery("select avg(lance.leilao.valorInicial) " +
"from Lance lance " +
"where lance.usuario = :usuario")
.setParameter("usuario", usuario)
.uniqueResult();
}
}
E o teste dado no exercício é este:
@Test
public void deveRetornarLeiloesDisputados() {
Usuario mauricio = new Usuario("Mauricio", "mauricio@aniche.com.br");
Usuario marcelo = new Usuario("Marcelo", "marcelo@aniche.com.br");
Leilao leilao1 = new LeilaoBuilder()
.comDono(marcelo)
.comValor(3000.0)
.comLance(Calendar.getInstance(), mauricio, 3000.0)
.comLance(Calendar.getInstance(), marcelo, 3100.0)
.constroi();
Leilao leilao2 = new LeilaoBuilder()
.comDono(mauricio)
.comValor(3200.0)
.comLance(Calendar.getInstance(), mauricio, 3000.0)
.comLance(Calendar.getInstance(), marcelo, 3100.0)
.comLance(Calendar.getInstance(), mauricio, 3200.0)
.comLance(Calendar.getInstance(), marcelo, 3300.0)
.comLance(Calendar.getInstance(), mauricio, 3400.0)
.comLance(Calendar.getInstance(), marcelo, 3500.0)
.constroi();
usuarioDao.salvar(marcelo);
usuarioDao.salvar(mauricio);
leilaoDao.salvar(leilao1);
leilaoDao.salvar(leilao2);
List<Leilao> leiloes = leilaoDao.disputadosEntre(2500, 3500);
assertEquals(1, leiloes.size());
assertEquals(3200.0, leiloes.get(0).getValorInicial(), 0.00001);
}