@Test
public void deveAtualizarLeiloesEncerrados(){
RepositorioDeLeiloes leilaoDaoMockado = mock(LeilaoDao.class);
when(leilaoDaoMockado.correntes()).thenReturn(listaLeiloesAntigos);
listaLeiloesAntigos.stream().forEachOrdered(Leilao::encerra);
List<Leilao> listaAtualizadaComLeiloesEncerrados = listaLeiloesAntigos.stream().peek(l -> l.isEncerrado())
.collect(Collectors.toList());
listaAtualizadaComLeiloesEncerrados.forEach(l -> leilaoDaoMockado.atualiza(l));
EncerradorDeLeilao encerrador = new EncerradorDeLeilao(leilaoDaoMockado);
encerrador.encerra();
assertEquals(2, encerrador.getTotalEncerrados());
assertTrue(listaAtualizadaComLeiloesEncerrados.get(0).isEncerrado());
assertTrue(listaAtualizadaComLeiloesEncerrados.get(1).isEncerrado());
verify(leilaoDaoMockado, never()).salva(listaLeiloesAntigos.get(0)); // Nunca foi chamado
verify(leilaoDaoMockado, atLeast(1)).atualiza(listaLeiloesAntigos.get(0)); // Foi chamado qualquer número de vezes
verify(leilaoDaoMockado, atLeastOnce()).atualiza(listaLeiloesAntigos.get(0)); //Foi chamado pelo menos 1X
verify(leilaoDaoMockado, times(2)).atualiza(listaLeiloesAntigos.get(0)); // Foi chamado 2 vezes
verify(leilaoDaoMockado, atLeast(2)).atualiza(listaLeiloesAntigos.get(0)); //Foi chamado pelo menos 2X
verify(leilaoDaoMockado, atMost(2)).atualiza(listaLeiloesAntigos.get(0)); //Foi chamado no máximo 2X
/*
Não concordo com a resolução do instrutor, pois a sequência esta desordenada já que há um método com nome "encerra"
pertencente a classe "EncerradorDeLeilao.java" e também um método:
public void encerra() { this.encerrado = true; } que pertence a classe Leilao.java
Além de ser uma lista de leilões a condição FOR não segue o ciclo de uma lista, a minha solução foi de
resolver com Java 8, caso tenha uma solução melhor, favor inserir aqui ou enviar para meu e-mail:
tibaestiago@gmail.com
*/
}