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.
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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); }); }