4
respostas

Aula 3 - Exercício 4 Testando consulta com dependências

na classe LeilaoBuilder nao existe o metodo comLance, Devo cria-lo?

4 respostas

Não existe uma classe LanceDao tambem

Oi , Ana!

Realmente não existe o método "comLance" na classe LeilaoBuilder. O exemplo apenas mostrou um forma "elegante" de adicionar os lances no leilão.

A classe LanceDao não precisa ser criada porque a classe Leilão já gerencia a persistência dos lances com o Hibernate.

@OneToMany(cascade=CascadeType.ALL, orphanRemoval=true, mappedBy="leilao") private List lances;

Olá Ana.

Caso deseje implementar, segue uma solução simples

public class LeilaoBuilder {

    private Usuario dono;
    private double valor;
    private String nome;
    private boolean usado;
    private Calendar dataAbertura;
    private boolean encerrado;
    private List<Lance> lances;

    public LeilaoBuilder() {
        this.dono = new Usuario("Joao da Silva", "joao@silva.com.br");
        this.valor = 1500.0;
        this.nome = "XBox";
        this.usado = false;
        this.dataAbertura = Calendar.getInstance();
        this.lances = new  ArrayList<>();
    }

    public LeilaoBuilder comDono(Usuario dono) {
        this.dono = dono;
        return this;
    }

    public LeilaoBuilder comValor(double valor) {
        this.valor = valor;
        return this;
    }

    public LeilaoBuilder comNome(String nome) {
        this.nome = nome;
        return this;
    }

    public LeilaoBuilder usado() {
        this.usado = true;
        return this;
    }

    public LeilaoBuilder encerrado() {
        this.encerrado = true;
        return this;
    }

    public LeilaoBuilder diasAtras(int dias) {
        Calendar data = Calendar.getInstance();
        data.add(Calendar.DAY_OF_MONTH, -dias);

        this.dataAbertura = data;

        return this;
    }

    public Leilao constroi() {
        Leilao leilao = new Leilao(nome, valor, dono, usado);
        leilao.setDataAbertura(dataAbertura);
        if (encerrado) {
            leilao.encerra();
        }

        for(Lance lance : lances){
            lance.setLeilao(leilao);
            leilao.adicionaLance(lance);
        }

        return leilao;
    }

    public LeilaoBuilder comLance(Calendar data, Usuario dono, double valor){
        lances.add(new Lance(dataAbertura, dono, valor, null));
        return this;
    }
}

Pessoal, construí o teste usando o que o código já disponibilizava e ficou dessa forma:

    @Test
    public void deveRetornarLeilaoNaoEncerradoComMaisDeTresLancesEntreValor() {
        Usuario fulano = new  Usuario("Fulano de Tal", "fulano@email.com");
        Usuario beltrano = new Usuario("Beltrano Silva", "beltrano@email.com");
        Usuario ciclano = new Usuario("Ciclano Costa", "ciclano@email.com");

        usuarioDao.salvar(fulano);
        usuarioDao.salvar(beltrano);
        usuarioDao.salvar(ciclano);

        Leilao leilao1 = new LeilaoBuilder().comNome("Playstation").comDono(fulano).comValor(1200.0).build();

        Lance lanceGame1 = new Lance(Calendar.getInstance(), beltrano, 1250.0, leilao1);
        Lance lanceGame2 = new Lance(Calendar.getInstance(), ciclano, 1300.0, leilao1);        
        Lance lanceGame3 = new Lance(Calendar.getInstance(), beltrano, 1400.0, leilao1);
        Lance lanceGame4 = new Lance(Calendar.getInstance(), ciclano, 1499.0, leilao1);

        leilao1.adicionaLance(lanceGame1);
        leilao1.adicionaLance(lanceGame2);
        leilao1.adicionaLance(lanceGame3);
        leilao1.adicionaLance(lanceGame4);

        // leilao sem lances
        Leilao leilao2 = new LeilaoBuilder().comNome("Smartphone").comDono(fulano).comValor(799.0).build();

        // leilao com lances mas encerrado
        Leilao leilao3 = new LeilaoBuilder().comNome("TV Led").comDono(fulano).comValor(1999.0).encerrado().build();

        Lance lanceTv1 = new Lance(Calendar.getInstance(), beltrano, 2250.0, leilao3);
        Lance lanceTv2 = new Lance(Calendar.getInstance(), ciclano, 2300.0, leilao3);        
        Lance lanceTv3 = new Lance(Calendar.getInstance(), beltrano, 2400.0, leilao3);
        Lance lanceTv4 = new Lance(Calendar.getInstance(), ciclano, 2499.0, leilao3);

        leilao3.adicionaLance(lanceTv1);
        leilao3.adicionaLance(lanceTv2);
        leilao3.adicionaLance(lanceTv3);
        leilao3.adicionaLance(lanceTv4);

        leilaoDao.salvar(leilao1);
        leilaoDao.salvar(leilao2);
        leilaoDao.salvar(leilao3);

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

        assertEquals(1, leiloes.size());
    }

Espero que ajude. =)