testei porem não funciona no envio do compare do evento log para o AlunoMatriculado e não vai, segui passo a passo, acho que falta um código abaixo do vídeo para ter um de para com o que é passado.
testei porem não funciona no envio do compare do evento log para o AlunoMatriculado e não vai, segui passo a passo, acho que falta um código abaixo do vídeo para ter um de para com o que é passado.
package br.com.alura.escola.dominio.aluno;
import java.time.format.DateTimeFormatter;
import br.com.alura.escola.dominio.Evento; import br.com.alura.escola.dominio.Ouvinte;
public class LogDeAlunoMatriculado extends Ouvinte {
@Override
public void reageAo(Evento evento) {
String momentoFormatado = evento.momento().format(DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm"));
System.out.println(
String.format("Aluno matriculado do cpf: %s em: %s", ((AlunoMatriculado) evento).getCpfDoAluno().getNumero(), momentoFormatado));
}
@Override
protected boolean deveProcessar(Evento evento) {
return evento instanceof AlunoMatriculado;
}
}
package br.com.alura.escola.dominio;
import java.util.ArrayList; import java.util.List;
public class PublicadorDeEventos {
private List<Ouvinte> ouvintes = new ArrayList<>();
public void adicionar(Ouvinte ouvinte) {
this.ouvintes.add(ouvinte);
}
public void publicar(Evento evento) {
this.ouvintes.forEach(o -> {
o.deveProcessar(evento);
});
}
}
package br.com.alura.escola.dominio;
public abstract class Ouvinte {
public void processa(Evento evento) {
if (this.deveProcessar(evento)) {
this.reageAo(evento);
}
}
protected abstract void reageAo(Evento evento);
protected abstract boolean deveProcessar(Evento evento);
} package br.com.alura.escola.aplicacao.aluno.matricular;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
import br.com.alura.escola.dominio.PublicadorDeEventos; import br.com.alura.escola.dominio.aluno.Aluno; import br.com.alura.escola.dominio.aluno.CPF; import br.com.alura.escola.dominio.aluno.LogDeAlunoMatriculado; import br.com.alura.escola.infra.aluno.RepositorioDeAlunosEmMemoria;
class MatricularAlunoTest {
@Test
void alunoDeveriaSerPersistido() {
// MOCK -> mockito
RepositorioDeAlunosEmMemoria repositorio = new RepositorioDeAlunosEmMemoria();
PublicadorDeEventos publicadorDeEventos = new PublicadorDeEventos();
publicadorDeEventos.adicionar(new LogDeAlunoMatriculado());
MatricularAluno useCase = new MatricularAluno(repositorio, publicadorDeEventos);
MatricularAlunoDto dados = new MatricularAlunoDto("Roberto", "401.735.868-30", "aluno@gmail.com");
useCase.executa(dados);
Aluno encontrado = repositorio.buscarPorCPF(new CPF("401.735.868-30"));
assertEquals("Roberto", encontrado.getNome());
assertEquals("401.735.868-30", encontrado.getCpf().getNumero());
assertEquals("aluno@gmail.com", encontrado.getEmail());
}
}
Já consegui encontrar o problema estava no:
public void publicar(Evento evento) { this.ouvintes.forEach(o -> { o.deveProcessar(evento); }); }
deveria ser
public void publicar(Evento evento) { this.ouvintes.forEach(o -> { o.processa(evento); }); }