Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Evento não funciona mesmo estando na lista de eventos adicionados.

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.

2 respostas

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());

}

}

solução!

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); }); }