Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Falhas em código disponibilizado para Atividade 06 (Testando consulta com dependências)

Para que o teste solicitado passe, foi necessário alterar o código disponibilizado. Seguem as alterações:

Classe LeilaoBuilder:

  • adicionado campo lances:

    ...
       private Calendar dataAbertura;
       private boolean encerrado;
    ---> private List<Lance> lances;
    ...
  • inicializado campo lances no construtor:

    ...
    this.lances = new ArrayList<>();
  • adicionado método comLance(Lance lance):

    public LeilaoBuilder comLance(Lance lance) {
          lances.add(lance);
          return this;
      }
  • alterado método constroi, que fica como segue:

    public Leilao constroi() {
          Leilao leilao = new Leilao(nome, valor, dono, usado);
          leilao.setDataAbertura(dataAbertura);
    -->   lances.forEach(leilao::adicionaLance);
          if(encerrado) leilao.encerra();
    
          return leilao;
      }

Classe LeilaoDao:

  • alterado método disputadosEntre, adicionando sinal de igual na linha que compara o tamanho da lista de lances:
    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();
      }

Classe Lance:

  • retirado campo leilao do construtor:
    public Lance(Calendar data, Usuario usuario, double valor) {
          this.usuario = usuario;
          this.data = data;
          this.valor = valor;
      }

Esse é o teste:

@Test public void deveRetornarLeiloesDisputadosNoPeriodo(){
        Usuario dono = new Usuario("Jose da Silva", "jose@dasilva.com.br");
        Usuario comprador1 = new Usuario("Joao", "joao@joao.com.br");
        Usuario comprador2 = new Usuario("Maria", "maria@maria.com.br");

        Leilao leilao1 = new LeilaoBuilder().comNome("Geladeira").comValor(1500.0).comDono(dono).diasAtras(2)
                .comLance(new Lance(Calendar.getInstance(),comprador1,2000.0)).encerrado().constroi();

        Leilao leilao2 = new LeilaoBuilder().comNome("Nintendo Wii").comValor(2500.0).comDono(dono).diasAtras(6)
                .comLance(new Lance(Calendar.getInstance(),comprador1,3000.0))
                .comLance(new Lance(Calendar.getInstance(),comprador2,3500.0))
                .comLance(new Lance(Calendar.getInstance(),comprador1,4000.0))
                .constroi();

        Leilao leilao3 = new LeilaoBuilder().comNome("Xbox").comValor(3000.0).comDono(dono).diasAtras(12)
                .comLance(new Lance(Calendar.getInstance(),comprador1,4000.0)).usado().constroi();

        usuarioDao.salvar(dono);
        usuarioDao.salvar(comprador1);
        usuarioDao.salvar(comprador2);
        leilaoDao.salvar(leilao1);
        leilaoDao.salvar(leilao2);
        leilaoDao.salvar(leilao3);

        List<Leilao> leiloes = leilaoDao.disputadosEntre(1000.0, 3000.0);

        assertEquals(1, leiloes.size());
        assertEquals("Nintendo Wii", leiloes.get(0).getNome());
    }
1 resposta
solução

Oi Diego

Perfeito, obrigado por compartilhar.