Conforme as aulas estou fazendo o caso de teste "deveAtualizarLeiloesEncerrados", porem devo implementar a interface "RepositorioDeLeiloes" . Segue o passo a passo da implementação, porém meu código quebrou nos casos de teste "deveEncerrarLeiloesQueComecaramUmaSemanaAtras" e "deveAtualizarLeiloesEncerrados".
Segue abaixo meu CODIGO.
CLASSE REPOSITORIO LEILAO
package br.com.caelum.leilao.infra.dao;
public interface RepositorioDeLeiloes {
private class RepositorioDeLeiloes {
public interface RepositorioDeLeiloes {
void salva(Leilao leilao);
List<Leilao> encerrados();
List<Leilao> correntes();
void atualiza(Leilao leilao);
}
}}
CLASSE ENCERRADOR LEILAO
package br.com.caelum.leilao.servico;
import java.util.Calendar; import java.util.List;
import br.com.caelum.leilao.dominio.Leilao; import br.com.caelum.leilao.infra.dao.LeilaoDao; import br.com.caelum.leilao.infra.dao.LeilaoDaoFalso;
public class EncerradorDeLeilao {
private final RepositorioDeLeiloes dao;
public EncerradorDeLeilao(RepositorioDeLeiloes dao) {
this.dao = dao;
}
private int total = 0;
private final LeilaoDao dao;
public EncerradorDeLeilao(LeilaoDao dao) {
this.dao = dao;
}
public void encerra() {
List<Leilao> todosLeiloesCorrentes = dao.correntes();
for (Leilao leilao : todosLeiloesCorrentes) {
if (comecouSemanaPassada(leilao)) {
leilao.encerra();
total++;
dao.atualiza(leilao);
}
}
}
private boolean comecouSemanaPassada(Leilao leilao) {
return diasEntre(leilao.getData(), Calendar.getInstance()) >= 7;
}
private int diasEntre(Calendar inicio, Calendar fim) {
Calendar data = (Calendar) inicio.clone();
int diasNoIntervalo = 0;
while (data.before(fim)) {
data.add(Calendar.DAY_OF_MONTH, 1);
diasNoIntervalo++;
}
return diasNoIntervalo;
}
public int getTotalEncerrados() {
return total;
}
}
CLASSE ENCERRADOR DE LEILAO TESTE
package br.com.caelum.leilao.servico;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when;
import java.util.Arrays; import java.util.Calendar; import java.util.List;
import org.junit.Test;
import br.com.caelum.leilao.builder.CriadorDeLeilao; import br.com.caelum.leilao.dominio.Leilao; import br.com.caelum.leilao.infra.dao.LeilaoDao; import br.com.caelum.leilao.infra.dao.LeilaoDaoFalso;
public class EncerradorDeLeilaoTest { @Test
public void deveEncerrarLeiloesQueComecaramUmaSemanaAtras() {
Calendar antiga = Calendar.getInstance();
antiga.set(1999, 1, 20);
Leilao leilao1 = new CriadorDeLeilao().para("TV de plasma").naData(antiga).constroi();
Leilao leilao2 = new CriadorDeLeilao().para("Geladeira").naData(antiga).constroi();
List<Leilao> leiloesAntigos = Arrays.asList(leilao1, leilao2);
RepositorioDeLeiloes daoFalso = (RepositorioDeLeiloes) mock(LeilaoDao.class);
when(daoFalso.correntes()).thenReturn(leiloesAntigos);
EncerradorDeLeilao encerrador = new EncerradorDeLeilao(daoFalso);
encerrador.encerra();
// vamos conferir tambem o tamanho da lista!
assertEquals(2, encerrador.getTotalEncerrados());
assertTrue(leilao1.isEncerrado());
assertTrue(leilao2.isEncerrado());
}
@Test
public void deveAtualizarLeiloesEncerrados() {
Calendar antiga = Calendar.getInstance();
antiga.set(1999, 1, 20);
Leilao leilao1 = new CriadorDeLeilao().para("TV de plasma")
.naData(antiga).constroi();
RepositorioDeLeiloes daoFalso = mock(RepositorioDeLeiloes.class);
when(daoFalso.correntes()).thenReturn(Arrays.asList(leilao1));
EncerradorDeLeilao encerrador = new EncerradorDeLeilao(daoFalso);
encerrador.encerra();
// verificando que o metodo atualiza foi realmente invocado!
verify(daoFalso).atualiza(leilao1);
}
}